diff --git a/crypto_sign/sphincs-shake256-128f-simple/clean/thash_shake256_simple.c b/crypto_sign/sphincs-shake256-128f-simple/clean/thash_shake256_simple.c index 7c2cdb63..341c6fd3 100644 --- a/crypto_sign/sphincs-shake256-128f-simple/clean/thash_shake256_simple.c +++ b/crypto_sign/sphincs-shake256-128f-simple/clean/thash_shake256_simple.c @@ -1,9 +1,9 @@ #include #include -#include "thash.h" #include "address.h" #include "params.h" +#include "thash.h" #include "fips202.h" diff --git a/crypto_sign/sphincs-shake256-128f-simple/clean/wots.c b/crypto_sign/sphincs-shake256-128f-simple/clean/wots.c index a6a8ada6..4431986d 100644 --- a/crypto_sign/sphincs-shake256-128f-simple/clean/wots.c +++ b/crypto_sign/sphincs-shake256-128f-simple/clean/wots.c @@ -1,11 +1,11 @@ #include #include -#include "utils.h" #include "address.h" #include "hash.h" #include "params.h" #include "thash.h" +#include "utils.h" #include "wots.h" // TODO clarify address expectations, and make them more uniform. diff --git a/test/helpers.py b/test/helpers.py index 966510f1..18ac1e4f 100644 --- a/test/helpers.py +++ b/test/helpers.py @@ -30,8 +30,11 @@ def run_subprocess(command, working_dir='.', env=None, expected_returncode=0): env=env, ) print(result.stdout.decode('utf-8')) - assert result.returncode == expected_returncode, \ - "Got unexpected return code {}".format(result.returncode) + if expected_returncode is not None: + assert result.returncode == expected_returncode, \ + "Got unexpected return code {}".format(result.returncode) + else: + return (result.returncode, result.stdout.decode('utf-8')) return result.stdout.decode('utf-8') @@ -111,8 +114,10 @@ def permit_test(testname, thing, **args): if isinstance(thing, pqclean.Implementation): scheme = thing.scheme - else: + elif isinstance(thing, pqclean.Scheme): scheme = thing + else: + return True if 'PQCLEAN_ONLY_TYPES' in os.environ: if not(scheme.type.lower() in os.environ['PQCLEAN_ONLY_TYPES'].lower().split(',')): diff --git a/test/pqclean.py b/test/pqclean.py index d11b1bce..12e1d61d 100644 --- a/test/pqclean.py +++ b/test/pqclean.py @@ -70,7 +70,7 @@ class Implementation: def __init__(self, scheme, name): self.scheme = scheme self.name = name - + def metadata(self): for i in self.scheme.metadata()['implementations']: if i['name'] == self.name: @@ -79,9 +79,6 @@ class Implementation: def path(self, base='..') -> str: return os.path.join(self.scheme.path(), self.name) - def namespace_prefix(self): - return 'PQCLEAN_{}_{}_'.format(self.scheme.name.upper(), self.name.upper()).replace('-', '') - def libname(self) -> str: if os.name == 'nt': return "lib{}_{}.lib".format(self.scheme.name, self.name) diff --git a/test/test_common.py b/test/test_common.py index 3640bb3f..e4c89939 100644 --- a/test/test_common.py +++ b/test/test_common.py @@ -12,7 +12,7 @@ import helpers def test_common(): for d in os.listdir('common'): primitive = re.sub(r"\.c$", "", d) - yield check_common, primitive + if helpers.permit_test('common', None): yield check_common, primitive def check_common(primitive): diff --git a/test/test_linter.py b/test/test_linter.py index 07e01180..e73492d5 100644 --- a/test/test_linter.py +++ b/test/test_linter.py @@ -1,6 +1,7 @@ import os from glob import glob import sys +import unittest import pqclean import helpers @@ -17,18 +18,26 @@ def test_clang_tidy(): def check_tidy(implementation: pqclean.Implementation): helpers.ensure_available('clang-tidy') - cfiles = glob(os.path.join(implementation.path(), '*.c')) + cfiles = implementation.cfiles() common_files = glob(os.path.join('..', 'common', '*.c')) - helpers.run_subprocess(['clang-tidy', - '-quiet', - '-header-filter=.*'] + - additional_flags + - [*cfiles, - *common_files, - '--', - '-iquote', os.path.join('..', 'common'), - '-iquote', implementation.path(), - ]) + (returncode, _) = helpers.run_subprocess( + ['clang-tidy', + '-quiet', + '-header-filter=.*', + *additional_flags, + *cfiles, + *common_files, + '--', + '-iquote', os.path.join('..', 'common'), + '-iquote', implementation.path()], + expected_returncode=None, + ) + + # Detect and gracefully avoid segfaults + if returncode == -11: + raise unittest.SkipTest("clang-tidy segfaulted") + else: + assert returncode == 0, "Clang-tidy returned %d" % returncode if __name__ == "__main__":