summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/core/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/lib/oeqa/core/runner.py')
-rw-r--r--meta/lib/oeqa/core/runner.py35
1 files changed, 34 insertions, 1 deletions
diff --git a/meta/lib/oeqa/core/runner.py b/meta/lib/oeqa/core/runner.py
index a7b7463388..7e0b61b587 100644
--- a/meta/lib/oeqa/core/runner.py
+++ b/meta/lib/oeqa/core/runner.py
@@ -6,6 +6,7 @@ import time
6import unittest 6import unittest
7import logging 7import logging
8import re 8import re
9import json
9 10
10from unittest import TextTestResult as _TestResult 11from unittest import TextTestResult as _TestResult
11from unittest import TextTestRunner as _TestRunner 12from unittest import TextTestRunner as _TestRunner
@@ -104,8 +105,9 @@ class OETestResult(_TestResult):
104 self.successes.append((test, None)) 105 self.successes.append((test, None))
105 super(OETestResult, self).addSuccess(test) 106 super(OETestResult, self).addSuccess(test)
106 107
107 def logDetails(self): 108 def logDetails(self, json_file_dir=None, configuration=None, result_id=None):
108 self.tc.logger.info("RESULTS:") 109 self.tc.logger.info("RESULTS:")
110 result = {}
109 for case_name in self.tc._registry['cases']: 111 for case_name in self.tc._registry['cases']:
110 case = self.tc._registry['cases'][case_name] 112 case = self.tc._registry['cases'][case_name]
111 113
@@ -118,6 +120,11 @@ class OETestResult(_TestResult):
118 oeid = d.oeid 120 oeid = d.oeid
119 121
120 self.tc.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(), oeid, status)) 122 self.tc.logger.info("RESULTS - %s - Testcase %s: %s" % (case.id(), oeid, status))
123 result[case.id()] = {'status': status, 'log': log}
124
125 if json_file_dir:
126 tresultjsonhelper = OETestResultJSONHelper()
127 tresultjsonhelper.dump_testresult_file(json_file_dir, configuration, result_id, result)
121 128
122class OEListTestsResult(object): 129class OEListTestsResult(object):
123 def wasSuccessful(self): 130 def wasSuccessful(self):
@@ -230,3 +237,29 @@ class OETestRunner(_TestRunner):
230 self._list_tests_module(suite) 237 self._list_tests_module(suite)
231 238
232 return OEListTestsResult() 239 return OEListTestsResult()
240
241class OETestResultJSONHelper(object):
242
243 testresult_filename = 'testresults.json'
244
245 def _get_existing_testresults_if_available(self, write_dir):
246 testresults = {}
247 file = os.path.join(write_dir, self.testresult_filename)
248 if os.path.exists(file):
249 with open(file, "r") as f:
250 testresults = json.load(f)
251 return testresults
252
253 def _write_file(self, write_dir, file_name, file_content):
254 file_path = os.path.join(write_dir, file_name)
255 with open(file_path, 'w') as the_file:
256 the_file.write(file_content)
257
258 def dump_testresult_file(self, write_dir, configuration, result_id, test_result):
259 bb.utils.mkdirhier(write_dir)
260 lf = bb.utils.lockfile(os.path.join(write_dir, 'jsontestresult.lock'))
261 test_results = self._get_existing_testresults_if_available(write_dir)
262 test_results[result_id] = {'configuration': configuration, 'result': test_result}
263 json_testresults = json.dumps(test_results, sort_keys=True, indent=4)
264 self._write_file(write_dir, self.testresult_filename, json_testresults)
265 bb.utils.unlockfile(lf)