mirror of
https://github.com/henrydcase/pqc.git
synced 2024-11-26 09:21:28 +00:00
75be658074
Modify the tests to no longer construct the classes multiple times and to have them make use of the new helpers.make() function.
66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
"""
|
|
Checks that every .c and .h file in an implementation is present as a
|
|
dependency of that scheme's Makefile.
|
|
"""
|
|
|
|
import os
|
|
import pqclean
|
|
import helpers
|
|
import glob
|
|
import datetime
|
|
|
|
|
|
def test_makefile_dependencies():
|
|
for scheme in pqclean.Scheme.all_schemes():
|
|
for implementation in scheme.implementations:
|
|
# initial build - want to have *all* files in place at beginning
|
|
helpers.make('clean', working_dir=implementation.path())
|
|
helpers.make(working_dir=implementation.path())
|
|
# test case for each candidate file
|
|
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
|
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
|
for file in cfiles + hfiles:
|
|
yield (check_makefile_dependencies, implementation, file)
|
|
|
|
|
|
def check_makefile_dependencies(implementation, file):
|
|
cfiles = glob.glob(os.path.join(implementation.path(), '*.c'))
|
|
hfiles = glob.glob(os.path.join(implementation.path(), '*.h'))
|
|
ofiles = glob.glob(os.path.join(implementation.path(), '*.o'))
|
|
|
|
libfile = os.path.join(implementation.path(), implementation.libname())
|
|
|
|
# modification time-based calculations is tricky on a sub-second basis
|
|
# so we reset all the modification times to a known and "sensible" order
|
|
now = datetime.datetime.now()
|
|
ago15 = now - datetime.timedelta(seconds=15)
|
|
ago10 = now - datetime.timedelta(seconds=10)
|
|
ago5 = now - datetime.timedelta(seconds=5)
|
|
formatstring = "%Y%m%d%H%M.%S"
|
|
helpers.run_subprocess(
|
|
['touch', '-t', ago15.strftime(formatstring)] + cfiles + hfiles)
|
|
helpers.run_subprocess(
|
|
['touch', '-t', ago10.strftime(formatstring)] + ofiles)
|
|
helpers.run_subprocess(
|
|
['touch', '-t', ago5.strftime(formatstring), libfile])
|
|
|
|
# Sanity check: the scheme is up to date
|
|
helpers.run_subprocess(['make', '-q'], implementation.path(),
|
|
expected_returncode=0)
|
|
|
|
# touch the candidate .c / .h file
|
|
helpers.run_subprocess(['touch', '-t', now.strftime(formatstring), file])
|
|
|
|
# check if it needs to be rebuilt using make -q
|
|
helpers.run_subprocess(['make', '-q'], implementation.path(),
|
|
expected_returncode=1)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
import nose2
|
|
nose2.main()
|
|
except ImportError:
|
|
import nose
|
|
nose.runmodule()
|