fix(zigbee): Replace assert with error log to solve immediate crash #12368
9 errors, 33 pass in 10m 34s
76 files 76 suites 10m 34s ⏱️
42 tests 33 ✅ 0 💤 0 ❌ 9 🔥
213 runs 202 ✅ 0 💤 0 ❌ 11 🔥
Results for commit a29b006.
Annotations
Check failure on line 0 in validation.nvs.test_nvs
github-actions / Test Results
2 out of 21 runs with error: test_nvs (validation.nvs.test_nvs)
./artifacts/tests-results-wokwi-esp32-validation/validation/nvs/esp32/nvs0.xml [took 0s]
./artifacts/tests-results-wokwi-esp32-validation/validation/nvs/esp32/nvs1.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7f5782557380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f57825c2340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7f57825574d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f57825570e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f5782557380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-38-342368/test_nvs', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f5782556120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.hello_world.test_hello_world
github-actions / Test Results
1 out of 7 runs with error: test_hello_world (validation.hello_world.test_hello_world)
./artifacts/tests-results-wokwi-esp32-validation/validation/hello_world/esp32/hello_world.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7fd943b17380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fd943b8a480>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7fd943b174d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7fd943b170e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7fd943b17380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-36-602146/test_hello_world', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7fd943b16120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.gpio.test_gpio
github-actions / Test Results
1 out of 7 runs with error: test_gpio (validation.gpio.test_gpio)
./artifacts/tests-results-wokwi-esp32-validation/validation/gpio/esp32/gpio.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7eff878ff380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7eff8796e480>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7eff878ff4d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7eff878ff0e0>
wokwi_cli_path = None, wokwi_timeout = 600000
wokwi_scenario = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/gpio/scenario.yaml'
wokwi_diagram = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/gpio/diagram.esp32.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7eff878ff380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-35-832004/test_gpio', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7eff878fe120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.wifi.test_wifi
github-actions / Test Results
2 out of 9 runs with error: test_wifi (validation.wifi.test_wifi)
./artifacts/tests-results-wokwi-esp32-validation/validation/wifi/esp32/wifi0.xml [took 0s]
./artifacts/tests-results-wokwi-esp32-validation/validation/wifi/esp32/wifi1.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7f35f7b27380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f35f7b9a340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7f35f7b274d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f35f7b270e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f35f7b27380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-43-044749/test_wifi', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f35f7b26120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.i2c_master.test_i2c_master
github-actions / Test Results
test_i2c_master (validation.i2c_master.test_i2c_master) with error
./artifacts/tests-results-wokwi-esp32-validation/validation/i2c_master/esp32/i2c_master.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7f1a06ceb380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f1a06d5e480>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7f1a06ceb4d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f1a06ceb0e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/i2c_master/diagram.esp32.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f1a06ceb380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-37-493049/test_i2c_master', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f1a06cea120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.uart.test_uart
github-actions / Test Results
test_uart (validation.uart.test_uart) with error
./artifacts/tests-results-wokwi-esp32-validation/validation/uart/esp32/uart.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7f329124f380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f32912be340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7f329124f4d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f329124f0e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/uart/diagram.esp32.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f329124f380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-41-478639/test_uart', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f329124e120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.psram.test_psram
github-actions / Test Results
test_psram (validation.psram.test_psram) with error
./artifacts/tests-results-wokwi-esp32-validation/validation/psram/esp32/psram.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7fca10767380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fca107d6340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7fca107674d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7fca107670e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7fca10767380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-39-907530/test_psram', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7fca10766120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.unity.test_unity
github-actions / Test Results
test_unity (validation.unity.test_unity) with error
./artifacts/tests-results-wokwi-esp32-validation/validation/unity/esp32/unity.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7ff989b57380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7ff989bc6340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7ff989b574d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7ff989b570e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7ff989b57380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-42-256994/test_unity', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7ff989b56120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.timer.test_timer
github-actions / Test Results
test_timer (validation.timer.test_timer) with error
./artifacts/tests-results-wokwi-esp32-validation/validation/timer/esp32/timer.xml [took 0s]
Raw output
failed on setup with "RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh"
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'wo...logfile_extension='.log'), 'wokwi': None}})), 'app': <pytest_embedded_arduino.app.ArduinoApp object at 0x7f0207d57380>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f0207dc6340>
res = None
@functools.wraps(func)
def wrapper(*args, **kwargs):
def _close_or_terminate(obj):
if obj is None:
del obj
return
try:
if isinstance(obj, (subprocess.Popen, multiprocessing.process.BaseProcess)):
obj.terminate()
obj.kill()
elif isinstance(obj, io.IOBase):
try:
obj.close()
except Exception as e:
logging.debug('file %s closed failed with error: %s', obj, str(e))
else:
try:
obj.close()
except AttributeError:
try:
obj.terminate()
except AttributeError:
pass
except Exception as e:
logging.debug('Not properly caught object %s: %s', obj, str(e))
except Exception as e:
logging.debug('%s: %s', obj, str(e))
return # swallow up all error
finally:
referrers = gc.get_referrers(obj)
for _referrer in referrers:
if isinstance(_referrer, list):
for _i, val in enumerate(_referrer):
if val is obj:
_referrer[_i] = None
elif isinstance(_referrer, dict):
for key, value in _referrer.items():
if value is obj:
_referrer[key] = None
del obj
if _COUNT == 1:
res = None
try:
> res = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded/dut_factory.py:510: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <[AttributeError("'WokwiCLI' object has no attribute 'returncode'") raised in repr()] WokwiCLI object at 0x7f0207d574d0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f0207d570e0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f0207d57380>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-07-19_17-16-40-684116/test_timer', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f0207d56120>}
def __init__(
self,
firmware_resolver: IDFFirmwareResolver,
wokwi_cli_path: t.Optional[str] = None,
wokwi_timeout: t.Optional[int] = None,
wokwi_scenario: t.Optional[str] = None,
wokwi_diagram: t.Optional[str] = None,
app: t.Optional['IdfApp'] = None,
**kwargs,
):
"""
Args:
wokwi_cli_path: Wokwi CLI arguments
"""
self.app = app
self.firmware_resolver = firmware_resolver
# first need to check if wokwi-cli exists in PATH
if shutil.which('wokwi-cli') is None:
> raise RuntimeError('Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh')
E RuntimeError: Please install wokwi-cli, by running: curl -L https://wokwi.com/ci/install.sh | sh
/opt/hostedtoolcache/Python/3.13.5/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check notice on line 0 in .github
github-actions / Test Results
42 tests found
There are 42 tests, see "Raw output" for the full list of tests.
Raw output
basic_transmission_test
begin_when_running_test
change_baudrate_test
change_clock
change_cpu_frequency_test
change_pins_test
disabled_uart_calls_test
enabled_uart_calls_test
end_when_stopped_test
periman_test
psram_found
resize_buffers_test
rtc_run_clock
rtc_set_time
scan_bus
scan_bus_with_wifi
swap_pins
test_api
test_calloc_success
test_fail
test_malloc_fail
test_malloc_success
test_memcpy
test_memset_all_ones
test_memset_all_zeroes
test_memset_alternating
test_memset_random
test_pass
test_realloc_success
timer_clock_select_test
timer_divider_test
timer_interrupt_test
timer_read_test
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