Switch psa_generate_tests to PSAMacroEnumerator
Switch psa_generate_tests from using the macro_collector module's
PSAMacroCollector class, which was primarily written to generate
destructors for the PSA value constructors, to its PSAMacroEnumerator
class, which was primarily written to generate test cases.
This allows psa_generate_tests to generate arguments for more macros.
In particular, it now collects macro arguments from
test_suite_psa_crypto_metadata. Algorithms with parameters are now
supported.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/scripts/mbedtls_dev/macro_collector.py b/scripts/mbedtls_dev/macro_collector.py
index f5f81c8..3e28f62 100644
--- a/scripts/mbedtls_dev/macro_collector.py
+++ b/scripts/mbedtls_dev/macro_collector.py
@@ -105,6 +105,16 @@
'tag_length': [],
'min_tag_length': [],
} #type: Dict[str, List[str]]
+ self.include_intermediate = False
+
+ def is_internal_name(self, name: str) -> bool:
+ """Whether this is an internal macro. Internal macros will be skipped."""
+ if not self.include_intermediate:
+ if name.endswith('_BASE') or name.endswith('_NONE'):
+ return True
+ if '_CATEGORY_' in name:
+ return True
+ return name.endswith('_FLAG') or name.endswith('_MASK')
def gather_arguments(self) -> None:
"""Populate the list of values for macro arguments.
@@ -192,15 +202,6 @@
self.key_types_from_group = {} #type: Dict[str, str]
self.algorithms_from_hash = {} #type: Dict[str, str]
- def is_internal_name(self, name: str) -> bool:
- """Whether this is an internal macro. Internal macros will be skipped."""
- if not self.include_intermediate:
- if name.endswith('_BASE') or name.endswith('_NONE'):
- return True
- if '_CATEGORY_' in name:
- return True
- return name.endswith('_FLAG') or name.endswith('_MASK')
-
def record_algorithm_subtype(self, name: str, expansion: str) -> None:
"""Record the subtype of an algorithm constructor.
@@ -301,7 +302,7 @@
self.read_line(line)
-class InputsForTest(PSAMacroCollector):
+class InputsForTest(PSAMacroEnumerator):
# pylint: disable=too-many-instance-attributes
"""Accumulate information about macros to test.
enumerate
@@ -408,7 +409,8 @@
name = m.group(1)
self.all_declared.add(name)
if re.search(self._excluded_name_re, name) or \
- name in self._excluded_names:
+ name in self._excluded_names or \
+ self.is_internal_name(name):
return
dest = self.table_by_prefix.get(m.group(2))
if dest is None: