Compile runtime tests before running
This commit is contained in:
parent
44312b9653
commit
1e6e6f0fbf
@ -33,14 +33,13 @@ def run_compiler(args):
|
|||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
|
|
||||||
class OutputCheckTest:
|
class OutputCheckTest:
|
||||||
def __init__(self, name, source_file, errors=None, extra_args=None):
|
def __init__(self, name, errors=None, extra_args=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.source_file = source_file
|
|
||||||
self.errors = errors
|
self.errors = errors
|
||||||
self.extra_args = extra_args
|
self.extra_args = extra_args
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
args = [self.source_file]
|
args = [self.name + '.pwn']
|
||||||
if self.extra_args is not None:
|
if self.extra_args is not None:
|
||||||
args += extra_args
|
args += extra_args
|
||||||
process = run_compiler(args=args)
|
process = run_compiler(args=args)
|
||||||
@ -63,25 +62,23 @@ class OutputCheckTest:
|
|||||||
).format(expected_errors, errors)
|
).format(expected_errors, errors)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
class CrashTest:
|
|
||||||
def __init__(self, name, source_file, extra_args=None):
|
|
||||||
self.name = name
|
|
||||||
self.source_file = source_file
|
|
||||||
self.extra_args = extra_args
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
# TODO: Check if the process crashed.
|
|
||||||
return True
|
|
||||||
|
|
||||||
class RuntimeTest:
|
class RuntimeTest:
|
||||||
def __init__(self, name, amx_file, output, should_fail):
|
def __init__(self, name, output, should_fail):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.amx_file = amx_file
|
|
||||||
self.output = output
|
self.output = output
|
||||||
self.should_fail = should_fail
|
self.should_fail = should_fail
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
process = subprocess.Popen([options.runner, self.amx_file],
|
process = run_compiler([self.name + '.pwn'])
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
if process.returncode != 0:
|
||||||
|
self.fail_reason = \
|
||||||
|
'Compiler exited with status {}'.format(process.returncode)
|
||||||
|
errors = stderr.decode('utf-8')
|
||||||
|
if errors:
|
||||||
|
self.fail_reason += '\n\nErrors:\n\n{}'.format(errors)
|
||||||
|
return False
|
||||||
|
process = subprocess.Popen([options.runner, self.name + '.amx'],
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
stdout, stderr = process.communicate()
|
stdout, stderr = process.communicate()
|
||||||
@ -116,14 +113,12 @@ for meta_file in glob.glob('*.meta'):
|
|||||||
test_type = metadata['test_type']
|
test_type = metadata['test_type']
|
||||||
if test_type == 'output_check':
|
if test_type == 'output_check':
|
||||||
tests.append(OutputCheckTest(name=name,
|
tests.append(OutputCheckTest(name=name,
|
||||||
source_file=name + '.pwn',
|
|
||||||
errors=metadata.get('errors'),
|
errors=metadata.get('errors'),
|
||||||
extra_args=metadata.get('extra_args')))
|
extra_args=metadata.get('extra_args')))
|
||||||
elif test_type == 'crash':
|
elif test_type == 'crash':
|
||||||
tests.append(CrashTest(name=name, source_file=name + '.pwn'))
|
tests.append(CrashTest(name=name))
|
||||||
elif test_type == 'runtime':
|
elif test_type == 'runtime':
|
||||||
tests.append(RuntimeTest(name=name,
|
tests.append(RuntimeTest(name=name,
|
||||||
amx_file=name + '.amx',
|
|
||||||
output=metadata.get('output'),
|
output=metadata.get('output'),
|
||||||
should_fail=metadata.get('should_fail')))
|
should_fail=metadata.get('should_fail')))
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user