feat(gpio): allows mixing digital and analog read/write operations #4916
9 fail in 2h 7m 18s
76 files 76 suites 2h 7m 18s ⏱️
9 tests 0 ✅ 0 💤 9 ❌
76 runs 2 ✅ 0 💤 74 ❌
Results for commit 97d78bc.
Annotations
Check warning on line 0 in validation.timer.test_timer
github-actions / Test Results
All 7 runs failed: test_timer (validation.timer.test_timer)
./artifacts/tests-results-wokwi-esp32-validation/validation/timer/esp32/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/timer/esp32c3/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/timer/esp32c6/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/timer/esp32h2/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/timer/esp32p4/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/timer/esp32s2/timer.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/timer/esp32s3/timer.xml [took 4m 0s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x1... (total 576 bytes)
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-08-283975/test_timer/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f006d9adbe0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 576 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-08-283975/test_timer/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:131: in expect
return self.pexpect_proc.expect(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:354: in expect
return self.expect_list(compiled_pattern_list,
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:383: in expect_list
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f006d9adfd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f006d9ad160>\nsearcher: searcher_re:\n 0: re.compile(b'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)')")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f006d9ad160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
E <pytest_embedded.log.PexpectProcess object at 0x7f006d9ad160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f006d9adbe0>
def test_timer(dut):
> dut.expect_unity_test_output(timeout=240)
tests/validation/timer/test_timer.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:180: in expect_unity_test_output
self.expect(UNITY_SUMMARY_LINE_REGEX, timeout=timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f006d9adbe0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 576 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-08-283975/test_timer/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
E Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x1... (total 576 bytes)
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-08-283975/test_timer/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.hello_world.test_hello_world
github-actions / Test Results
5 out of 7 runs failed: test_hello_world (validation.hello_world.test_hello_world)
./artifacts/tests-results-wokwi-esp32-validation/validation/hello_world/esp32/hello_world.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/hello_world/esp32h2/hello_world.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/hello_world/esp32p4/hello_world.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/hello_world/esp32s2/hello_world.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/hello_world/esp32s3/hello_world.xml [took 30s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "Hello Arduino!"
Bytes in current buffer (color code eliminated): .com/pricing.
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-02-37-018658/test_hello_world/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcf59e99be0>
pattern = 'Hello Arduino!', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Hello Arduino!'], res = []
debug_str = 'Not found "Hello Arduino!"\nBytes in current buffer (color code eliminated): .com/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-02-37-018658/test_hello_world/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:153: in expect_exact
return self.pexpect_proc.expect_exact(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:432: in expect_exact
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7fcf59e99fd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7fcf59e99160>\nsearcher: searcher_string:\n 0: b'Hello Arduino!'")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7fcf59e99160>
E searcher: searcher_string:
E 0: b'Hello Arduino!'
E <pytest_embedded.log.PexpectProcess object at 0x7fcf59e99160>
E searcher: searcher_string:
E 0: b'Hello Arduino!'
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcf59e99be0>
def test_hello_world(dut):
> dut.expect_exact("Hello Arduino!")
tests/validation/hello_world/test_hello_world.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcf59e99be0>
pattern = 'Hello Arduino!', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Hello Arduino!'], res = []
debug_str = 'Not found "Hello Arduino!"\nBytes in current buffer (color code eliminated): .com/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-02-37-018658/test_hello_world/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "Hello Arduino!"
E Bytes in current buffer (color code eliminated): .com/pricing.
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-02-37-018658/test_hello_world/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.gpio.test_gpio
github-actions / Test Results
All 7 runs failed: test_gpio (validation.gpio.test_gpio)
./artifacts/tests-results-wokwi-esp32-validation/validation/gpio/esp32/gpio.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/gpio/esp32c3/gpio.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/gpio/esp32c6/gpio.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/gpio/esp32h2/gpio.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/gpio/esp32p4/gpio.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/gpio/esp32s2/gpio.xml [took 31s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/gpio/esp32s3/gpio.xml [took 30s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "Button test"
Bytes in current buffer (color code eliminated): m/pricing.
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-01-23-178872/test_gpio/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fd204b21be0>
pattern = 'Button test', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Button test'], res = []
debug_str = 'Not found "Button test"\nBytes in current buffer (color code eliminated): m/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-01-23-178872/test_gpio/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:153: in expect_exact
return self.pexpect_proc.expect_exact(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:432: in expect_exact
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7fd204b22120>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7fd204b21160>\nsearcher: searcher_string:\n 0: b'Button test'")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7fd204b21160>
E searcher: searcher_string:
E 0: b'Button test'
E <pytest_embedded.log.PexpectProcess object at 0x7fd204b21160>
E searcher: searcher_string:
E 0: b'Button test'
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fd204b21be0>
def test_gpio(dut):
LOGGER = logging.getLogger(__name__)
> dut.expect_exact("Button test")
tests/validation/gpio/test_gpio.py:7:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fd204b21be0>
pattern = 'Button test', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Button test'], res = []
debug_str = 'Not found "Button test"\nBytes in current buffer (color code eliminated): m/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-01-23-178872/test_gpio/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "Button test"
E Bytes in current buffer (color code eliminated): m/pricing.
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-01-23-178872/test_gpio/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.wifi.test_wifi
github-actions / Test Results
All 9 runs failed: test_wifi (validation.wifi.test_wifi)
./artifacts/tests-results-wokwi-esp32-validation/validation/wifi/esp32/wifi0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32-validation/validation/wifi/esp32/wifi1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/wifi/esp32c3/wifi.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/wifi/esp32c6/wifi.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/wifi/esp32s2/wifi0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/wifi/esp32s2/wifi1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi2.xml [took 30s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "Scan start"
Bytes in current buffer (color code eliminated): /pricing.
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-38-32-725514/test_wifi/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5e97535be0>
pattern = 'Scan start', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Scan start'], res = []
debug_str = 'Not found "Scan start"\nBytes in current buffer (color code eliminated): /pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-38-32-725514/test_wifi/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:153: in expect_exact
return self.pexpect_proc.expect_exact(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:432: in expect_exact
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f5e97536120>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f5e97535160>\nsearcher: searcher_string:\n 0: b'Scan start'")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f5e97535160>
E searcher: searcher_string:
E 0: b'Scan start'
E <pytest_embedded.log.PexpectProcess object at 0x7f5e97535160>
E searcher: searcher_string:
E 0: b'Scan start'
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5e97535be0>
def test_wifi(dut):
LOGGER = logging.getLogger(__name__)
LOGGER.info("Starting WiFi Scan")
> dut.expect_exact("Scan start")
tests/validation/wifi/test_wifi.py:8:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5e97535be0>
pattern = 'Scan start', expect_all = False, not_matching = (), args = ()
kwargs = {}, patterns = ['Scan start'], res = []
debug_str = 'Not found "Scan start"\nBytes in current buffer (color code eliminated): /pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-38-32-725514/test_wifi/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "Scan start"
E Bytes in current buffer (color code eliminated): /pricing.
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-38-32-725514/test_wifi/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.nvs.test_nvs
github-actions / Test Results
All 21 runs failed: test_nvs (validation.nvs.test_nvs)
./artifacts/tests-results-wokwi-esp32-validation/validation/nvs/esp32/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32-validation/validation/nvs/esp32/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/nvs/esp32c3/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/nvs/esp32c3/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs2.xml [took 30s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs3.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs2.xml [took 30s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs3.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs2.xml [took 30s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs3.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/nvs/esp32s2/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/nvs/esp32s2/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs0.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs1.xml [took 30s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs2.xml [took 30s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "Current counter value: 0"
Bytes in current buffer (color code eliminated): ps://wokwi.com/pricing.
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-13-27-631475/test_nvs/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5312429be0>
pattern = 'Current counter value: 0', expect_all = False, not_matching = ()
args = (), kwargs = {}, patterns = ['Current counter value: 0'], res = []
debug_str = 'Not found "Current counter value: 0"\nBytes in current buffer (color code eliminated): ps://wokwi.com/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-13-27-631475/test_nvs/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:153: in expect_exact
return self.pexpect_proc.expect_exact(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:432: in expect_exact
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f531242a120>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f5312429160>\nsearcher: searcher_string:\n 0: b'Current counter value: 0'")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f5312429160>
E searcher: searcher_string:
E 0: b'Current counter value: 0'
E <pytest_embedded.log.PexpectProcess object at 0x7f5312429160>
E searcher: searcher_string:
E 0: b'Current counter value: 0'
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5312429be0>
def test_nvs(dut):
LOGGER = logging.getLogger(__name__)
LOGGER.info("Expecting counter value 0")
> dut.expect_exact("Current counter value: 0")
tests/validation/nvs/test_nvs.py:8:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f5312429be0>
pattern = 'Current counter value: 0', expect_all = False, not_matching = ()
args = (), kwargs = {}, patterns = ['Current counter value: 0'], res = []
debug_str = 'Not found "Current counter value: 0"\nBytes in current buffer (color code eliminated): ps://wokwi.com/pricing.\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-13-27-631475/test_nvs/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "Current counter value: 0"
E Bytes in current buffer (color code eliminated): ps://wokwi.com/pricing.
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-13-27-631475/test_nvs/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.unity.test_unity
github-actions / Test Results
All 7 runs failed: test_unity (validation.unity.test_unity)
./artifacts/tests-results-wokwi-esp32-validation/validation/unity/esp32/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/unity/esp32c3/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/unity/esp32c6/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/unity/esp32h2/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/unity/esp32p4/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/unity/esp32s2/unity.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/unity/esp32s3/unity.xml [took 4m 0s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32p4-eco1-20240205 Build:Feb 5 2024 rst:0x1... (total 465 bytes)
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-35-04-531295/test_unity/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f1825c69be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 465 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-35-04-531295/test_unity/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:131: in expect
return self.pexpect_proc.expect(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:354: in expect
return self.expect_list(compiled_pattern_list,
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:383: in expect_list
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f1825c69fd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f1825c69160>\nsearcher: searcher_re:\n 0: re.compile(b'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)')")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f1825c69160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
E <pytest_embedded.log.PexpectProcess object at 0x7f1825c69160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f1825c69be0>
def test_unity(dut):
> dut.expect_unity_test_output(timeout=240)
tests/validation/unity/test_unity.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:180: in expect_unity_test_output
self.expect(UNITY_SUMMARY_LINE_REGEX, timeout=timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f1825c69be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 465 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-35-04-531295/test_unity/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
E Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32p4-eco1-20240205 Build:Feb 5 2024 rst:0x1... (total 465 bytes)
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-35-04-531295/test_unity/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.i2c_master.test_i2c_master
github-actions / Test Results
All 7 runs failed: test_i2c_master (validation.i2c_master.test_i2c_master)
./artifacts/tests-results-wokwi-esp32-validation/validation/i2c_master/esp32/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/i2c_master/esp32c3/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/i2c_master/esp32c6/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/i2c_master/esp32h2/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/i2c_master/esp32p4/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/i2c_master/esp32s2/i2c_master.xml [took 4m 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/i2c_master/esp32s3/i2c_master.xml [took 4m 0s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x1... (total 472 bytes)
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-06-05-514010/test_i2c_master/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcc55031be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re....al 472 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-06-05-514010/test_i2c_master/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:131: in expect
return self.pexpect_proc.expect(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:354: in expect
return self.expect_list(compiled_pattern_list,
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:383: in expect_list
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7fcc55031fd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7fcc55031160>\nsearcher: searcher_re:\n 0: re.compile(b'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)')")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7fcc55031160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
E <pytest_embedded.log.PexpectProcess object at 0x7fcc55031160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcc55031be0>
def test_i2c_master(dut):
> dut.expect_unity_test_output(timeout=240)
tests/validation/i2c_master/test_i2c_master.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:180: in expect_unity_test_output
self.expect(UNITY_SUMMARY_LINE_REGEX, timeout=timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7fcc55031be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 240}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re....al 472 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-06-05-514010/test_i2c_master/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
E Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32c3-api1-20210207 Build:Feb 7 2021 rst:0x1... (total 472 bytes)
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-06-05-514010/test_i2c_master/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.uart.test_uart
github-actions / Test Results
All 7 runs failed: test_uart (validation.uart.test_uart)
./artifacts/tests-results-wokwi-esp32-validation/validation/uart/esp32/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32c3-validation/validation/uart/esp32c3/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32c6-validation/validation/uart/esp32c6/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32h2-validation/validation/uart/esp32h2/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/uart/esp32p4/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/uart/esp32s2/uart.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/uart/esp32s3/uart.xml [took 2m 0s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32s2-rc4-20191025 Build:Oct 25 2019 rst:0x1... (total 514 bytes)
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-27-13-102201/test_uart/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f9efa06dbe0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 120}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re..... (total 514 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-27-13-102201/test_uart/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:131: in expect
return self.pexpect_proc.expect(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:354: in expect
return self.expect_list(compiled_pattern_list,
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:383: in expect_list
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f9efa06dfd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f9efa06d160>\nsearcher: searcher_re:\n 0: re.compile(b'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)')")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f9efa06d160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
E <pytest_embedded.log.PexpectProcess object at 0x7f9efa06d160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f9efa06dbe0>
def test_uart(dut):
> dut.expect_unity_test_output(timeout=120)
tests/validation/uart/test_uart.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:180: in expect_unity_test_output
self.expect(UNITY_SUMMARY_LINE_REGEX, timeout=timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f9efa06dbe0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 120}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re..... (total 514 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-27-13-102201/test_uart/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
E Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... ESP-ROM:esp32s2-rc4-20191025 Build:Oct 25 2019 rst:0x1... (total 514 bytes)
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-27-13-102201/test_uart/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check warning on line 0 in validation.psram.test_psram
github-actions / Test Results
All 4 runs failed: test_psram (validation.psram.test_psram)
./artifacts/tests-results-wokwi-esp32-validation/validation/psram/esp32/psram.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32p4-validation/validation/psram/esp32p4/psram.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32s2-validation/validation/psram/esp32s2/psram.xml [took 2m 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/psram/esp32s3/psram.xml [took 2m 0s]
Raw output
pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... API Error: You have used up your Free plan monthly CI minute... (total 243 bytes)
Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-02-204533/test_psram/dut.log
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f14f3699be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 120}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 243 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-02-204533/test_psram/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
> index = func(self, pattern, *args, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:76:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:131: in expect
return self.pexpect_proc.expect(pattern, **kwargs)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:354: in expect
return self.expect_list(compiled_pattern_list,
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/spawnbase.py:383: in expect_list
return exp.expect_loop(timeout)
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:181: in expect_loop
return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pexpect.expect.Expecter object at 0x7f14f3699fd0>
err = TIMEOUT("<pytest_embedded.log.PexpectProcess object at 0x7f14f3699160>\nsearcher: searcher_re:\n 0: re.compile(b'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)')")
def timeout(self, err=None):
spawn = self.spawn
spawn.before = spawn._before.getvalue()
spawn.after = TIMEOUT
index = self.searcher.timeout_index
if index >= 0:
spawn.match = TIMEOUT
spawn.match_index = index
return index
else:
spawn.match = None
spawn.match_index = None
msg = str(spawn)
msg += '\nsearcher: %s' % self.searcher
if err is not None:
msg = str(err) + '\n' + msg
exc = TIMEOUT(msg)
exc.__cause__ = None # in Python 3.x we can use "raise exc from None"
> raise exc
E pexpect.exceptions.TIMEOUT: <pytest_embedded.log.PexpectProcess object at 0x7f14f3699160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
E <pytest_embedded.log.PexpectProcess object at 0x7f14f3699160>
E searcher: searcher_re:
E 0: re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)')
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pexpect/expect.py:144: TIMEOUT
The above exception was the direct cause of the following exception:
dut = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f14f3699be0>
def test_psram(dut):
> dut.expect_unity_test_output(timeout=120)
tests/validation/psram/test_psram.py:2:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:180: in expect_unity_test_output
self.expect(UNITY_SUMMARY_LINE_REGEX, timeout=timeout)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <pytest_embedded_wokwi.dut.WokwiDut object at 0x7f14f3699be0>
pattern = re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)
expect_all = False, not_matching = (), args = (), kwargs = {'timeout': 120}
patterns = [re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)]
res = []
debug_str = 'Not found "re.compile(b\'^[-]+\\\\s*(\\\\d+) Tests (\\\\d+) Failures (\\\\d+) Ignored\\\\s*(?P<result>OK|FAIL)\', re.... (total 243 bytes)\nPlease check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-02-204533/test_psram/dut.log'
@functools.wraps(func)
def wrapper(
self, pattern, *args, expect_all: bool = False, not_matching: List[Union[str, re.Pattern]] = (), **kwargs
) -> Union[Union[Match, AnyStr], List[Union[Match, AnyStr]]]:
patterns = to_list(pattern)
res = []
while patterns:
try:
index = func(self, pattern, *args, **kwargs)
except (pexpect.EOF, pexpect.TIMEOUT) as e:
debug_str = (
f'Not found "{pattern!s}"\n'
f'Bytes in current buffer (color code eliminated): {self.pexpect_proc.buffer_debug_str}\n'
f'Please check the full log here: {self.logfile}'
)
> raise e.__class__(debug_str) from e
E pexpect.exceptions.TIMEOUT: Not found "re.compile(b'^[-]+\\s*(\\d+) Tests (\\d+) Failures (\\d+) Ignored\\s*(?P<result>OK|FAIL)', re.MULTILINE)"
E Bytes in current buffer (color code eliminated): Wokwi CLI v0.15.3 (d85c2346ef21) Connected to Wokwi Simulation API 1.0.0-20250222-g0273d6d1 Starting simulation... API Error: You have used up your Free plan monthly CI minute... (total 243 bytes)
E Please check the full log here: /tmp/pytest-embedded/2025-02-27_15-16-02-204533/test_psram/dut.log
/opt/hostedtoolcache/Python/3.13.2/x64/lib/python3.13/site-packages/pytest_embedded/dut.py:83: TIMEOUT
Check notice on line 0 in .github
github-actions / Test Results
9 tests found
There are 9 tests, see "Raw output" for the full list of tests.
Raw output
validation.gpio.test_gpio ‑ test_gpio
validation.hello_world.test_hello_world ‑ test_hello_world
validation.i2c_master.test_i2c_master ‑ test_i2c_master
validation.nvs.test_nvs ‑ test_nvs
validation.psram.test_psram ‑ test_psram
validation.timer.test_timer ‑ test_timer
validation.uart.test_uart ‑ test_uart
validation.unity.test_unity ‑ test_unity
validation.wifi.test_wifi ‑ test_wifi