feat(zigbee): Save network channel after 1st joining for faster rejoi… #18
9 errors, 34 pass in 10m 59s
76 files 76 suites 10m 59s ⏱️
43 tests 34 ✅ 0 💤 0 ❌ 9 🔥
213 runs 200 ✅ 0 💤 0 ❌ 13 🔥
Results for commit e2915c4.
Annotations
Check failure on line 0 in validation.wifi.test_wifi
github-actions / Test Results
3 out of 9 runs with error: test_wifi (validation.wifi.test_wifi)
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi0.xml [took 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi1.xml [took 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi2.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 0x7f6330b25a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f6330b5ee80>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f6330b25be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f6330b257f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f6330b25a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-14-246468/test_wifi', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f6330b24830>}
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.3/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-esp32s3-validation/validation/i2c_master/esp32s3/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 0x7fe0ce941a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fe0ce97afc0>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7fe0ce941be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7fe0ce9417f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/i2c_master/diagram.esp32s3.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7fe0ce941a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-08-481013/test_i2c_master', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7fe0ce940830>}
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.3/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-esp32s3-validation/validation/gpio/esp32s3/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 0x7f49074a5a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f49074defc0>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f49074a5be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f49074a57f0>
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.esp32s3.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f49074a5a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-07-050929/test_gpio', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f49074a4830>}
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.3/x64/lib/python3.13/site-packages/pytest_embedded_wokwi/wokwi_cli.py:61: RuntimeError
Check failure on line 0 in validation.nvs.test_nvs
github-actions / Test Results
3 out of 21 runs with error: test_nvs (validation.nvs.test_nvs)
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs0.xml [took 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs1.xml [took 0s]
./artifacts/tests-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs2.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 0x7f7ea3691a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f7ea36cade0>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f7ea3691be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f7ea36917f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f7ea3691a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-09-200773/test_nvs', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f7ea3690830>}
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.3/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-esp32s3-validation/validation/hello_world/esp32s3/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 0x7f0d9de99a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f0d9ded2fc0>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f0d9de99be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f0d9de997f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f0d9de99a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-07-762108/test_hello_world', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f0d9de98830>}
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.3/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-esp32s3-validation/validation/psram/esp32s3/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 0x7fd7fc6a5a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fd7fc6dae80>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7fd7fc6a5be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7fd7fc6a57f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = '/home/runner/work/arduino-esp32/arduino-esp32/tests/validation/psram/diagram.esp32s3.json'
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7fd7fc6a5a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-11-340803/test_psram', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7fd7fc6a4830>}
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.3/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-esp32s3-validation/validation/unity/esp32s3/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 0x7f1e15631a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f1e1566ae80>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f1e15631be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f1e156317f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f1e15631a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-13-521277/test_unity', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f1e15630830>}
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.3/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-esp32s3-validation/validation/uart/esp32s3/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 0x7f6cc9019a90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f6cc9052e80>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f6cc9019be0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f6cc90197f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f6cc9019a90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-12-803090/test_uart', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f6cc9018830>}
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.3/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-esp32s3-validation/validation/timer/esp32s3/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 0x7f5ad528da90>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f5ad52c6e80>
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.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.13.3/x64/lib/python3.13/site-packages/pytest_embedded/plugin.py:1148: in wokwi
return wokwi_gn(**locals())
/opt/hostedtoolcache/Python/3.13.3/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 0x7f5ad528dbe0>
firmware_resolver = <pytest_embedded_wokwi.arduino.ArduinoFirmwareResolver object at 0x7f5ad528d7f0>
wokwi_cli_path = None, wokwi_timeout = 600000, wokwi_scenario = None
wokwi_diagram = None
app = <pytest_embedded_arduino.app.ArduinoApp object at 0x7f5ad528da90>
kwargs = {'meta': Meta(logdir='/tmp/pytest-embedded/2025-05-18_03-29-12-055664/test_timer', port_target_cache={}, port_app_cache={}, logfile_extension='.log'), 'msg_queue': <pytest_embedded.log.MessageQueue object at 0x7f5ad528c830>}
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.3/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
43 tests found
There are 43 tests, see "Raw output" for the full list of tests.
Raw output
auto_baudrate_test
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