mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-23 18:15:37 +01:00
generate_psa_tests.py: allow generating each file independently
Generating all files all the time makes debugging one specific target harder. So support generating a selection of targets only. As a bonus, it is now more apparent what files this script generates, and check-generated-files.sh takes advantage of it. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
b94ea51ad0
commit
0298bdae8d
@ -106,4 +106,4 @@ check scripts/generate_query_config.pl programs/test/query_config.c
|
|||||||
check scripts/generate_features.pl library/version_features.c
|
check scripts/generate_features.pl library/version_features.c
|
||||||
check scripts/generate_visualc_files.pl visualc/VS2010
|
check scripts/generate_visualc_files.pl visualc/VS2010
|
||||||
check scripts/generate_psa_constants.py programs/psa/psa_constant_names_generated.c
|
check scripts/generate_psa_constants.py programs/psa/psa_constant_names_generated.c
|
||||||
check tests/scripts/generate_psa_tests.py tests/suites/test_suite_psa_crypto_not_supported.generated.data
|
check tests/scripts/generate_psa_tests.py $(tests/scripts/generate_psa_tests.py --list)
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""Generate test data for PSA cryptographic mechanisms.
|
"""Generate test data for PSA cryptographic mechanisms.
|
||||||
|
|
||||||
|
With no arguments, generate all test data. With non-option arguments,
|
||||||
|
generate only the specified files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright The Mbed TLS Contributors
|
# Copyright The Mbed TLS Contributors
|
||||||
@ -21,7 +24,7 @@ import argparse
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from typing import FrozenSet, Iterable, List, Optional, TypeVar
|
from typing import Callable, Dict, FrozenSet, Iterable, List, Optional, TypeVar
|
||||||
|
|
||||||
import scripts_path # pylint: disable=unused-import
|
import scripts_path # pylint: disable=unused-import
|
||||||
from mbedtls_dev import crypto_knowledge
|
from mbedtls_dev import crypto_knowledge
|
||||||
@ -210,27 +213,52 @@ class TestGenerator:
|
|||||||
value = getattr(options, name, None)
|
value = getattr(options, name, None)
|
||||||
return default if value is None else value
|
return default if value is None else value
|
||||||
|
|
||||||
|
def filename_for(self, basename: str) -> str:
|
||||||
|
"""The location of the data file with the specified base name."""
|
||||||
|
return os.path.join(self.test_suite_directory, basename + '.data')
|
||||||
|
|
||||||
def write_test_data_file(self, basename: str,
|
def write_test_data_file(self, basename: str,
|
||||||
test_cases: Iterable[test_case.TestCase]) -> None:
|
test_cases: Iterable[test_case.TestCase]) -> None:
|
||||||
"""Write the test cases to a .data file.
|
"""Write the test cases to a .data file.
|
||||||
|
|
||||||
The output file is ``basename + '.data'`` in the test suite directory.
|
The output file is ``basename + '.data'`` in the test suite directory.
|
||||||
"""
|
"""
|
||||||
filename = os.path.join(self.test_suite_directory, basename + '.data')
|
filename = self.filename_for(basename)
|
||||||
test_case.write_data_file(filename, test_cases)
|
test_case.write_data_file(filename, test_cases)
|
||||||
|
|
||||||
def generate_all(self) -> None:
|
TARGETS = {
|
||||||
test_cases = NotSupported(self.info).generate_not_supported()
|
'test_suite_psa_crypto_not_supported.generated':
|
||||||
self.write_test_data_file(
|
lambda info: NotSupported(info).generate_not_supported(),
|
||||||
'test_suite_psa_crypto_not_supported.generated',
|
} #type: Dict[str, Callable[[Information], Iterable[test_case.TestCase]]]
|
||||||
test_cases)
|
|
||||||
|
def generate_target(self, name: str) -> None:
|
||||||
|
test_cases = self.TARGETS[name](self.info)
|
||||||
|
self.write_test_data_file(name, test_cases)
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
"""Command line entry point."""
|
"""Command line entry point."""
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
parser.add_argument('--list', action='store_true',
|
||||||
|
help='List available targets and exit')
|
||||||
|
parser.add_argument('targets', nargs='*', metavar='TARGET',
|
||||||
|
help='Target file to generate (default: all; "-": none)')
|
||||||
options = parser.parse_args(args)
|
options = parser.parse_args(args)
|
||||||
generator = TestGenerator(options)
|
generator = TestGenerator(options)
|
||||||
generator.generate_all()
|
if options.list:
|
||||||
|
for name in sorted(generator.TARGETS):
|
||||||
|
print(generator.filename_for(name))
|
||||||
|
return
|
||||||
|
if options.targets:
|
||||||
|
# Allow "-" as a special case so you can run
|
||||||
|
# ``generate_psa_tests.py - $targets`` and it works uniformly whether
|
||||||
|
# ``$targets`` is empty or not.
|
||||||
|
options.targets = [os.path.basename(re.sub(r'\.data\Z', r'', target))
|
||||||
|
for target in options.targets
|
||||||
|
if target != '-']
|
||||||
|
else:
|
||||||
|
options.targets = sorted(generator.TARGETS)
|
||||||
|
for target in options.targets:
|
||||||
|
generator.generate_target(target)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main(sys.argv[1:])
|
main(sys.argv[1:])
|
||||||
|
Loading…
Reference in New Issue
Block a user