Browse Source

tests/run-tests.py: Wait for soft reset if a target skips a test.

Commit 69c25ea865 made raising `SystemExit`
do a soft reset (on bare-metal targets).  This means that any test which is
skipped by a target (by raising `SystemExit`) will trigger a soft reset on
that target, and then it must execute its startup code, such as `boot.py`.

If the timing is right, this startup code can be unintentionally
interrupted by the test runner when preparing the next test, because the
test runner enters the raw REPL again via a Ctrl-C Ctrl-A ctrl-D sequence
(in `Pyboard.enter_raw_repl()`).

When this happens (`boot.py` is interrupted) the target may not be set up
correctly, and it may (in the case of stm32 boards) flash LEDs and take
extra time, slowing down the test run.

Fix this by explicitly waiting for the target to finish its soft reset when
it skips a test.

Signed-off-by: Damien George <damien@micropython.org>
pull/15990/head
Damien George 4 weeks ago
parent
commit
7746785035
  1. 6
      tests/run-tests.py

6
tests/run-tests.py

@ -824,6 +824,12 @@ def run_tests(pyb, tests, args, result_dir, num_threads=1):
output_mupy = run_micropython(pyb, args, test_file, test_file_abspath)
if output_mupy == b"SKIP\n":
if pyb is not None and hasattr(pyb, "read_until"):
# Running on a target over a serial connection, and the target requested
# to skip the test. It does this via a SystemExit which triggers a soft
# reset. Wait for the soft reset to finish, so we don't interrupt the
# start-up code (eg boot.py) when preparing to run the next test.
pyb.read_until(1, b"raw REPL; CTRL-B to exit\r\n")
print("skip ", test_file)
skipped_tests.append(test_name)
return

Loading…
Cancel
Save