fix(ci): Fix tests and workflows #12024
18 errors, 32 pass in 23m 9s
152 files 152 suites 23m 9s ⏱️
50 tests 32 ✅ 0 💤 0 ❌ 18 🔥
270 runs 175 ✅ 0 💤 0 ❌ 95 🔥
Results for commit 35cae5e.
Annotations
Check failure on line 3 in validation/nvs/test_nvs.py
github-actions / Test Results
21 out of 37 runs with error: test_nvs (validation.nvs.test_nvs)
./artifacts/test-results-wokwi-esp32-validation/validation/nvs/esp32/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32-validation/validation/nvs/esp32/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/nvs/esp32c3/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/nvs/esp32c3/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs2.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/nvs/esp32c6/nvs3.xml [took 2s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs2.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/nvs/esp32h2/nvs3.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs2.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/nvs/esp32p4/nvs3.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/nvs/esp32s2/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/nvs/esp32s2/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs0.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs1.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/nvs/esp32s3/nvs2.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7ff3e1588c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7ff3e158d010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:96: in _setup_simulation
firmware = self.client.upload_file('pytest.bin', firmware_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7ff3e15897f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.timer
github-actions / Test Results
All 2 runs with error: missing-run (validation.timer)
./test_errors/test-results-hardware/tests/validation/timer/esp32p4/timer_missing_0.xml
./test_errors/test-results-hardware/tests/validation/timer/esp32s2/timer_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation/i2c_master/test_i2c_master.py
github-actions / Test Results
All 7 runs with error: test_i2c_master (validation.i2c_master.test_i2c_master)
./artifacts/test-results-wokwi-esp32-validation/validation/i2c_master/esp32/i2c_master.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/i2c_master/esp32c3/i2c_master.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/i2c_master/esp32c6/i2c_master.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/i2c_master/esp32h2/i2c_master.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/i2c_master/esp32p4/i2c_master.xml [took 2s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/i2c_master/esp32s2/i2c_master.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/i2c_master/esp32s3/i2c_master.xml [took 2s]
Raw output
failed on setup with "websockets.exceptions.ConnectionClosedError: received 1008 (policy violation) You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.; then sent 1008 (policy violation) You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f13e9174d70>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f13e9189010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:99: in request
await self._ws.send(
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/websockets/legacy/protocol.py:635: in send
await self.ensure_open()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <websockets.legacy.client.WebSocketClientProtocol object at 0x7f13e9177e00>
async def ensure_open(self) -> None:
"""
Check that the WebSocket connection is open.
Raise :exc:`~websockets.exceptions.ConnectionClosed` if it isn't.
"""
# Handle cases from most common to least common for performance.
if self.state is State.OPEN:
# If self.transfer_data_task exited without a closing handshake,
# self.close_connection_task may be closing the connection, going
# straight from OPEN to CLOSED.
if self.transfer_data_task.done():
await asyncio.shield(self.close_connection_task)
raise self.connection_closed_exc()
else:
return
if self.state is State.CLOSED:
raise self.connection_closed_exc()
if self.state is State.CLOSING:
# If we started the closing handshake, wait for its completion to
# get the proper close code and reason. self.close_connection_task
# will complete within 4 or 5 * close_timeout after close(). The
# CLOSING state also occurs when failing the connection. In that
# case self.close_connection_task will complete even faster.
await asyncio.shield(self.close_connection_task)
> raise self.connection_closed_exc()
E websockets.exceptions.ConnectionClosedError: received 1008 (policy violation) You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.; then sent 1008 (policy violation) You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/websockets/legacy/protocol.py:948: ConnectionClosedError
Check failure on line 0 in validation/hello_world/test_hello_world.py
github-actions / Test Results
7 out of 13 runs with error: test_hello_world (validation.hello_world.test_hello_world)
./artifacts/test-results-wokwi-esp32-validation/validation/hello_world/esp32/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/hello_world/esp32c3/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/hello_world/esp32c6/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/hello_world/esp32h2/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/hello_world/esp32p4/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/hello_world/esp32s2/hello_world.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/hello_world/esp32s3/hello_world.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f739cd74c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f739cd79010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f739cd757f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.nvs
github-actions / Test Results
All 6 runs with error: missing-run (validation.nvs)
./test_errors/test-results-hardware/tests/validation/nvs/esp32p4/nvs_missing_0.xml
./test_errors/test-results-hardware/tests/validation/nvs/esp32p4/nvs_missing_1.xml
./test_errors/test-results-hardware/tests/validation/nvs/esp32p4/nvs_missing_2.xml
./test_errors/test-results-hardware/tests/validation/nvs/esp32p4/nvs_missing_3.xml
./test_errors/test-results-hardware/tests/validation/nvs/esp32s2/nvs_missing_0.xml
./test_errors/test-results-hardware/tests/validation/nvs/esp32s2/nvs_missing_1.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 6 in validation/gpio/test_gpio.py
github-actions / Test Results
All 7 runs with error: test_gpio (validation.gpio.test_gpio)
./artifacts/test-results-wokwi-esp32-validation/validation/gpio/esp32/gpio.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/gpio/esp32c3/gpio.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/gpio/esp32c6/gpio.xml [took 0s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/gpio/esp32h2/gpio.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/gpio/esp32p4/gpio.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/gpio/esp32s2/gpio.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/gpio/esp32s3/gpio.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f3ed6c70d70>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f3ed6c80b40>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:103: in _setup_simulation
self.client.start_simulation(firmware, elf='pytest.elf')
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:157: in start_simulation
await start(
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/simulation.py:19: in start
return await transport.request(
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f3ed6c71940>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 4 in validation/wifi/test_wifi.py
github-actions / Test Results
All 9 runs with error: test_wifi (validation.wifi.test_wifi)
./artifacts/test-results-wokwi-esp32-validation/validation/wifi/esp32/wifi0.xml [took 1s]
./artifacts/test-results-wokwi-esp32-validation/validation/wifi/esp32/wifi1.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/wifi/esp32c3/wifi.xml [took 2s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/wifi/esp32c6/wifi.xml [took 2s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/wifi/esp32s2/wifi0.xml [took 2s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/wifi/esp32s2/wifi1.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi0.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi1.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/wifi/esp32s3/wifi2.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f0ad457cc20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f0ad4581010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f0ad457d7f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.democfg
github-actions / Test Results
missing-run (validation.democfg) with error
./test_errors/test-results-hardware/tests/validation/democfg/esp32s2/democfg_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation/timer/test_timer.py
github-actions / Test Results
All 7 runs with error: test_timer (validation.timer.test_timer)
./artifacts/test-results-wokwi-esp32-validation/validation/timer/esp32/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/timer/esp32c3/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/timer/esp32c6/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/timer/esp32h2/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/timer/esp32p4/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/timer/esp32s2/timer.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/timer/esp32s3/timer.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7ff8a1990c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7ff8a1995010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7ff8a19917f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.hello_world
github-actions / Test Results
All 2 runs with error: missing-run (validation.hello_world)
./test_errors/test-results-hardware/tests/validation/hello_world/esp32p4/hello_world_missing_0.xml
./test_errors/test-results-hardware/tests/validation/hello_world/esp32s2/hello_world_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation/psram/test_psram.py
github-actions / Test Results
All 4 runs with error: test_psram (validation.psram.test_psram)
./artifacts/test-results-wokwi-esp32-validation/validation/psram/esp32/psram.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/psram/esp32p4/psram.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/psram/esp32s2/psram.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/psram/esp32s3/psram.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f1a61a70c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f1a61a75010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:96: in _setup_simulation
firmware = self.client.upload_file('pytest.bin', firmware_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f1a61a717f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.touch
github-actions / Test Results
All 2 runs with error: missing-run (validation.touch)
./test_errors/test-results-hardware/tests/validation/touch/esp32p4/touch_missing_0.xml
./test_errors/test-results-hardware/tests/validation/touch/esp32s2/touch_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation.periman
github-actions / Test Results
missing-run (validation.periman) with error
./test_errors/test-results-hardware/tests/validation/periman/esp32s2/periman_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation/uart/test_uart.py
github-actions / Test Results
All 7 runs with error: test_uart (validation.uart.test_uart)
./artifacts/test-results-wokwi-esp32-validation/validation/uart/esp32/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/uart/esp32c3/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/uart/esp32c6/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/uart/esp32h2/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/uart/esp32p4/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/uart/esp32s2/uart.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/uart/esp32s3/uart.xml [took 1s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f423bb78c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f423bb7d010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f423bb797f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.uart
github-actions / Test Results
All 2 runs with error: missing-run (validation.uart)
./test_errors/test-results-hardware/tests/validation/uart/esp32p4/uart_missing_0.xml
./test_errors/test-results-hardware/tests/validation/uart/esp32s2/uart_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation/unity/test_unity.py
github-actions / Test Results
All 7 runs with error: test_unity (validation.unity.test_unity)
./artifacts/test-results-wokwi-esp32-validation/validation/unity/esp32/unity.xml [took 2s]
./artifacts/test-results-wokwi-esp32c3-validation/validation/unity/esp32c3/unity.xml [took 1s]
./artifacts/test-results-wokwi-esp32c6-validation/validation/unity/esp32c6/unity.xml [took 1s]
./artifacts/test-results-wokwi-esp32h2-validation/validation/unity/esp32h2/unity.xml [took 1s]
./artifacts/test-results-wokwi-esp32p4-validation/validation/unity/esp32p4/unity.xml [took 1s]
./artifacts/test-results-wokwi-esp32s2-validation/validation/unity/esp32s2/unity.xml [took 1s]
./artifacts/test-results-wokwi-esp32s3-validation/validation/unity/esp32s3/unity.xml [took 2s]
Raw output
failed on setup with "wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing."
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 0x7f2182c70c20>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f2182c75010>
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.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/plugin.py:1159: in wokwi
return wokwi_gn(**locals())
^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded/dut_factory.py:526: in wokwi_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:87: in __init__
raise e
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:83: in __init__
self._setup_simulation(wokwi_diagram, firmware_path, elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/pytest_embedded_wokwi/wokwi.py:98: in _setup_simulation
self.client.upload_file('pytest.elf', elf_path)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:212: in sync_wrapper
return self._call(attr(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client_sync.py:79: in _call
return future.result() # Block until the coroutine completes or raises
^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:450: in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/concurrent/futures/_base.py:395: in __get_result
raise self._exception
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/client.py:97: in upload_file
return await upload_file(self._transport, filename, local_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:25: in upload_file
await upload(transport, filename, content)
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/file_ops.py:31: in upload
return await transport.request("file:upload", params.model_dump())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:103: in request
resp_msg_resp = await future
^^^^^^^^^^^^
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:115: in _background_recv
msg: IncomingMessage = await self._recv()
^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <wokwi_client.transport.Transport object at 0x7f2182c717f0>
async def _recv(self) -> IncomingMessage:
if self._ws is None:
raise WokwiError("Not connected")
raw_message = await self._ws.recv()
while isinstance(raw_message, bytes):
warnings.warn("Unexpected binary message received and skipped", RuntimeWarning)
raw_message = await self._ws.recv()
try:
message = json.loads(raw_message)
except json.JSONDecodeError as e:
raise WokwiError(f"Failed to parse message: {raw_message}") from e
if "type" not in message:
raise WokwiError(f"Invalid message: {message}")
if message["type"] == "error":
> raise WokwiError(f"Server error: {message['message']}")
E wokwi_client.exceptions.WokwiError: Server error: You have used up your Free plan monthly CI minute quota. Please upgrade to a paid plan at https://wokwi.com/pricing.
/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/wokwi_client/transport.py:171: WokwiError
Check failure on line 0 in validation.unity
github-actions / Test Results
All 2 runs with error: missing-run (validation.unity)
./test_errors/test-results-hardware/tests/validation/unity/esp32p4/unity_missing_0.xml
./test_errors/test-results-hardware/tests/validation/unity/esp32s2/unity_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check failure on line 0 in validation.psram
github-actions / Test Results
missing-run (validation.psram) with error
./test_errors/test-results-hardware/tests/validation/psram/esp32p4/psram_missing_0.xml
Raw output
Expected test run missing
This placeholder indicates an expected test run did not execute.
Check notice on line 0 in .github
github-actions / Test Results
50 tests found
There are 50 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_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
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
test_touch_errors
test_touch_interrtupt
test_touch_read
timer_clock_select_test
timer_divider_test
timer_interrupt_test
timer_read_test
validation.democfg ‑ missing-run
validation.democfg.test_democfg ‑ test_cfg
validation.gpio.test_gpio ‑ test_gpio
validation.hello_world ‑ missing-run
validation.hello_world.test_hello_world ‑ test_hello_world
validation.i2c_master.test_i2c_master ‑ test_i2c_master
validation.nvs ‑ missing-run
validation.nvs.test_nvs ‑ test_nvs
validation.periman ‑ missing-run
validation.periman.test_periman ‑ test_periman
validation.psram ‑ missing-run
validation.psram.test_psram ‑ test_psram
validation.timer ‑ missing-run
validation.timer.test_timer ‑ test_timer
validation.touch ‑ missing-run
validation.uart ‑ missing-run
validation.uart.test_uart ‑ test_uart
validation.unity ‑ missing-run
validation.unity.test_unity ‑ test_unity
validation.wifi.test_wifi ‑ test_wifi