Return Functest status to Jenkins
[functest.git] / functest / ci / run_tests.py
index 38abe40..d4acd9c 100644 (file)
@@ -124,16 +124,18 @@ class Runner(object):
                 self.executed_test_cases[test.get_name()] = test_case
                 if self.clean_flag:
                     if test_case.create_snapshot() != test_case.EX_OK:
-                        return result
+                        return testcase.TestCase.EX_RUN_ERROR
                 try:
                     kwargs = run_dict['args']
-                    result = test_case.run(**kwargs)
+                    test_case.run(**kwargs)
                 except KeyError:
-                    result = test_case.run()
-                if result == testcase.TestCase.EX_OK:
-                    if self.report_flag:
-                        test_case.push_to_db()
+                    test_case.run()
+                if self.report_flag:
+                    test_case.push_to_db()
+                if test.get_project() == "functest":
                     result = test_case.is_successful()
+                else:
+                    result = testcase.TestCase.EX_OK
                 logger.info("Test result:\n\n%s\n", test_case)
                 if self.clean_flag:
                     test_case.clean()
@@ -157,10 +159,12 @@ class Runner(object):
         else:
             logger.info("Running tier '%s'" % tier_name)
             for test in tests:
-                result = self.run_test(test)
-                if result != testcase.TestCase.EX_OK:
+                self.run_test(test)
+                test_case = self.executed_test_cases[test.get_name()]
+                if test_case.is_successful() != testcase.TestCase.EX_OK:
                     logger.error("The test case '%s' failed.", test.get_name())
-                    self.overall_result = Result.EX_ERROR
+                    if test.get_project() == "functest":
+                        self.overall_result = Result.EX_ERROR
                     if test.is_blocking():
                         raise BlockingTestFailed(
                             "The test case {} failed and is blocking".format(
@@ -188,12 +192,12 @@ class Runner(object):
             self.run_tier(tier)
 
     def main(self, **kwargs):
-        if kwargs['noclean']:
-            self.clean_flag = False
-        if kwargs['report']:
-            self.report_flag = True
+        if 'noclean' in kwargs:
+            self.clean_flag = not kwargs['noclean']
+        if 'report' in kwargs:
+            self.report_flag = kwargs['report']
         try:
-            if kwargs['test']:
+            if 'test' in kwargs:
                 self.source_rc_file()
                 logger.debug("Test args: %s", kwargs['test'])
                 if self._tiers.get_tier(kwargs['test']):
@@ -243,12 +247,18 @@ class Runner(object):
         tiers = [tier] if tier else self._tiers.get_tiers()
         for tier in tiers:
             for test in tier.get_tests():
-                test_case = self.executed_test_cases[test.get_name()]
-                result = 'PASS' if(test_case.is_successful(
-                    ) == test_case.EX_OK) else 'FAIL'
-                msg.add_row([test_case.case_name, test_case.project_name,
-                             self._tiers.get_tier_name(test_case.case_name),
-                             test_case.get_duration(), result])
+                try:
+                    test_case = self.executed_test_cases[test.get_name()]
+                except KeyError:
+                    msg.add_row([test.get_name(), test.get_project(),
+                                 tier.get_name(), "00:00", "SKIP"])
+                else:
+                    result = 'PASS' if(test_case.is_successful(
+                        ) == test_case.EX_OK) else 'FAIL'
+                    msg.add_row(
+                        [test_case.case_name, test_case.project_name,
+                         self._tiers.get_tier_name(test_case.case_name),
+                         test_case.get_duration(), result])
             for test in tier.get_skipped_test():
                 msg.add_row([test.get_name(), test.get_project(),
                              tier.get_name(), "00:00", "SKIP"])
@@ -258,6 +268,7 @@ class Runner(object):
 def main():
     logging.config.fileConfig(pkg_resources.resource_filename(
         'functest', 'ci/logging.ini'))
+    logging.captureWarnings(True)
     parser = RunTestsParser()
     args = parser.parse_args(sys.argv[1:])
     runner = Runner()