1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
from e3.fs import rm
from e3.testsuite.driver import TestDriver
from e3.testsuite.process import check_call
from e3.testsuite.result import TestStatus, TestResult
from drivers import gprbuild
import os
class DataValidationDriver(TestDriver):
"""Data validation driver.
For each test program call the program with data file defined in
data_files key of the test. If the program returns 0 assume that
the test passed.
"""
def add_test(self, dag):
self.add_fragment(dag, 'build')
tear_down_deps = []
for data_file, description in self.test_env['data_files'].iteritems():
tear_down_deps.append(data_file)
self.add_fragment(
dag,
data_file,
fun=lambda x, d=data_file, m=description:
self.run_subtest(d, m, x),
after=['build'])
self.add_fragment(dag, 'tear_down', after=tear_down_deps)
def run_subtest(self, data_file, description, previous_values):
test_name = self.test_name + '.' + data_file
result = TestResult(test_name, env=self.test_env)
if not previous_values['build']:
return TestStatus.FAIL
process = check_call(
self,
[os.path.join(self.test_env['working_dir'],
self.test_env.get('validator', 'obj/test')),
os.path.join(self.test_env['test_dir'], data_file)],
result=result)
return self.validate_result(process, data_file, result)
def validate_result(self, process, data_file, result):
# Read data file
if '<=== TEST PASSED ===>' in process.out:
return TestStatus.PASS
else:
result.set_status(TestStatus.FAIL)
self.push_result(result)
return TestStatus.FAIL
def tear_down(self, previous_values):
failures = [v for v in previous_values.values() if
not isinstance(v, TestStatus) or v != TestStatus.PASS]
if failures:
self.result.set_status(TestStatus.FAIL,
msg="%s subtests failed" % len(failures))
else:
self.result.set_status(TestStatus.PASS)
self.push_result()
if self.env.enable_cleanup:
rm(self.test_env['working_dir'], recursive=True)
def build(self, previous_values):
return gprbuild(self, gcov=self.env.gcov)
|