blob: 07fa76e60f9b46706f7ffe67d74ca8a1f7585214 [file] [log] [blame]
Bence Szépkúti9f849112021-10-19 15:05:36 +02001#!/usr/bin/env python3
2#pylint: disable=missing-module-docstring
3import os
4import re
5import shutil
6import subprocess
7import sys
8
9EXPECTED_FAILURES = {
10 216, 221, 224, 225, 248, 249, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263
11}
12PSA_ARCH_TESTS_REPO = 'https://github.com/ronald-cron-arm/psa-arch-tests.git'
13PSA_ARCH_TESTS_REF = 'crypto1.0-3.0'
14
15#pylint: disable=too-many-statements
16def main():
17 mbedtls_dir = os.getcwd()
18
19 mbedcrypto_lib = 'library/libmbedcrypto.a'
20 if not os.path.exists(mbedcrypto_lib):
21 subprocess.check_call(['make', mbedcrypto_lib])
22
23 psa_arch_tests_dir = 'psa-arch-tests'
24 try:
25 os.mkdir(psa_arch_tests_dir)
26 except FileExistsError:
27 pass
28 os.chdir(psa_arch_tests_dir)
29
30 subprocess.check_call(['git', 'init'])
31 subprocess.check_call(['git', 'fetch', PSA_ARCH_TESTS_REPO, PSA_ARCH_TESTS_REF])
32 subprocess.check_call(['git', 'checkout', 'FETCH_HEAD'])
33
34 build_dir = 'api-tests/build'
35 try:
36 shutil.rmtree(build_dir)
37 except FileNotFoundError:
38 pass
39 os.mkdir(build_dir)
40 os.chdir(build_dir)
41
42 #pylint: disable=bad-continuation
43 subprocess.check_call([
44 'cmake', '..', '-GUnix Makefiles',
45 '-DTARGET=tgt_dev_apis_stdc',
46 '-DTOOLCHAIN=HOST_GCC',
47 '-DSUITE=CRYPTO',
48 '-DPSA_CRYPTO_LIB_FILENAME={}/library/libmbedcrypto.a'.format(mbedtls_dir),
49 '-DPSA_INCLUDE_PATHS={}/include'.format(mbedtls_dir)
50 ])
51 subprocess.check_call(['cmake', '--build', '.'])
52
53 proc = subprocess.Popen(['./psa-arch-tests-crypto'],
54 bufsize=1, stdout=subprocess.PIPE, universal_newlines=True)
55
56 test_re = re.compile('^TEST(?:: ([0-9]*)| RESULT: FAILED)')
57 test = -1
58 unexpected_successes = set(EXPECTED_FAILURES)
59 expected_failures = []
60 unexpected_failures = []
61 for line in proc.stdout:
62 print(line[:-1])
63 match = test_re.match(line)
64 if match is not None:
65 if match.group(1) is not None:
66 test = int(match.group(1))
67 else:
68 try:
69 unexpected_successes.remove(test)
70 expected_failures.append(test)
71 except KeyError:
72 unexpected_failures.append(test)
73 proc.wait()
74
75 print()
76 print('***** test_psa_compliance.py report ******')
77 print()
78 print('Expected failures:', ', '.join(str(i) for i in expected_failures))
79 print('Unexpected failures:', ', '.join(str(i) for i in unexpected_failures))
80 print('Unexpected successes:', ', '.join(str(i) for i in sorted(unexpected_successes)))
81 print()
82 if unexpected_successes or unexpected_failures:
83 if unexpected_successes:
84 print('Unexpected successes encountered.')
85 #pylint: disable=line-too-long
86 print('Please remove the corresponding tests from EXPECTED_FAILURES in tests/scripts/compliance_test.py')
87 print()
88 print('FAILED')
89 sys.exit(1)
90 else:
91 os.chdir(mbedtls_dir)
92 shutil.rmtree(psa_arch_tests_dir)
93 print('SUCCESS')
94
95if __name__ == '__main__':
96 main()