twister: handlers: Pass harness reason to instance
Pass a test failure reason text from harness to the instance to convey more details on the failure. Signed-off-by: Dmitrii Golovanov <dmitrii.golovanov@intel.com>
This commit is contained in:
parent
ea3f105f82
commit
26e0aa268f
2 changed files with 27 additions and 24 deletions
|
@ -317,7 +317,7 @@ class BinaryHandler(Handler):
|
|||
|
||||
return env
|
||||
|
||||
def _update_instance_info(self, harness_status, handler_time):
|
||||
def _update_instance_info(self, harness, handler_time):
|
||||
self.instance.execution_time = handler_time
|
||||
if not self.terminated and self.returncode != 0:
|
||||
self.instance.status = TwisterStatus.FAIL
|
||||
|
@ -328,10 +328,10 @@ class BinaryHandler(Handler):
|
|||
# so in that case the return code itself is not meaningful
|
||||
self.instance.reason = f"Failed (rc={self.returncode})"
|
||||
self.instance.add_missing_case_status(TwisterStatus.BLOCK)
|
||||
elif harness_status != TwisterStatus.NONE:
|
||||
self.instance.status = harness_status
|
||||
if harness_status == TwisterStatus.FAIL:
|
||||
self.instance.reason = "Failed harness"
|
||||
elif harness.status != TwisterStatus.NONE:
|
||||
self.instance.status = harness.status
|
||||
if harness.status == TwisterStatus.FAIL:
|
||||
self.instance.reason = f"Failed harness:'{harness.reason}'"
|
||||
self.instance.add_missing_case_status(TwisterStatus.BLOCK)
|
||||
else:
|
||||
self.instance.status = TwisterStatus.FAIL
|
||||
|
@ -380,7 +380,7 @@ class BinaryHandler(Handler):
|
|||
if sys.stdout.isatty():
|
||||
subprocess.call(["stty", "sane"], stdin=sys.stdout)
|
||||
|
||||
self._update_instance_info(harness.status, handler_time)
|
||||
self._update_instance_info(harness, handler_time)
|
||||
|
||||
self._final_handle_actions(harness, handler_time)
|
||||
|
||||
|
@ -611,13 +611,13 @@ class DeviceHandler(Handler):
|
|||
|
||||
return command
|
||||
|
||||
def _update_instance_info(self, harness_status, handler_time, flash_error):
|
||||
def _update_instance_info(self, harness, handler_time, flash_error):
|
||||
self.instance.execution_time = handler_time
|
||||
if harness_status != TwisterStatus.NONE:
|
||||
self.instance.status = harness_status
|
||||
if harness_status == TwisterStatus.FAIL:
|
||||
self.instance.reason = "Failed"
|
||||
self.instance.add_missing_case_status(TwisterStatus.BLOCK, harness_status)
|
||||
if harness.status != TwisterStatus.NONE:
|
||||
self.instance.status = harness.status
|
||||
if harness.status == TwisterStatus.FAIL:
|
||||
self.instance.reason = f"Failed harness:'{harness.reason}'"
|
||||
self.instance.add_missing_case_status(TwisterStatus.BLOCK, harness.status)
|
||||
elif not flash_error:
|
||||
self.instance.status = TwisterStatus.FAIL
|
||||
self.instance.reason = "Timeout"
|
||||
|
@ -836,7 +836,7 @@ class DeviceHandler(Handler):
|
|||
|
||||
handler_time = time.time() - start_time
|
||||
|
||||
self._update_instance_info(harness.status, handler_time, flash_error)
|
||||
self._update_instance_info(harness, handler_time, flash_error)
|
||||
|
||||
self._final_handle_actions(harness, handler_time)
|
||||
|
||||
|
@ -1063,9 +1063,9 @@ class QEMUHandler(Handler):
|
|||
|
||||
return command
|
||||
|
||||
def _update_instance_info(self, harness_status, is_timeout):
|
||||
def _update_instance_info(self, harness, is_timeout):
|
||||
if (self.returncode != 0 and not self.ignore_qemu_crash) or \
|
||||
harness_status == TwisterStatus.NONE:
|
||||
harness.status == TwisterStatus.NONE:
|
||||
self.instance.status = TwisterStatus.FAIL
|
||||
if is_timeout:
|
||||
self.instance.reason = "Timeout"
|
||||
|
@ -1143,7 +1143,7 @@ class QEMUHandler(Handler):
|
|||
|
||||
logger.debug(f"return code from QEMU ({qemu_pid}): {self.returncode}")
|
||||
|
||||
self._update_instance_info(harness.status, is_timeout)
|
||||
self._update_instance_info(harness, is_timeout)
|
||||
|
||||
self._final_handle_actions(harness, 0)
|
||||
|
||||
|
@ -1244,9 +1244,9 @@ class QEMUWinHandler(Handler):
|
|||
|
||||
return command
|
||||
|
||||
def _update_instance_info(self, harness_status, is_timeout):
|
||||
def _update_instance_info(self, harness, is_timeout):
|
||||
if (self.returncode != 0 and not self.ignore_qemu_crash) or \
|
||||
harness_status == TwisterStatus.NONE:
|
||||
harness.status == TwisterStatus.NONE:
|
||||
self.instance.status = TwisterStatus.FAIL
|
||||
if is_timeout:
|
||||
self.instance.reason = "Timeout"
|
||||
|
@ -1428,7 +1428,7 @@ class QEMUWinHandler(Handler):
|
|||
os.close(self.pipe_handle)
|
||||
self.pipe_handle = None
|
||||
|
||||
self._update_instance_info(harness.status, is_timeout)
|
||||
self._update_instance_info(harness, is_timeout)
|
||||
|
||||
self._final_handle_actions(harness, 0)
|
||||
|
||||
|
|
|
@ -511,7 +511,7 @@ def test_binaryhandler_create_env(
|
|||
TESTDATA_6 = [
|
||||
(TwisterStatus.NONE, False, 2, True, TwisterStatus.FAIL, 'Valgrind error', False),
|
||||
(TwisterStatus.NONE, False, 1, False, TwisterStatus.FAIL, 'Failed (rc=1)', False),
|
||||
(TwisterStatus.FAIL, False, 0, False, TwisterStatus.FAIL, 'Failed harness', False),
|
||||
(TwisterStatus.FAIL, False, 0, False, TwisterStatus.FAIL, "Failed harness:'foobar'", False),
|
||||
('success', False, 0, False, 'success', 'Unknown', False),
|
||||
(TwisterStatus.NONE, True, 1, True, TwisterStatus.FAIL, 'Timeout', True),
|
||||
]
|
||||
|
@ -540,8 +540,9 @@ def test_binaryhandler_update_instance_info(
|
|||
handler.returncode = returncode
|
||||
missing_mock = mock.Mock()
|
||||
handler.instance.add_missing_case_status = missing_mock
|
||||
mocked_harness = mock.Mock(status=harness_status, reason="foobar")
|
||||
|
||||
handler._update_instance_info(harness_status, handler_time)
|
||||
handler._update_instance_info(mocked_harness, handler_time)
|
||||
|
||||
assert handler.instance.execution_time == handler_time
|
||||
|
||||
|
@ -1189,7 +1190,7 @@ def test_devicehandler_create_command(
|
|||
|
||||
TESTDATA_14 = [
|
||||
('success', False, 'success', 'Unknown', False),
|
||||
(TwisterStatus.FAIL, False, TwisterStatus.FAIL, 'Failed', True),
|
||||
(TwisterStatus.FAIL, False, TwisterStatus.FAIL, "Failed harness:'foobar'", True),
|
||||
(TwisterStatus.ERROR, False, TwisterStatus.ERROR, 'Unknown', True),
|
||||
(TwisterStatus.NONE, True, TwisterStatus.NONE, 'Unknown', False),
|
||||
(TwisterStatus.NONE, False, TwisterStatus.FAIL, 'Timeout', True),
|
||||
|
@ -1213,8 +1214,9 @@ def test_devicehandler_update_instance_info(
|
|||
handler_time = 59
|
||||
missing_mock = mock.Mock()
|
||||
handler.instance.add_missing_case_status = missing_mock
|
||||
mocked_harness = mock.Mock(status=harness_status, reason="foobar")
|
||||
|
||||
handler._update_instance_info(harness_status, handler_time, flash_error)
|
||||
handler._update_instance_info(mocked_harness, handler_time, flash_error)
|
||||
|
||||
assert handler.instance.execution_time == handler_time
|
||||
|
||||
|
@ -1716,12 +1718,13 @@ def test_qemuhandler_update_instance_info(
|
|||
):
|
||||
mocked_instance.add_missing_case_status = mock.Mock()
|
||||
mocked_instance.reason = self_instance_reason
|
||||
mocked_harness = mock.Mock(status=harness_status, reason="foobar")
|
||||
|
||||
handler = QEMUHandler(mocked_instance, 'build', mock.Mock())
|
||||
handler.returncode = self_returncode
|
||||
handler.ignore_qemu_crash = self_ignore_qemu_crash
|
||||
|
||||
handler._update_instance_info(harness_status, is_timeout)
|
||||
handler._update_instance_info(mocked_harness, is_timeout)
|
||||
|
||||
assert handler.instance.status == expected_status
|
||||
assert handler.instance.reason == expected_reason
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue