harness: split up compiler-rt tests in more testcases
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Fri, 1 Apr 2016 15:04:59 +0000 (17:04 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Fri, 1 Apr 2016 15:04:59 +0000 (17:04 +0200)
Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

tools/harness/harness.py
tools/harness/results.py
tools/harness/scalebench.py
tools/harness/tests/compiler-rt_builtins.py

index 2f2ae62..553cdac 100755 (executable)
@@ -69,6 +69,19 @@ def process_output(test, path):
     # file did not exist
     return ["could not open %s to process test output" % raw_file_name]
 
+def extract_errors(test, path):
+    raw_file_name = os.path.join(path, RAW_FILE_NAME)
+    debug.verbose('open %s for raw input' % raw_file_name)
+    raw_file = open(raw_file_name, 'r')
+
+    try:
+        results = test.process_data(path, raw_file)
+    finally:
+        raw_file.close()
+
+    return results.errors if results.errors is not None else None
+
+
 def process_results(test, path):
     # open raw file for input processing
     raw_file_name = os.path.join(path, RAW_FILE_NAME)
index 2ae3e6c..015dd03 100644 (file)
@@ -32,6 +32,20 @@ class PassFailResult(ResultsBase):
         return self.passfail
 
 
+class PassFailMultiResult(ResultsBase):
+    def __init__(self, name, errors=[]):
+        self.errors = errors
+        self.name = name
+
+    def passed(self):
+        return len(self.errors) == 0
+
+    def to_file(self, fh):
+        if len(self.errors) > 0:
+            fh.write('%d error(s) in %s\n' % (len(self.errors), self.name))
+            for error in self.errors:
+                fh.write(error)
+
 class RowResults(ResultsBase):
     """Results class that maintains numeric values grouped by rows.
     """
index e8206b8..6cca04e 100755 (executable)
@@ -168,6 +168,14 @@ def make_results_dir(options, build, machine, test):
     os.makedirs(path)
     return path
 
+def make_run_dir(options, build, machine):
+    # Create a unique directory for the output from this test
+    timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
+    dirname = '-'.join([build.name, machine.name, timestamp])
+    path = os.path.join(options.resultsdir, str(datetime.datetime.now().year), dirname)
+    debug.verbose('create result directory %s' % path)
+    os.makedirs(path)
+    return path
 
 def write_description(options, checkout, build, machine, test, path):
     debug.verbose('write description file')
@@ -226,7 +234,9 @@ def write_testcase(build, machine, test, path, passed,
                 tc['stdout'],
                 )
         if not passed:
-            ju_tc.add_failure_info(message="Failed")
+            errors = ''.join([ unicode(l, errors='replace')
+                for l in harness.extract_errors(test, path)])
+            ju_tc.add_failure_info(message=errors)
         return ju_tc
     else:
         return tc
@@ -321,6 +331,7 @@ def main(options):
 
     # produce JUnit style xml report if requested
     if options.xml:
+        path = make_run_dir(options, build, machine)
         write_xml_report(testcases, path)
 
     debug.log('all done!')
index 942a100..545efbd 100644 (file)
@@ -7,10 +7,9 @@
 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
 ##########################################################################
 
-import re
 import tests
 from common import TestCommon
-from results import PassFailResult
+from results import PassFailMultiResult
 
 class CompilerRTBuiltinsAbstract(TestCommon):
 
@@ -19,11 +18,12 @@ class CompilerRTBuiltinsAbstract(TestCommon):
 
     def process_data(self, testdir, rawiter):
         # the test passed if no error occurred
-        passed = True
+        errors = []
         for line in rawiter:
             if "error in" in line:
-                passed = False
-        return PassFailResult(passed)
+                errors.append(line)
+
+        return PassFailMultiResult(self.name, errors)
 
 @tests.add_test
 class CompilerRTBuiltins1(CompilerRTBuiltinsAbstract):
@@ -98,10 +98,12 @@ class CompilerRTBuiltins2(CompilerRTBuiltinsAbstract):
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixtfdi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixtfsi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixtfti_test")
+        # this errors
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunsdfdi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunsdfsi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunsdfsivfp_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunsdfti_test")
+        # this errors
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunssfdi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunssfsi_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/fixunssfsivfp_test")
@@ -124,6 +126,16 @@ class CompilerRTBuiltins2(CompilerRTBuiltinsAbstract):
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floattidf_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floattisf_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floattixf_test")
+        modules.add_module("usleeptest", [ "5" ])
+        return modules
+
+@tests.add_test
+class CompilerRTBuiltins3(CompilerRTBuiltinsAbstract):
+    '''runs compiler-rt3 builins unit tests'''
+    name = "compiler-rt3"
+
+    def get_modules(self, build, machine):
+        modules = super(CompilerRTBuiltins3, self).get_modules(build, machine)
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floatundidf_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floatundisf_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/floatunditf_test")
@@ -149,16 +161,6 @@ class CompilerRTBuiltins2(CompilerRTBuiltinsAbstract):
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/ltdf2vfp_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/ltsf2vfp_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/lttf2_test")
-        modules.add_module("usleeptest", [ "5" ])
-        return modules
-
-@tests.add_test
-class CompilerRTBuiltins3(CompilerRTBuiltinsAbstract):
-    '''runs compiler-rt3 builins unit tests'''
-    name = "compiler-rt3"
-
-    def get_modules(self, build, machine):
-        modules = super(CompilerRTBuiltins3, self).get_modules(build, machine)
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/moddi3_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/modsi3_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/modti3_test")
@@ -176,6 +178,16 @@ class CompilerRTBuiltins3(CompilerRTBuiltinsAbstract):
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/mulvdi3_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/mulvsi3_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/mulvti3_test")
+        modules.add_module("usleeptest", [ "5" ])
+        return modules
+
+@tests.add_test
+class CompilerRTBuiltins4(CompilerRTBuiltinsAbstract):
+    '''runs compiler-rt4 builins unit tests'''
+    name = "compiler-rt4"
+
+    def get_modules(self, build, machine):
+        modules = super(CompilerRTBuiltins4, self).get_modules(build, machine)
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/mulxc3_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/nedf2vfp_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/negdf2vfp_test")
@@ -210,6 +222,16 @@ class CompilerRTBuiltins3(CompilerRTBuiltinsAbstract):
 #        modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/truncsfhf2_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/trunctfdf2_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/trunctfsf2_test")
+        modules.add_module("usleeptest", [ "5" ])
+        return modules
+
+@tests.add_test
+class CompilerRTBuiltins5(CompilerRTBuiltinsAbstract):
+    '''runs compiler-rt5 builins unit tests'''
+    name = "compiler-rt5"
+
+    def get_modules(self, build, machine):
+        modules = super(CompilerRTBuiltins5, self).get_modules(build, machine)
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/ucmpdi2_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/ucmpti2_test")
         modules.add_module("$BUILD/compiler-rt/test/builtins/Unit/udivdi3_test")