Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

45 linhas
1.8 KiB

  1. """
  2. Checks that files duplicated across schemes/implementations are consistent.
  3. """
  4. import os
  5. import pqclean
  6. import helpers
  7. import unittest
  8. import yaml
  9. helpers.skip_windows()
  10. def test_duplicate_consistency():
  11. for scheme in pqclean.Scheme.all_schemes():
  12. for implementation in scheme.implementations:
  13. if helpers.permit_test('duplicate_consistency', implementation):
  14. if os.path.isfile(os.path.join('duplicate_consistency', '{}_{}.yml'.format(scheme.name, implementation.name))):
  15. metafile = os.path.join('duplicate_consistency', '{}_{}.yml'.format(implementation.scheme.name, implementation.name))
  16. with open(metafile, encoding='utf-8') as f:
  17. metadata = yaml.load(f.read())
  18. for group in metadata['consistency_checks']:
  19. source = pqclean.Implementation.by_name(group['source']['scheme'], group['source']['implementation'])
  20. for file in group['files']:
  21. yield check_duplicate_consistency, implementation, source, file
  22. def file_get_contents(filename):
  23. with open(filename) as f:
  24. return f.read()
  25. def check_duplicate_consistency(implementation, source, file):
  26. transformed_src = helpers.run_subprocess(
  27. ['sed', '-e', 's/{}/{}/g'.format(source.namespace_prefix(), implementation.namespace_prefix()), os.path.join(source.path(), file)]
  28. )
  29. this_src = file_get_contents(os.path.join(implementation.path(), file))
  30. print(os.path.join(implementation.path(), file))
  31. print(this_src)
  32. assert(transformed_src == this_src)
  33. if __name__ == '__main__':
  34. try:
  35. import nose2
  36. nose2.main()
  37. except ImportError:
  38. import nose
  39. nose.runmodule()