75be658074
Modify the tests to no longer construct the classes multiple times and to have them make use of the new helpers.make() function.
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
"""
|
|
Checks that no dynamic memory functions are used
|
|
"""
|
|
|
|
import pqclean
|
|
import helpers
|
|
import sys
|
|
import unittest
|
|
|
|
|
|
def test_dynamic_memory():
|
|
if sys.platform not in ['linux', 'darwin']:
|
|
raise unittest.SkipTest()
|
|
for scheme in pqclean.Scheme.all_schemes():
|
|
for implementation in scheme.implementations:
|
|
# Keep this loop outside, to allow multiple assertions
|
|
for function in ['malloc', 'free', 'realloc', 'calloc']:
|
|
yield (check_dynamic_memory, implementation, function)
|
|
|
|
|
|
def check_dynamic_memory(implementation, function):
|
|
# 'make' will take care of not rebuilding existing library files
|
|
helpers.make(working_dir=implementation.path())
|
|
scheme_name = implementation.scheme.name
|
|
out = helpers.run_subprocess(
|
|
['nm', '-g', 'lib{}_{}.a'.format(scheme_name, implementation.name)],
|
|
implementation.path()
|
|
)
|
|
|
|
lines = out.strip().split("\n")
|
|
|
|
for line in lines:
|
|
if 'U {}'.format(function) in line:
|
|
raise AssertionError(
|
|
"Illegal use of dynamic memory function '{}'".format(function))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
import nose2
|
|
nose2.main()
|
|
except ImportError:
|
|
import nose
|
|
nose.runmodule()
|