Merge branch 'ci/fixes' #757
11 errors, 43 pass in 1h 45m 59s
186 files 186 suites 1h 45m 59s ⏱️
54 tests 43 ✅ 0 💤 0 ❌ 11 🔥
454 runs 438 ✅ 0 💤 0 ❌ 16 🔥
Results for commit edd79b3.
Annotations
Check failure on line 0 in performance.linpack_double.test_linpack_double
github-actions / Test Results
1 out of 7 runs with error: test_linpack_double (performance.linpack_double.test_linpack_double)
./artifacts/test-results-hw/performance/linpack_double/esp32c6/linpack_double.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7f797cda0340, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f797cda02c0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7f797cda0340, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7f797cda0080>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7f797ced2ea0>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f797cd98a40>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f797cda02c0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in performance.coremark.test_coremark
github-actions / Test Results
1 out of 7 runs with error: test_coremark (performance.coremark.test_coremark)
./artifacts/test-results-hw/performance/coremark/esp32c6/coremark.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7fde26eac640, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7fde26eac6e0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7fde26eac640, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7fde26eac3e0>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7fde270393a0>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fde26eb49a0>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7fde26eac6e0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in performance.linpack_float.test_linpack_float
github-actions / Test Results
1 out of 7 runs with error: test_linpack_float (performance.linpack_float.test_linpack_float)
./artifacts/test-results-hw/performance/linpack_float/esp32c6/linpack_float.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7f2783e04b80, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f2783e04b60>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7f2783e04b80, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7f2783e04920>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7f278400d7c0>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f2783e08a40>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f2783e04b60>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in performance.ramspeed.test_ramspeed
github-actions / Test Results
1 out of 7 runs with error: test_ramspeed (performance.ramspeed.test_ramspeed)
./artifacts/test-results-hw/performance/ramspeed/esp32c6/ramspeed.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7f5223c44a30, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f522404e7b0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7f5223c44a30, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7f5223c447a0>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7f5223d7b4d0>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f5223c489a0>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f522404e7b0>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in performance.superpi.test_superpi
github-actions / Test Results
1 out of 7 runs with error: test_superpi (performance.superpi.test_superpi)
./artifacts/test-results-hw/performance/superpi/esp32c6/superpi.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7fd0bd0e8610, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7fd0bd0e8770>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7fd0bd0e8610, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7fd0bd0e8470>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7fd0bd1ba690>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7fd0bd0ec9a0>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7fd0bd0e8770>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in hardware.missing_runner
github-actions / Test Results
wifi2 (hardware.missing_runner) with error
./artifacts/test-results-hw/validation/wifi/esp32s3/wifi2.xml
Raw output
No available runner matches required tags: esp32s3 wifi_router (chip=esp32s3)
The hardware test could not be scheduled because no runner with the required tag combination is online/available.
Check failure on line 0 in performance.fibonacci.test_fibonacci
github-actions / Test Results
1 out of 7 runs with error: test_fibonacci (performance.fibonacci.test_fibonacci)
./artifacts/test-results-hw/performance/fibonacci/esp32c6/fibonacci.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')"
self = Serial<id=0x7f7030fc2710, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f7031034d10>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7f7030fc2710, open=False>(port='/dev/ttyUSB28', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7f7031034a10>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7f703110ade0>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7f7031038a40>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32c6.ESP32C6ROM object at 0x7f7031034d10>
port = '/dev/ttyUSB28', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB28, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB28: [Errno 6] No such device or address: '/dev/ttyUSB28')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in performance.psramspeed.test_psramspeed
github-actions / Test Results
1 out of 3 runs with error: test_psramspeed (performance.psramspeed.test_psramspeed)
./artifacts/test-results-hw/performance/psramspeed/esp32s2/psramspeed.xml [took 0s]
Raw output
failed on setup with "esptool.util.FatalError: Could not open /dev/ttyUSB0, the port is busy or doesn't exist.
([Errno 6] could not open port /dev/ttyUSB0: [Errno 6] No such device or address: '/dev/ttyUSB0')"
self = Serial<id=0x7ff8ef5cc580, open=False>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
> self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E OSError: [Errno 6] No such device or address: '/dev/ttyUSB0'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:322: OSError
During handling of the above exception, another exception occurred:
self = <esptool.targets.esp32s2.ESP32S2ROM object at 0x7ff8ef5cc680>
port = '/dev/ttyUSB0', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
> self._port.open()
/usr/local/lib/python3.12/site-packages/esptool/loader.py:363:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = Serial<id=0x7ff8ef5cc580, open=False>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
def open(self):
"""\
Open port with current settings. This may throw a SerialException
if the port cannot be opened."""
if self._port is None:
raise SerialException("Port must be configured before it can be used.")
if self.is_open:
raise SerialException("Port is already open.")
self.fd = None
# open
try:
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
except OSError as msg:
self.fd = None
> raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
E serial.serialutil.SerialException: [Errno 6] could not open port /dev/ttyUSB0: [Errno 6] No such device or address: '/dev/ttyUSB0'
/usr/local/lib/python3.12/site-packages/serial/serialposix.py:325: SerialException
During handling of the above exception, another exception occurred:
args = ()
kwargs = {'_fixture_classes_and_options': ClassCliOptions(classes={'app': <class 'pytest_embedded_arduino.app.ArduinoApp'>, 'se...oApp object at 0x7ff8ef5cc380>, 'msg_queue': <AutoProxy[MessageQueue] object, typeid 'MessageQueue' at 0x7ff8ef66a570>}
_close_or_terminate = <function multi_dut_generator_fixture.<locals>.wrapper.<locals>._close_or_terminate at 0x7ff8ef5d0900>
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)
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:501:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/local/lib/python3.12/site-packages/pytest_embedded/plugin.py:1131: in serial
return serial_gn(**locals())
^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded/dut_factory.py:482: in serial_gn
return cls(**_drop_none_kwargs(kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/local/lib/python3.12/site-packages/pytest_embedded_arduino/serial.py:25: in __init__
super().__init__(
/usr/local/lib/python3.12/site-packages/pytest_embedded_serial_esp/serial.py:98: in __init__
self.esp = esptool.get_default_connected_device(
/usr/local/lib/python3.12/site-packages/esptool/__init__.py:1157: in get_default_connected_device
_esp = chip_class(each_port, initial_baud, trace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <esptool.targets.esp32s2.ESP32S2ROM object at 0x7ff8ef5cc680>
port = '/dev/ttyUSB0', baud = 115200, trace_enabled = False
def __init__(self, port=DEFAULT_PORT, baud=ESP_ROM_BAUD, trace_enabled=False):
"""Base constructor for ESPLoader bootloader interaction
Don't call this constructor, either instantiate a specific
ROM class directly, or use cmds.detect_chip(). You can use the with
statement to ensure the serial port is closed when done.
This base class has all of the instance methods for bootloader
functionality supported across various chips & stub
loaders. Subclasses replace the functions they don't support
with ones which throw NotImplementedInROMError().
"""
# True if esptool detects the ROM is in Secure Download Mode
self.secure_download_mode = False
# True if esptool detects conditions which require the stub to be disabled
self.stub_is_disabled = False
# Device-and-runtime-specific cache
self.cache = {
"flash_id": None,
"uart_no": None,
"usb_pid": None,
"security_info": None,
}
if isinstance(port, str):
try:
self._port = serial.serial_for_url(
port, exclusive=True, do_not_open=True
)
if sys.platform == "win32":
# When opening a port on Windows,
# the RTS/DTR (active low) lines
# need to be set to False (pulled high)
# to avoid unwanted chip reset
self._port.rts = False
self._port.dtr = False
self._port.open()
except serial.serialutil.SerialException as e:
port_issues = [
[ # does not exist error
re.compile(r"Errno 2|FileNotFoundError", re.IGNORECASE),
"Check if the port is correct and ESP connected",
],
[ # busy port error
re.compile(r"Access is denied", re.IGNORECASE),
"Check if the port is not used by another task",
],
]
if sys.platform.startswith("linux"):
port_issues.append(
[ # permission denied error
re.compile(r"Permission denied", re.IGNORECASE),
("Try to add user into dialout or uucp group."),
],
)
hint_msg = ""
for port_issue in port_issues:
if port_issue[0].search(str(e)):
hint_msg = f"\nHint: {port_issue[1]}\n"
break
> raise FatalError(
f"Could not open {port}, the port is busy or doesn't exist."
f"\n({e})\n"
f"{hint_msg}"
)
E esptool.util.FatalError: Could not open /dev/ttyUSB0, the port is busy or doesn't exist.
E ([Errno 6] could not open port /dev/ttyUSB0: [Errno 6] No such device or address: '/dev/ttyUSB0')
/usr/local/lib/python3.12/site-packages/esptool/loader.py:389: FatalError
Check failure on line 0 in hardware.missing_runner
github-actions / Test Results
All 3 runs with error: wifi1 (hardware.missing_runner)
./artifacts/test-results-hw/validation/wifi/esp32/wifi1.xml
./artifacts/test-results-hw/validation/wifi/esp32s2/wifi1.xml
./artifacts/test-results-hw/validation/wifi/esp32s3/wifi1.xml
Raw output
No available runner matches required tags: esp32s3 wifi_router (chip=esp32s3)
The hardware test could not be scheduled because no runner with the required tag combination is online/available.
Check failure on line 0 in hardware.missing_runner
github-actions / Test Results
All 2 runs with error: wifi (hardware.missing_runner)
./artifacts/test-results-hw/validation/wifi/esp32c3/wifi.xml
./artifacts/test-results-hw/validation/wifi/esp32c6/wifi.xml
Raw output
No available runner matches required tags: esp32c3 wifi_router (chip=esp32c3)
The hardware test could not be scheduled because no runner with the required tag combination is online/available.
Check failure on line 0 in hardware.missing_runner
github-actions / Test Results
All 3 runs with error: wifi0 (hardware.missing_runner)
./artifacts/test-results-hw/validation/wifi/esp32/wifi0.xml
./artifacts/test-results-hw/validation/wifi/esp32s2/wifi0.xml
./artifacts/test-results-hw/validation/wifi/esp32s3/wifi0.xml
Raw output
No available runner matches required tags: esp32 wifi_router (chip=esp32)
The hardware test could not be scheduled because no runner with the required tag combination is online/available.
Check notice on line 0 in .github
github-actions / Test Results
54 tests found
There are 54 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
hardware.missing_runner ‑ wifi
hardware.missing_runner ‑ wifi0
hardware.missing_runner ‑ wifi1
hardware.missing_runner ‑ wifi2
performance.coremark.test_coremark ‑ test_coremark
performance.fibonacci.test_fibonacci ‑ test_fibonacci
performance.linpack_double.test_linpack_double ‑ test_linpack_double
performance.linpack_float.test_linpack_float ‑ test_linpack_float
performance.psramspeed.test_psramspeed ‑ test_psramspeed
performance.ramspeed.test_ramspeed ‑ test_ramspeed
performance.superpi.test_superpi ‑ test_superpi
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
test_touch_errors
test_touch_interrtupt
test_touch_read
timer_clock_select_test
timer_divider_test
timer_interrupt_test
timer_read_test
validation.democfg.test_democfg ‑ test_cfg
validation.gpio.test_gpio ‑ test_gpio
validation.hello_world.test_hello_world ‑ test_hello_world
validation.nvs.test_nvs ‑ test_nvs
validation.periman.test_periman ‑ test_periman
validation.wifi.test_wifi ‑ test_wifi