Bugfix: got an error on ci when rally tests failed 09/68609/2
authorxudan <xudan16@huawei.com>
Wed, 9 Oct 2019 06:50:05 +0000 (02:50 -0400)
committerxudan <xudan16@huawei.com>
Sat, 12 Oct 2019 07:39:57 +0000 (03:39 -0400)
see https://build.opnfv.org/ci/view/dovetail/job/dovetail-fuel-baremetal-proposed_tests-optional-hunter/10/console

Change-Id: I7c9b0426603c22a2ef5f4b15ca26fbc0768bd19f
Signed-off-by: xudan <xudan16@huawei.com>
dovetail/report.py
dovetail/tests/unit/test_report.py

index d40303e..9523d38 100644 (file)
@@ -319,29 +319,36 @@ class FunctestCrawler(Crawler):
         testcase.set_results(json_results)
         return json_results
 
-    @staticmethod
-    def get_details(data):
-        t_details = data['details']
-        details = {
-            'tests': t_details['tests_number'],
-            'failures': t_details['failures_number'],
-            'success': t_details['success'],
-            'errors': t_details['failures'],
-            'skipped': t_details['skipped']
-        }
-        return details
+    def get_details(self, data):
+        try:
+            t_details = data['details']
+            details = {
+                'tests': t_details['tests_number'],
+                'failures': t_details['failures_number'],
+                'success': t_details['success'],
+                'errors': t_details['failures'],
+                'skipped': t_details['skipped']
+            }
+            return details
+        except Exception as e:
+            self.logger.exception("Failed to get details, {}.".format(e))
+            return None
 
-    @staticmethod
-    def get_rally_details(data):
-        t_details = data['details'][0]['details']
-        details = {
-            'tests': len(t_details['success']) + len(t_details['failures']),
-            'failures': len(t_details['failures']),
-            'success': t_details['success'],
-            'errors': t_details['failures'],
-            'skipped': []
-        }
-        return details
+    def get_rally_details(self, data):
+        try:
+            t_details = data['details'][0]['details']
+            tests = len(t_details['success']) + len(t_details['failures'])
+            details = {
+                'tests': tests,
+                'failures': len(t_details['failures']),
+                'success': t_details['success'],
+                'errors': t_details['failures'],
+                'skipped': []
+            }
+            return details
+        except Exception as e:
+            self.logger.exception("Failed to get details, {}.".format(e))
+            return None
 
 
 class FunctestK8sCrawler(FunctestCrawler):
index fe6530c..69cde0d 100644 (file)
@@ -640,6 +640,28 @@ class ReportTesting(unittest.TestCase):
             'Result file not found: {}'.format(file_path))
         self.assertEqual(None, result)
 
+    def test_functest_crawler_get_details_exception(self):
+        logger_obj = Mock()
+        dt_report.FunctestCrawler.logger = logger_obj
+        data = None
+        crawler = dt_report.FunctestCrawler()
+
+        excepted = None
+        result = crawler.get_details(data)
+        logger_obj.exception.assert_called_once()
+        self.assertEqual(excepted, result)
+
+    def test_functest_crawler_get_rally_details_exception(self):
+        logger_obj = Mock()
+        dt_report.FunctestCrawler.logger = logger_obj
+        data = None
+        crawler = dt_report.FunctestCrawler()
+
+        excepted = None
+        result = crawler.get_rally_details(data)
+        logger_obj.exception.assert_called_once()
+        self.assertEqual(excepted, result)
+
     @patch('builtins.open')
     @patch('dovetail.report.json')
     @patch('dovetail.report.dt_cfg')