66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
"""
|
|
Checks that files duplicated across schemes/implementations are consistent.
|
|
"""
|
|
|
|
import os
|
|
import pqclean
|
|
import helpers
|
|
import unittest
|
|
import yaml
|
|
|
|
|
|
def _skipped_test(*args, **kwargs):
|
|
raise unittest.SkipTest("Skipped consistency check")
|
|
|
|
|
|
def test_duplicate_consistency():
|
|
for scheme in pqclean.Scheme.all_schemes():
|
|
for implementation in scheme.implementations:
|
|
if not helpers.permit_test('duplicate_consistency',
|
|
implementation):
|
|
yield _skipped_test, implementation
|
|
continue
|
|
|
|
if os.path.isfile(
|
|
os.path.join(
|
|
'duplicate_consistency',
|
|
'{}_{}.yml'.format(scheme.name, implementation.name))):
|
|
metafile = os.path.join(
|
|
'duplicate_consistency',
|
|
'{}_{}.yml'.format(scheme.name, implementation.name))
|
|
with open(metafile, encoding='utf-8') as f:
|
|
metadata = yaml.safe_load(f.read())
|
|
for group in metadata['consistency_checks']:
|
|
source = pqclean.Implementation.by_name(
|
|
group['source']['scheme'],
|
|
group['source']['implementation'])
|
|
for file in group['files']:
|
|
yield (check_duplicate_consistency, implementation,
|
|
source, file)
|
|
|
|
|
|
def file_get_contents(filename):
|
|
with open(filename) as f:
|
|
return f.read()
|
|
|
|
|
|
@helpers.skip_windows()
|
|
def check_duplicate_consistency(implementation, source, file):
|
|
transformed_src = helpers.run_subprocess(
|
|
['sed', '-e', 's/{}/{}/g'.format(source.namespace_prefix(),
|
|
implementation.namespace_prefix()), os.path.join(source.path(), file)]
|
|
)
|
|
this_src = file_get_contents(os.path.join(implementation.path(), file))
|
|
print(os.path.join(implementation.path(), file))
|
|
print(this_src)
|
|
assert(transformed_src == this_src)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
import nose2
|
|
nose2.main()
|
|
except ImportError:
|
|
import nose
|
|
nose.runmodule()
|