twister: Don't print full stack trace in `readlines_until` method
The readlines_until method is part of the testing framework
(pytest harness) and should not print a full stack trace
when the expected line isn't found. It should also raise
an AssertionError instead of a TwisterHarnessTimeoutException,
allowing users to know that a test failed because the expected
condition did not happen.
Signed-off-by: Lukasz Fundakowski <lukasz.fundakowski@nordicsemi.no>
diff --git a/scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py b/scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py
index 87ecac0..6544d33 100644
--- a/scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py
+++ b/scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py
@@ -170,6 +170,7 @@
If timeout is not provided, then use base_timeout.
"""
+ __tracebackhide__ = True # pylint: disable=unused-variable
timeout = timeout or self.base_timeout
if regex:
regex_compiled = re.compile(regex)
@@ -187,9 +188,12 @@
if num_of_lines and len(lines) == num_of_lines:
break
else:
- msg = 'Read from device timeout occurred'
+ if regex is not None:
+ msg = f'Did not find line "{regex}" within {timeout} seconds'
+ else:
+ msg = f'Did not find expected number of lines within {timeout} seconds'
logger.error(msg)
- raise TwisterHarnessTimeoutException(msg)
+ raise AssertionError(msg)
else:
lines = self.readlines(print_output)
return lines
diff --git a/scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py b/scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py
index 6103e2d..24b85b9 100755
--- a/scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py
+++ b/scripts/pylib/pytest-twister-harness/tests/device/binary_adapter_test.py
@@ -17,7 +17,7 @@
NativeSimulatorAdapter,
UnitSimulatorAdapter,
)
-from twister_harness.exceptions import TwisterHarnessException, TwisterHarnessTimeoutException
+from twister_harness.exceptions import TwisterHarnessException
from twister_harness.twister_harness_config import DeviceConfig
@@ -71,7 +71,7 @@
device.base_timeout = 0.3
device.command = ['python3', script_path, '--long-sleep', '--sleep=5']
device.launch()
- with pytest.raises(TwisterHarnessTimeoutException, match='Read from device timeout occurred'):
+ with pytest.raises(AssertionError, match='Did not find line "Returns with code" within 0.3 seconds'):
device.readlines_until(regex='Returns with code')
device.close()
assert device._process is None