Skip to content

Instantly share code, notes, and snippets.

@mweinelt
Created April 5, 2023 20:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mweinelt/5ec098950ae2f0c0d49547e46660bf3e to your computer and use it in GitHub Desktop.
Save mweinelt/5ec098950ae2f0c0d49547e46660bf3e to your computer and use it in GitHub Desktop.
zigpy-znp 0.10.0 test failures with zigpy 0.54.0
Sourcing python-remove-tests-dir-hook
Sourcing python-catch-conflicts-hook.sh
Sourcing python-remove-bin-bytecode-hook.sh
Sourcing setuptools-build-hook
Using setuptoolsBuildPhase
Using setuptoolsShellHook
Sourcing pip-install-hook
Using pipInstallPhase
Sourcing python-imports-check-hook.sh
Using pythonImportsCheckPhase
Sourcing python-namespaces-hook
Sourcing python-catch-conflicts-hook.sh
Sourcing setuptools-check-hook
Using setuptoolsCheckPhase
Sourcing pytest-check-hook
Using pytestCheckPhase
Removing setuptoolsCheckPhase
unpacking sources
unpacking source archive /nix/store/9xvfqaqp5m6njyz0wa66ilxzn92bx93h-source
source root is source
setting SOURCE_DATE_EPOCH to timestamp 315619200 of file source/zigpy_znp/znp/security.py
patching sources
configuring
no configure script, doing nothing
building
Executing setuptoolsBuildPhase
/nix/store/qg3jn6cd12kphciq49grn38hk5fzgs0v-python3.10-setuptools-67.4.0/lib/python3.10/site-packages/setuptools/config/pyprojecttoml.py:108: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.
warnings.warn(msg, _BetaConfiguration)
running bdist_wheel
running build
running build_py
creating build
creating build/lib
creating build/lib/zigpy_znp
copying zigpy_znp/api.py -> build/lib/zigpy_znp
copying zigpy_znp/logger.py -> build/lib/zigpy_znp
copying zigpy_znp/__init__.py -> build/lib/zigpy_znp
copying zigpy_znp/uart.py -> build/lib/zigpy_znp
copying zigpy_znp/const.py -> build/lib/zigpy_znp
copying zigpy_znp/exceptions.py -> build/lib/zigpy_znp
copying zigpy_znp/frames.py -> build/lib/zigpy_znp
copying zigpy_znp/nvram.py -> build/lib/zigpy_znp
copying zigpy_znp/utils.py -> build/lib/zigpy_znp
copying zigpy_znp/config.py -> build/lib/zigpy_znp
creating build/lib/zigpy_znp/tools
copying zigpy_znp/tools/common.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/network_scan.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/nvram_reset.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/network_restore.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/__init__.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/nvram_read.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/nvram_write.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/flash_read.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/energy_scan.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/network_backup.py -> build/lib/zigpy_znp/tools
copying zigpy_znp/tools/flash_write.py -> build/lib/zigpy_znp/tools
creating build/lib/zigpy_znp/types
copying zigpy_znp/types/named.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/zigpy_types.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/nvids.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/commands.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/cstruct.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/structs.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/basic.py -> build/lib/zigpy_znp/types
copying zigpy_znp/types/__init__.py -> build/lib/zigpy_znp/types
creating build/lib/zigpy_znp/zigbee
copying zigpy_znp/zigbee/device.py -> build/lib/zigpy_znp/zigbee
copying zigpy_znp/zigbee/application.py -> build/lib/zigpy_znp/zigbee
copying zigpy_znp/zigbee/__init__.py -> build/lib/zigpy_znp/zigbee
creating build/lib/zigpy_znp/znp
copying zigpy_znp/znp/__init__.py -> build/lib/zigpy_znp/znp
copying zigpy_znp/znp/security.py -> build/lib/zigpy_znp/znp
creating build/lib/zigpy_znp/commands
copying zigpy_znp/commands/app.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/rpc_error.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/zdo.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/zgp.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/znp.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/sapi.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/mac.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/sys.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/ubl.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/util.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/af.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/app_config.py -> build/lib/zigpy_znp/commands
copying zigpy_znp/commands/__init__.py -> build/lib/zigpy_znp/commands
running egg_info
creating zigpy_znp.egg-info
writing zigpy_znp.egg-info/PKG-INFO
writing dependency_links to zigpy_znp.egg-info/dependency_links.txt
writing requirements to zigpy_znp.egg-info/requires.txt
writing top-level names to zigpy_znp.egg-info/top_level.txt
writing manifest file 'zigpy_znp.egg-info/SOURCES.txt'
reading manifest file 'zigpy_znp.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'zigpy_znp.egg-info/SOURCES.txt'
/nix/store/qg3jn6cd12kphciq49grn38hk5fzgs0v-python3.10-setuptools-67.4.0/lib/python3.10/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/zigpy_znp
creating build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/flash_read.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/common.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/nvram_reset.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/network_restore.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/network_backup.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/nvram_write.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/network_scan.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/flash_write.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/energy_scan.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/tools/nvram_read.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/tools
copying build/lib/zigpy_znp/logger.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/utils.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
creating build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/util.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/zdo.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/znp.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/zgp.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/sapi.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/app.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/rpc_error.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/af.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/ubl.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/app_config.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/mac.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
copying build/lib/zigpy_znp/commands/sys.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/commands
creating build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/basic.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/zigpy_types.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/structs.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/cstruct.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/commands.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/nvids.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/types/named.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/types
copying build/lib/zigpy_znp/nvram.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/frames.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/exceptions.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/const.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
copying build/lib/zigpy_znp/uart.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
creating build/bdist.linux-x86_64/wheel/zigpy_znp/znp
copying build/lib/zigpy_znp/znp/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/znp
copying build/lib/zigpy_znp/znp/security.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/znp
copying build/lib/zigpy_znp/api.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
creating build/bdist.linux-x86_64/wheel/zigpy_znp/zigbee
copying build/lib/zigpy_znp/zigbee/application.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/zigbee
copying build/lib/zigpy_znp/zigbee/__init__.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/zigbee
copying build/lib/zigpy_znp/zigbee/device.py -> build/bdist.linux-x86_64/wheel/zigpy_znp/zigbee
copying build/lib/zigpy_znp/config.py -> build/bdist.linux-x86_64/wheel/zigpy_znp
running install_egg_info
Copying zigpy_znp.egg-info to build/bdist.linux-x86_64/wheel/zigpy_znp-0.0.0-py3.10.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/zigpy_znp-0.0.0.dist-info/WHEEL
creating 'dist/zigpy_znp-0.0.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'zigpy_znp/__init__.py'
adding 'zigpy_znp/api.py'
adding 'zigpy_znp/config.py'
adding 'zigpy_znp/const.py'
adding 'zigpy_znp/exceptions.py'
adding 'zigpy_znp/frames.py'
adding 'zigpy_znp/logger.py'
adding 'zigpy_znp/nvram.py'
adding 'zigpy_znp/uart.py'
adding 'zigpy_znp/utils.py'
adding 'zigpy_znp/commands/__init__.py'
adding 'zigpy_znp/commands/af.py'
adding 'zigpy_znp/commands/app.py'
adding 'zigpy_znp/commands/app_config.py'
adding 'zigpy_znp/commands/mac.py'
adding 'zigpy_znp/commands/rpc_error.py'
adding 'zigpy_znp/commands/sapi.py'
adding 'zigpy_znp/commands/sys.py'
adding 'zigpy_znp/commands/ubl.py'
adding 'zigpy_znp/commands/util.py'
adding 'zigpy_znp/commands/zdo.py'
adding 'zigpy_znp/commands/zgp.py'
adding 'zigpy_znp/commands/znp.py'
adding 'zigpy_znp/tools/__init__.py'
adding 'zigpy_znp/tools/common.py'
adding 'zigpy_znp/tools/energy_scan.py'
adding 'zigpy_znp/tools/flash_read.py'
adding 'zigpy_znp/tools/flash_write.py'
adding 'zigpy_znp/tools/network_backup.py'
adding 'zigpy_znp/tools/network_restore.py'
adding 'zigpy_znp/tools/network_scan.py'
adding 'zigpy_znp/tools/nvram_read.py'
adding 'zigpy_znp/tools/nvram_reset.py'
adding 'zigpy_znp/tools/nvram_write.py'
adding 'zigpy_znp/types/__init__.py'
adding 'zigpy_znp/types/basic.py'
adding 'zigpy_znp/types/commands.py'
adding 'zigpy_znp/types/cstruct.py'
adding 'zigpy_znp/types/named.py'
adding 'zigpy_znp/types/nvids.py'
adding 'zigpy_znp/types/structs.py'
adding 'zigpy_znp/types/zigpy_types.py'
adding 'zigpy_znp/zigbee/__init__.py'
adding 'zigpy_znp/zigbee/application.py'
adding 'zigpy_znp/zigbee/device.py'
adding 'zigpy_znp/znp/__init__.py'
adding 'zigpy_znp/znp/security.py'
adding 'zigpy_znp-0.0.0.dist-info/LICENSE'
adding 'zigpy_znp-0.0.0.dist-info/METADATA'
adding 'zigpy_znp-0.0.0.dist-info/WHEEL'
adding 'zigpy_znp-0.0.0.dist-info/top_level.txt'
adding 'zigpy_znp-0.0.0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Finished executing setuptoolsBuildPhase
installing
Executing pipInstallPhase
/build/source/dist /build/source
Processing ./zigpy_znp-0.0.0-py3-none-any.whl
Requirement already satisfied: jsonschema in /nix/store/l26ry4dyi1jr92zdhvr6ja40i7siif9v-python3.10-jsonschema-4.17.3/lib/python3.10/site-packages (from zigpy-znp==0.0.0) (4.17.3)
Requirement already satisfied: coloredlogs in /nix/store/2gj54nz9q2x1f1l5ix7afp4yxsslh40d-python3.10-coloredlogs-15.0.1/lib/python3.10/site-packages (from zigpy-znp==0.0.0) (15.0.1)
Requirement already satisfied: voluptuous in /nix/store/py8b09vyw7kb0km5wyqb5fqklvv9wkzh-python3.10-voluptuous-0.13.1/lib/python3.10/site-packages (from zigpy-znp==0.0.0) (0.13.1)
Requirement already satisfied: async-timeout in /nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages (from zigpy-znp==0.0.0) (4.0.2)
Requirement already satisfied: zigpy>=0.52.0 in /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages (from zigpy-znp==0.0.0) (0.54.0)
Requirement already satisfied: aiohttp in /nix/store/56x81qaj0avb6q1d91friama6326r46z-python3.10-aiohttp-3.8.4/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (3.8.4)
Requirement already satisfied: aiosqlite>=0.16.0 in /nix/store/6qpidxbzchw96lic03v215v50fwnzklm-python3.10-aiosqlite-0.18.0/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (0.18.0)
Requirement already satisfied: crccheck in /nix/store/x8pvs8xx7cvi83cxwkm0p2qhczqajk9n-python3.10-crccheck-1.3.0/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (1.3.0)
Requirement already satisfied: attrs in /nix/store/hmj9b0q59f68hndi8g6553x8hx8man85-python3.10-attrs-22.2.0/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (22.2.0)
Requirement already satisfied: cryptography in /nix/store/39jndcpcrj0q3jy56rfr377vx4pcxwsa-python3.10-cryptography-39.0.1/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (39.0.1)
Requirement already satisfied: pyserial-asyncio in /nix/store/y3d1b7cc537iwvsy0gpm0ipkhn3wp1hk-python3.10-pyserial-asyncio-0.6/lib/python3.10/site-packages (from zigpy>=0.52.0->zigpy-znp==0.0.0) (0.6)
Requirement already satisfied: humanfriendly>=9.1 in /nix/store/irp56jrp5wcvzz83h1hv65cfkd88gs45-python3.10-humanfriendly-10.0/lib/python3.10/site-packages (from coloredlogs->zigpy-znp==0.0.0) (10.0)
Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /nix/store/iqjm5nirl5sfy3vim2wsg9s2bspz87sj-python3.10-pyrsistent-0.19.3/lib/python3.10/site-packages (from jsonschema->zigpy-znp==0.0.0) (0.19.3)
Requirement already satisfied: multidict<7.0,>=4.5 in /nix/store/70a31iv7nwbnrw8cmxlrgzqn20k8sbld-python3.10-multidict-6.0.4/lib/python3.10/site-packages (from aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (6.0.4)
Requirement already satisfied: frozenlist>=1.1.1 in /nix/store/rqfpx3p554srf0myb51ab2g4981z5inr-python3.10-frozenlist-1.3.3/lib/python3.10/site-packages (from aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (1.3.3)
Requirement already satisfied: aiosignal>=1.1.2 in /nix/store/992s5a9nc5n23gi8l84s3gjyi25nnn3z-python3.10-aiosignal-1.3.1/lib/python3.10/site-packages (from aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (1.3.1)
Requirement already satisfied: yarl<2.0,>=1.0 in /nix/store/w39dcfyzz9hbgqnmmbkmbx1966aw533h-python3.10-yarl-1.8.2/lib/python3.10/site-packages (from aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (1.8.2)
Requirement already satisfied: charset-normalizer<4.0,>=2.0 in /nix/store/3m22imm3lcrg809s02yin0wyf3cqj9sz-python3.10-charset-normalizer-3.0.1/lib/python3.10/site-packages (from aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (3.0.1)
Requirement already satisfied: cffi>=1.12 in /nix/store/788wr3gznqs4azav9qd6r32670nnmni2-python3.10-cffi-1.15.1/lib/python3.10/site-packages (from cryptography->zigpy>=0.52.0->zigpy-znp==0.0.0) (1.15.1)
Requirement already satisfied: pyserial in /nix/store/l19b6pjq0g7ddnv3slwv1d2hp0v21kms-python3.10-pyserial-3.5/lib/python3.10/site-packages (from pyserial-asyncio->zigpy>=0.52.0->zigpy-znp==0.0.0) (3.5)
Requirement already satisfied: pycparser in /nix/store/9dpi99bcwc5sz7flfxmmhkva1b131wqb-python3.10-pycparser-2.21/lib/python3.10/site-packages (from cffi>=1.12->cryptography->zigpy>=0.52.0->zigpy-znp==0.0.0) (2.21)
Requirement already satisfied: idna>=2.0 in /nix/store/i6hl8zl3yb2v2h1xvqsjrzzd9k4gyh7q-python3.10-idna-3.4/lib/python3.10/site-packages (from yarl<2.0,>=1.0->aiohttp->zigpy>=0.52.0->zigpy-znp==0.0.0) (3.4)
Installing collected packages: zigpy-znp
Successfully installed zigpy-znp-0.0.0
/build/source
Finished executing pipInstallPhase
pythonOutputDistPhase
Executing pythonOutputDistPhase
Finished executing pythonOutputDistPhase
post-installation fixup
shrinking RPATHs of ELF executables and libraries in /nix/store/k2zzvrpq570r07fxwb8vy7i9w0h1vydv-python3.10-zigpy-znp-0.10.0
checking for references to /build/ in /nix/store/k2zzvrpq570r07fxwb8vy7i9w0h1vydv-python3.10-zigpy-znp-0.10.0...
patching script interpreter paths in /nix/store/k2zzvrpq570r07fxwb8vy7i9w0h1vydv-python3.10-zigpy-znp-0.10.0
stripping (with command strip and flags -S) in /nix/store/k2zzvrpq570r07fxwb8vy7i9w0h1vydv-python3.10-zigpy-znp-0.10.0/lib
shrinking RPATHs of ELF executables and libraries in /nix/store/4c33kjjzdfjnnm6hag682zrnsky9860r-python3.10-zigpy-znp-0.10.0-dist
checking for references to /build/ in /nix/store/4c33kjjzdfjnnm6hag682zrnsky9860r-python3.10-zigpy-znp-0.10.0-dist...
patching script interpreter paths in /nix/store/4c33kjjzdfjnnm6hag682zrnsky9860r-python3.10-zigpy-znp-0.10.0-dist
Executing pythonRemoveTestsDir
Finished executing pythonRemoveTestsDir
running install tests
no Makefile or custom installCheckPhase, doing nothing
pythonCatchConflictsPhase
pythonRemoveBinBytecodePhase
pythonImportsCheckPhase
Executing pythonImportsCheckPhase
Check whether the following modules can be imported: zigpy_znp
pytestXdistHook
pytestCheckPhase
Executing pytestCheckPhase
============================= test session starts ==============================
platform linux -- Python 3.10.10, pytest-7.2.1, pluggy-1.0.0 -- /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
cachedir: .pytest_cache
rootdir: /build/source, configfile: pyproject.toml, testpaths: tests
plugins: asyncio-0.20.3, mock-3.10.0, timeout-2.1.0, xdist-3.2.0
asyncio: mode=auto
timeout: 300.0s
timeout method: signal
timeout func_only: False
[gw0] linux Python 3.10.10 cwd: /build/source
[gw1] linux Python 3.10.10 cwd: /build/source
[gw2] linux Python 3.10.10 cwd: /build/source
[gw3] linux Python 3.10.10 cwd: /build/source
[gw4] linux Python 3.10.10 cwd: /build/source
[gw5] linux Python 3.10.10 cwd: /build/source
[gw6] linux Python 3.10.10 cwd: /build/source
[gw7] linux Python 3.10.10 cwd: /build/source
[gw8] linux Python 3.10.10 cwd: /build/source
[gw9] linux Python 3.10.10 cwd: /build/source
[gw10] linux Python 3.10.10 cwd: /build/source
[gw11] linux Python 3.10.10 cwd: /build/source
[gw12] linux Python 3.10.10 cwd: /build/source
[gw13] linux Python 3.10.10 cwd: /build/source
[gw14] linux Python 3.10.10 cwd: /build/source
[gw15] linux Python 3.10.10 cwd: /build/source
[gw16] linux Python 3.10.10 cwd: /build/source
[gw17] linux Python 3.10.10 cwd: /build/source
[gw18] linux Python 3.10.10 cwd: /build/source
[gw19] linux Python 3.10.10 cwd: /build/source
[gw20] linux Python 3.10.10 cwd: /build/source
[gw21] linux Python 3.10.10 cwd: /build/source
[gw22] linux Python 3.10.10 cwd: /build/source
[gw23] linux Python 3.10.10 cwd: /build/source
[gw24] linux Python 3.10.10 cwd: /build/source
[gw25] linux Python 3.10.10 cwd: /build/source
[gw26] linux Python 3.10.10 cwd: /build/source
[gw27] linux Python 3.10.10 cwd: /build/source
[gw28] linux Python 3.10.10 cwd: /build/source
[gw29] linux Python 3.10.10 cwd: /build/source
[gw30] linux Python 3.10.10 cwd: /build/source
[gw31] linux Python 3.10.10 cwd: /build/source
[gw32] linux Python 3.10.10 cwd: /build/source
[gw33] linux Python 3.10.10 cwd: /build/source
[gw34] linux Python 3.10.10 cwd: /build/source
[gw35] linux Python 3.10.10 cwd: /build/source
[gw36] linux Python 3.10.10 cwd: /build/source
[gw37] linux Python 3.10.10 cwd: /build/source
[gw38] linux Python 3.10.10 cwd: /build/source
[gw39] linux Python 3.10.10 cwd: /build/source
[gw40] linux Python 3.10.10 cwd: /build/source
[gw41] linux Python 3.10.10 cwd: /build/source
[gw42] linux Python 3.10.10 cwd: /build/source
[gw43] linux Python 3.10.10 cwd: /build/source
[gw44] linux Python 3.10.10 cwd: /build/source
[gw45] linux Python 3.10.10 cwd: /build/source
[gw46] linux Python 3.10.10 cwd: /build/source
[gw47] linux Python 3.10.10 cwd: /build/source
[gw48] linux Python 3.10.10 cwd: /build/source
[gw49] linux Python 3.10.10 cwd: /build/source
[gw50] linux Python 3.10.10 cwd: /build/source
[gw51] linux Python 3.10.10 cwd: /build/source
[gw52] linux Python 3.10.10 cwd: /build/source
[gw53] linux Python 3.10.10 cwd: /build/source
[gw54] linux Python 3.10.10 cwd: /build/source
[gw55] linux Python 3.10.10 cwd: /build/source
[gw56] linux Python 3.10.10 cwd: /build/source
[gw57] linux Python 3.10.10 cwd: /build/source
[gw58] linux Python 3.10.10 cwd: /build/source
[gw59] linux Python 3.10.10 cwd: /build/source
[gw60] linux Python 3.10.10 cwd: /build/source
[gw61] linux Python 3.10.10 cwd: /build/source
[gw62] linux Python 3.10.10 cwd: /build/source
[gw63] linux Python 3.10.10 cwd: /build/source
[gw0] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw1] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw2] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw4] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw3] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw5] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw6] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw7] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw8] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw9] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw10] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw11] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw12] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw13] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw14] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw15] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw16] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw17] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw18] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw19] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw20] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw21] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw22] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw23] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw24] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw25] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw26] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw27] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw28] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw29] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw30] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw31] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw32] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw33] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw34] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw35] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw36] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw37] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw38] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw39] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw40] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw41] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw42] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw43] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw44] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw45] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw46] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw48] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw47] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw49] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw50] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw51] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw52] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw54] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw53] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw55] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw56] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw57] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw58] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw59] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw60] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw61] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw62] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
[gw63] Python 3.10.10 (main, Feb 7 2023, 12:19:31) [GCC 12.2.0]
gw0 [405] / gw1 [405] / gw2 [405] / gw3 [405] / gw4 [405] / gw5 [405] / gw6 [405] / gw7 [405] / gw8 [405] / gw9 [405] / gw10 [405] / gw11 [405] / gw12 [405] / gw13 [405] / gw14 [405] / gw15 [405] / gw16 [405] / gw17 [405] / gw18 [405] / gw19 [405] / gw20 [405] / gw21 [405] / gw22 [405] / gw23 [405] / gw24 [405] / gw25 [405] / gw26 [405] / gw27 [405] / gw28 [405] / gw29 [405] / gw30 [405] / gw31 [405] / gw32 [405] / gw33 [405] / gw34 [405] / gw35 [405] / gw36 [405] / gw37 [405] / gw38 [405] / gw39 [405] / gw40 [405] / gw41 [405] / gw42 [405] / gw43 [405] / gw44 [405] / gw45 [405] / gw46 [405] / gw47 [405] / gw48 [405] / gw49 [405] / gw50 [405] / gw51 [405] / gw52 [405] / gw53 [405] / gw54 [405] / gw55 [405] / gw56 [405] / gw57 [405] / gw58 [405] / gw59 [405] / gw60 [405] / gw61 [405] / gw62 [405] / gw63 [405]m
scheduling tests via LoadScheduling
tests/test_frames.py::test_transport_frame
tests/test_commands.py::test_command_replace_normal
tests/test_commands.py::test_error_code
tests/test_config.py::test_pin_states_same_lengths
tests/test_commands.py::test_command_optional_params_failures
tests/test_trace_logging.py::test_bad_trace_level
tests/test_commands.py::test_command_deserialization
tests/test_commands.py::test_command_serialization
tests/test_commands.py::test_command_param_binding
tests/test_commands.py::test_command_possibly_empty_payload
[gw8] [ 0%] PASSED tests/test_commands.py::test_command_possibly_empty_payload
tests/test_types_cstruct.py::test_struct_bad_fields
[gw29] [ 0%] PASSED tests/test_types_cstruct.py::test_struct_bad_fields
tests/test_trace_logging.py::test_no_trace_level
[gw12] [ 0%] PASSED tests/test_trace_logging.py::test_no_trace_level
[gw9] [ 0%] PASSED tests/test_config.py::test_pin_states_same_lengths
tests/test_types_cstruct.py::test_struct_field_values
[gw25] [ 1%] PASSED tests/test_types_cstruct.py::test_struct_field_values
[gw17] [ 1%] PASSED tests/test_trace_logging.py::test_bad_trace_level
[gw2] [ 1%] PASSED tests/test_commands.py::test_command_param_binding
[gw4] [ 1%] PASSED tests/test_commands.py::test_command_optional_params_failures
[gw5] [ 2%] PASSED tests/test_commands.py::test_command_serialization
tests/test_commands.py::test_command_header
[gw0] [ 2%] PASSED tests/test_commands.py::test_command_header
tests/test_types_basic.py::test_int_out_of_bounds
[gw20] [ 2%] PASSED tests/test_types_basic.py::test_int_out_of_bounds
[gw11] [ 2%] PASSED tests/test_frames.py::test_transport_frame
tests/test_trace_logging.py::test_existing_trace_level[4]
[gw14] [ 3%] PASSED tests/test_trace_logging.py::test_existing_trace_level[4]
tests/test_types_basic.py::test_fixed_list
[gw23] [ 3%] PASSED tests/test_types_basic.py::test_fixed_list
tests/test_types_basic.py::test_enum_instance_types
[gw24] [ 3%] PASSED tests/test_types_basic.py::test_enum_instance_types
[gw7] [ 3%] PASSED tests/test_commands.py::test_command_replace_normal
[gw6] [ 4%] PASSED tests/test_commands.py::test_command_deserialization
[gw1] [ 4%] PASSED tests/test_commands.py::test_error_code
tests/test_types_basic.py::test_serialize_list
[gw18] [ 4%] PASSED tests/test_types_basic.py::test_serialize_list
tests/test_types_basic.py::test_longbytes
[gw21] [ 4%] PASSED tests/test_types_basic.py::test_longbytes
tests/test_commands.py::test_command_str_repr
[gw3] [ 5%] PASSED tests/test_commands.py::test_command_str_repr
tests/test_trace_logging.py::test_existing_trace_level[6]
[gw15] [ 5%] PASSED tests/test_trace_logging.py::test_existing_trace_level[6]
tests/test_types_cstruct.py::test_old_nib_deserialize
[gw30] [ 5%] PASSED tests/test_types_cstruct.py::test_old_nib_deserialize
tests/test_types_cstruct.py::test_struct_equality
[gw28] [ 5%] PASSED tests/test_types_cstruct.py::test_struct_equality
tests/test_trace_logging.py::test_existing_trace_level[8]
[gw16] [ 6%] PASSED tests/test_trace_logging.py::test_existing_trace_level[8]
tests/test_uart.py::test_uart_str_repr
tests/test_uart.py::test_uart_rx_byte_by_byte_garbage
tests/test_uart.py::test_uart_rx_corrupted_fcs
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedZStack3CC2531]
tests/test_types_cstruct.py::test_struct_nesting
[gw26] [ 6%] PASSED tests/test_types_cstruct.py::test_struct_nesting
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetLaunchpadCC26X2R1]
tests/api/test_network_state.py::test_broken_cc2531_load_state[FormedZStack3CC2531]
tests/api/test_nvram.py::test_osal_writes_invalid
tests/api/test_nvram.py::test_osal_write_existing[\x03]
tests/test_types_named.py::test_status
[gw31] [ 6%] PASSED tests/test_types_named.py::test_status
tests/test_frames.py::test_general_frame
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetLaunchpadCC26X2R1]
[gw34] [ 6%] PASSED tests/test_uart.py::test_uart_str_repr
tests/test_types_basic.py::test_abstract_ints
[gw19] [ 7%] PASSED tests/test_types_basic.py::test_abstract_ints
tests/test_types_cstruct.py::test_struct_aligned_nested_serialization_deserialization
tests/test_types_basic.py::test_lvlist_too_short
[gw22] [ 7%] PASSED tests/test_types_basic.py::test_lvlist_too_short
tests/api/test_network_state.py::test_write_settings_fast[ResetZStack1CC2531]
tests/test_types_named.py::test_missing_enum_mixin
[gw33] [ 7%] PASSED tests/test_types_named.py::test_missing_enum_mixin
[gw10] [ 7%] PASSED tests/test_frames.py::test_general_frame
[gw36] [ 8%] PASSED tests/test_uart.py::test_uart_rx_corrupted_fcs
[gw27] [ 8%] PASSED tests/test_types_cstruct.py::test_struct_aligned_nested_serialization_deserialization
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetLaunchpadCC26X2R1]
tests/test_types_named.py::test_missing_status_enum
[gw32] [ 8%] PASSED tests/test_types_named.py::test_missing_status_enum
tests/api/test_connect.py::test_connect_skip_bootloader[2]
tests/test_uart.py::test_connection_made
[gw38] [ 8%] PASSED tests/test_uart.py::test_connection_made
[gw59] [ 9%] PASSED tests/api/test_nvram.py::test_osal_writes_invalid
tests/api/test_listeners.py::test_resolve
[gw44] [ 9%] PASSED tests/api/test_listeners.py::test_resolve
tests/test_utils.py::test_command_deduplication_complex
[gw39] [ 9%] PASSED tests/test_utils.py::test_command_deduplication_complex
tests/api/test_nvram.py::test_osal_write_same_length
[gw61] [ 9%] PASSED tests/api/test_nvram.py::test_osal_write_same_length
tests/test_uart.py::test_uart_frame_received_error
[gw37] [ 10%] PASSED tests/test_uart.py::test_uart_frame_received_error
tests/api/test_connect.py::test_connect_no_test
[gw40] [ 10%] PASSED tests/api/test_connect.py::test_connect_no_test
[gw35] [ 10%] PASSED tests/test_uart.py::test_uart_rx_byte_by_byte_garbage
tests/api/test_connect.py::test_connect_skip_bootloader_rts_dtr_pins
tests/api/test_listeners.py::test_multi_cancel
[gw45] [ 10%] PASSED tests/api/test_listeners.py::test_multi_cancel
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedZStack3CC2531]
tests/api/test_nvram.py::test_osal_write_wrong_length[False-\x01\x02-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw62] [ 11%] PASSED tests/api/test_nvram.py::test_osal_write_wrong_length[False-\x01\x02-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetZStack1CC2531]
tests/test_trace_logging.py::test_existing_trace_level[2]
[gw13] [ 11%] PASSED tests/test_trace_logging.py::test_existing_trace_level[2]
tests/test_trace_logging.py::test_existing_trace_level[1]
[gw12] [ 11%] PASSED tests/test_trace_logging.py::test_existing_trace_level[1]
[gw60] [ 11%] PASSED tests/api/test_nvram.py::test_osal_write_existing[\x03]
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetZStack1CC2531]
tests/api/test_nvram.py::test_osal_read_success[test-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw63] [ 12%] PASSED tests/api/test_nvram.py::test_osal_read_success[test-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetZStack1CC2531]
tests/test_types_cstruct.py::test_struct_incomplete_serialization
[gw29] [ 12%] PASSED tests/test_types_cstruct.py::test_struct_incomplete_serialization
tests/test_config.py::test_pin_states_different_lengths
[gw9] [ 12%] PASSED tests/test_config.py::test_pin_states_different_lengths
tests/test_config.py::test_EnumValue
[gw8] [ 12%] PASSED tests/test_config.py::test_EnumValue
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedZStack3CC2531]
tests/api/test_network_state.py::test_write_settings_fast[FormedZStack3CC2531]
tests/test_commands.py::test_command_equality
tests/test_types_cstruct.py::test_struct_methods_and_constants
[gw25] [ 13%] PASSED tests/test_types_cstruct.py::test_struct_methods_and_constants
tests/test_trace_logging.py::test_debug_trace_logger
tests/api/test_network_state.py::test_write_settings_fast[ResetLaunchpadCC26X2R1]
tests/test_commands.py::test_simple_descriptor
tests/test_types_basic.py::test_bytes
[gw20] [ 13%] PASSED tests/test_types_basic.py::test_bytes
tests/test_commands.py::test_command_optional_params
[gw2] [ 13%] PASSED tests/test_commands.py::test_command_optional_params
[gw17] [ 13%] PASSED tests/test_trace_logging.py::test_debug_trace_logger
tests/test_types_cstruct.py::test_struct_fields
tests/api/test_connect.py::test_connect_skip_bootloader_batched_rsp
tests/test_nvids.py::test_nvid_uniqueness
[gw11] [ 14%] PASSED tests/test_nvids.py::test_nvid_uniqueness
[gw4] [ 14%] PASSED tests/test_commands.py::test_simple_descriptor
[gw55] [ 14%] PASSED tests/api/test_network_state.py::test_broken_cc2531_load_state[FormedZStack3CC2531]
tests/test_types_basic.py::test_fixed_list_deserialize
[gw23] [ 14%] PASSED tests/test_types_basic.py::test_fixed_list_deserialize
tests/test_commands.py::test_command_setters
[gw24] [ 15%] PASSED tests/test_types_cstruct.py::test_struct_fields
tests/test_trace_logging.py::test_existing_trace_level[5]
[gw14] [ 15%] PASSED tests/test_trace_logging.py::test_existing_trace_level[5]
tests/test_commands.py::test_command_replace_partial
[gw7] [ 15%] PASSED tests/test_commands.py::test_command_replace_partial
[gw5] [ 15%] PASSED tests/test_commands.py::test_command_equality
tests/test_types_basic.py::test_lvlist
tests/test_commands.py::test_command_immutability
tests/test_types_basic.py::test_enum_uint
[gw18] [ 16%] PASSED tests/test_types_basic.py::test_enum_uint
tests/test_commands.py::test_command_not_recognized
[gw6] [ 16%] PASSED tests/test_commands.py::test_command_not_recognized
tests/test_types_cstruct.py::test_struct_addrmode_address
[gw30] [ 16%] PASSED tests/test_types_cstruct.py::test_struct_addrmode_address
[gw3] [ 16%] PASSED tests/test_commands.py::test_command_immutability
tests/test_trace_logging.py::test_existing_trace_level[7]
[gw15] [ 17%] PASSED tests/test_trace_logging.py::test_existing_trace_level[7]
tests/test_commands.py::test_commands_schema
[gw1] [ 17%] PASSED tests/test_commands.py::test_commands_schema
[gw43] [ 17%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader_rts_dtr_pins
tests/test_types_cstruct.py::test_struct_repr
[gw28] [ 17%] PASSED tests/test_types_cstruct.py::test_struct_repr
[gw21] [ 18%] PASSED tests/test_types_basic.py::test_lvlist
tests/test_trace_logging.py::test_existing_trace_level[9]
[gw16] [ 18%] PASSED tests/test_trace_logging.py::test_existing_trace_level[9]
tests/test_types_cstruct.py::test_struct_aligned_serialization_deserialization
[gw26] [ 18%] PASSED tests/test_types_cstruct.py::test_struct_aligned_serialization_deserialization
tests/test_types_basic.py::test_hex_repr
[gw22] [ 18%] PASSED tests/test_types_basic.py::test_hex_repr
tests/test_uart.py::test_uart_rx_basic
tests/test_frames.py::test_general_frame_wrong_data
[gw10] [ 19%] PASSED tests/test_frames.py::test_general_frame_wrong_data
tests/test_types_basic.py::test_int_too_short
[gw19] [ 19%] PASSED tests/test_types_basic.py::test_int_too_short
[gw33] [ 19%] PASSED tests/test_uart.py::test_uart_rx_basic
tests/test_uart.py::test_uart_rx_byte_by_byte
[gw34] [ 19%] PASSED tests/test_uart.py::test_uart_rx_byte_by_byte
tests/test_types_named.py::test_zdo_nullable_node_descriptor
tests/test_types_cstruct.py::test_struct_unaligned_serialization_deserialization
[gw27] [ 20%] PASSED tests/test_types_cstruct.py::test_struct_unaligned_serialization_deserialization
[gw32] [ 20%] PASSED tests/test_types_named.py::test_zdo_nullable_node_descriptor
tests/test_utils.py::test_combine_concurrent_calls
tests/api/test_nvram.py::test_osal_write_wrong_length[True-\x01\x02-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/test_types_named.py::test_addr_mode_address
[gw31] [ 20%] PASSED tests/test_types_named.py::test_addr_mode_address
tests/test_utils.py::test_command_deduplication_simple
[gw38] [ 20%] PASSED tests/test_utils.py::test_command_deduplication_simple
tests/api/test_nvram.py::test_osal_write_existing[StartupOptions.ClearState|ClearConfig]
tests/api/test_nvram.py::test_osal_write_bad_length[test-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/test_uart.py::test_uart_rx_sof_stress
[gw36] [ 20%] PASSED tests/test_uart.py::test_uart_rx_sof_stress
tests/test_uart.py::test_uart_rx_big_garbage
[gw35] [ 21%] PASSED tests/test_uart.py::test_uart_rx_big_garbage
tests/api/test_listeners.py::test_api_cancel_listeners
tests/api/test_connect.py::test_connect_skip_bootloader[1]
[gw59] [ 21%] PASSED tests/api/test_nvram.py::test_osal_write_existing[StartupOptions.ClearState|ClearConfig]
tests/test_uart.py::test_connection_lost
[gw37] [ 21%] PASSED tests/test_uart.py::test_connection_lost
tests/test_trace_logging.py::test_existing_trace_level[3]
tests/api/test_nvram.py::test_osal_write_existing[value2]
[gw57] [ 21%] PASSED tests/api/test_network_state.py::test_write_settings_fast[ResetZStack1CC2531]
[gw61] [ 22%] PASSED tests/api/test_nvram.py::test_osal_write_wrong_length[True-\x01\x02-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_nvram.py::test_osal_read_long_success[testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttestx-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_listeners.py::test_cancel
tests/api/test_nvram.py::test_osal_read_security_bypass[keydata-OsalNvIds.TCLK_SEED]
tests/api/test_nvram.py::test_osal_read_failure[OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedZStack3CC2531]
tests/api/test_nvram.py::test_osal_read_unexpected_value[too short-OsalNvIds.NWKKEY]
[gw63] [ 22%] PASSED tests/api/test_nvram.py::test_osal_read_long_success[testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttestx-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
tests/api/test_nvram.py::test_osal_read_security_bypass[keydata-OsalNvIds.PRECFGKEY]
[gw12] [ 22%] PASSED tests/api/test_nvram.py::test_osal_read_security_bypass[keydata-OsalNvIds.PRECFGKEY]
tests/api/test_nvram.py::test_osal_delete[16-OsalNvIds.PRECFGKEY]
tests/api/test_nvram.py::test_osal_delete[0-OsalNvIds.PRECFGKEY]
tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedZStack1CC2531]
[gw62] [ 22%] PASSED tests/api/test_nvram.py::test_osal_write_bad_length[test-OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw40] [ 23%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader[1]
tests/api/test_network_state.py::test_state_write_tclk_zstack3[FormedZStack3CC2531]
tests/api/test_nvram.py::test_osal_write_nonexistent[OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw29] [ 23%] PASSED tests/api/test_nvram.py::test_osal_write_nonexistent[OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw13] [ 23%] PASSED tests/test_trace_logging.py::test_existing_trace_level[3]
tests/api/test_request.py::test_callback_rsp
[gw44] [ 23%] PASSED tests/api/test_listeners.py::test_cancel
tests/api/test_nvram_migration.py::test_addrmgr_rewrite_fix[FormedZStack3CC2531]
[gw2] [ 24%] PASSED tests/api/test_nvram.py::test_osal_delete[16-OsalNvIds.PRECFGKEY]
[gw8] [ 24%] PASSED tests/api/test_nvram.py::test_osal_read_failure[OsalNvIds.HAS_CONFIGURED_ZSTACK1]
[gw17] [ 24%] PASSED tests/api/test_nvram.py::test_osal_delete[0-OsalNvIds.PRECFGKEY]
[gw9] [ 24%] PASSED tests/api/test_nvram.py::test_osal_read_security_bypass[keydata-OsalNvIds.TCLK_SEED]
[gw58] [ 25%] PASSED tests/api/test_network_state.py::test_write_settings_fast[FormedZStack3CC2531]
[gw4] [ 25%] PASSED tests/api/test_nvram.py::test_osal_read_unexpected_value[too short-OsalNvIds.NWKKEY]
[gw60] [ 25%] PASSED tests/api/test_nvram.py::test_osal_write_existing[value2]
[gw24] [ 25%] PASSED tests/api/test_request.py::test_callback_rsp
tests/api/test_request.py::test_znp_request_kwargs
tests/api/test_request.py::test_cleanup_timeout_internal
tests/api/test_request.py::test_cleanup_timeout_external
tests/api/test_request.py::test_callback_rsp_background_timeout
tests/api/test_connect.py::test_api_close
tests/api/test_request.py::test_callback_rsp_cleanup_timeout_external
tests/api/test_nvram.py::test_osal_read_proxied[\xab\xcd-OsalNvIds.POLL_RATE_OLD16]
tests/api/test_request.py::test_callback_rsp_cleanup_concurrent
tests/api/test_request.py::test_callback_rsp_cleanup_timeout_internal[False]
tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedLaunchpadCC26X2R1]
[gw56] [ 26%] PASSED tests/api/test_network_state.py::test_write_settings_fast[ResetLaunchpadCC26X2R1]
tests/api/test_request.py::test_znp_sreq_srsp
tests/api/test_request.py::test_callback_rsp_cleanup_timeout_internal[True]
[gw25] [ 26%] PASSED tests/api/test_nvram.py::test_osal_read_proxied[\xab\xcd-OsalNvIds.POLL_RATE_OLD16]
[gw43] [ 26%] PASSED tests/api/test_connect.py::test_api_close
[gw30] [ 26%] PASSED tests/api/test_request.py::test_znp_request_kwargs
tests/api/test_nvram.py::test_osal_read_unexpected_value[too long too long too long -OsalNvIds.NWKKEY]
tests/api/test_request.py::test_znp_request_not_recognized
[gw14] [ 27%] PASSED tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedZStack1CC2531]
tests/api/test_request.py::test_send_failure_when_disconnected
tests/api/test_request.py::test_znp_request_wrong_params
[gw28] [ 27%] PASSED tests/api/test_request.py::test_znp_request_not_recognized
[gw45] [ 27%] PASSED tests/api/test_listeners.py::test_api_cancel_listeners
[gw22] [ 27%] PASSED tests/api/test_request.py::test_send_failure_when_disconnected
tests/api/test_response.py::test_responses_multiple
tests/api/test_request.py::test_handling_unknown_bad_command_parsing
[gw16] [ 28%] PASSED tests/api/test_request.py::test_znp_request_wrong_params
tests/api/test_response.py::test_response_matching_partial
[gw5] [ 28%] PASSED tests/api/test_nvram.py::test_osal_read_unexpected_value[too long too long too long -OsalNvIds.NWKKEY]
tests/api/test_response.py::test_response_matching_exact
[gw15] [ 28%] PASSED tests/api/test_request.py::test_callback_rsp_cleanup_concurrent
tests/api/test_request.py::test_handling_known_bad_command_parsing
tests/api/test_request.py::test_znp_unknown_frame
[gw11] [ 28%] PASSED tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedZStack3CC2531]
[gw10] [ 29%] PASSED tests/api/test_response.py::test_responses_multiple
[gw31] [ 29%] PASSED tests/api/test_request.py::test_znp_unknown_frame
tests/api/test_response.py::test_response_not_matching_out_of_order
tests/api/test_response.py::test_responses
[gw33] [ 29%] PASSED tests/api/test_response.py::test_responses
[gw34] [ 29%] PASSED tests/api/test_request.py::test_handling_known_bad_command_parsing
[gw32] [ 30%] PASSED tests/api/test_response.py::test_response_matching_exact
tests/api/test_response.py::test_response_timeouts
[gw19] [ 30%] PASSED tests/api/test_request.py::test_handling_unknown_bad_command_parsing
tests/api/test_network_state.py::test_write_settings_fast[FormedLaunchpadCC26X2R1]
[gw38] [ 30%] PASSED tests/api/test_response.py::test_response_not_matching_out_of_order
[gw27] [ 30%] PASSED tests/api/test_response.py::test_response_matching_partial
tests/api/test_response.py::test_wait_responses_empty
tests/application/test_connect.py::test_probe_unsuccessful
[gw35] [ 31%] PASSED tests/application/test_connect.py::test_probe_unsuccessful
tests/application/test_connect.py::test_no_double_connect
[gw37] [ 31%] PASSED tests/application/test_connect.py::test_no_double_connect
tests/api/test_response.py::test_wait_for_responses
tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedZStack3CC2531]
tests/application/test_connect.py::test_leak_detection
[gw59] [ 31%] PASSED tests/api/test_response.py::test_wait_responses_empty
tests/application/test_connect.py::test_probe_successful[FormedZStack1CC2531]
tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedZStack1CC2531]
tests/api/test_response.py::test_response_callback_simple
tests/application/test_connect.py::test_probe_multiple[FormedZStack3CC2531]
tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedZStack1CC2531]
tests/application/test_connect.py::test_probe_successful[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_probe_successful[FormedZStack3CC2531]
tests/api/test_network_state.py::test_write_settings_fast[FormedZStack1CC2531]
tests/application/test_connect.py::test_reconnect[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedZStack3CC2531]
[gw6] [ 31%] PASSED tests/api/test_request.py::test_cleanup_timeout_external
[gw54] [ 32%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetZStack1CC2531]
[gw61] [ 32%] PASSED tests/api/test_response.py::test_wait_for_responses
[gw7] [ 32%] PASSED tests/api/test_request.py::test_cleanup_timeout_internal
[gw0] [ 32%] PASSED tests/test_commands.py::test_command_setters
[gw50] [ 33%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetZStack1CC2531]
tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_shutdown_from_app[FormedLaunchpadCC26X2R1]
[gw44] [ 33%] PASSED tests/api/test_response.py::test_response_callback_simple
[gw40] [ 33%] PASSED tests/application/test_connect.py::test_leak_detection
[gw18] [ 33%] PASSED tests/api/test_request.py::test_callback_rsp_cleanup_timeout_internal[False]
tests/application/test_connect.py::test_probe_multiple[FormedLaunchpadCC26X2R1]
[gw1] [ 34%] PASSED tests/api/test_request.py::test_callback_rsp_cleanup_timeout_external
tests/api/test_network_state.py::test_write_settings_fast[ResetZStack3CC2531]
tests/application/test_connect.py::test_reconnect_lockup_pyserial[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join[FormedZStack3CC2531]
[gw21] [ 34%] PASSED tests/api/test_request.py::test_callback_rsp_cleanup_timeout_internal[True]
tests/application/test_connect.py::test_multiple_shutdown
tests/application/test_connect.py::test_shutdown_from_app[FormedZStack3CC2531]
tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedLaunchpadCC26X2R1]
[gw48] [ 34%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetZStack1CC2531]
tests/application/test_joining.py::test_join_device[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_disconnect[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_clean_shutdown
tests/application/test_joining.py::test_permit_join_with_invalid_key[FormedZStack3CC2531]
tests/application/test_connect.py::test_probe_multiple[FormedZStack1CC2531]
tests/application/test_joining.py::test_join_coordinator[FormedZStack1CC2531]
tests/application/test_joining.py::test_permit_join_with_key[permit_result1-FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join_with_key[None-FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_join_coordinator[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join_with_key[permit_result1-FormedZStack3CC2531]
tests/application/test_joining.py::test_permit_join_with_key[None-FormedZStack3CC2531]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join_with_invalid_key[FormedLaunchpadCC26X2R1]
tests/api/test_nvram.py::test_osal_read_unexpected_value[\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-OsalNvIds.NWKKEY]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedZStack1CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_on_zdo_device_join[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_reconnect_lockup[FormedZStack1CC2531]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_zigpy_request_failure[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_zigpy_request[FormedLaunchpadCC26X2R1]
[gw31] [ 34%] PASSED tests/application/test_joining.py::test_permit_join_with_invalid_key[FormedZStack3CC2531]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedZStack3CC2531]
tests/application/test_joining.py::test_on_zdo_device_join[FormedZStack3CC2531]
tests/application/test_connect.py::test_shutdown_from_app[FormedZStack1CC2531]
[gw63] [ 35%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedZStack1CC2531]
[gw57] [ 35%] PASSED tests/api/test_network_state.py::test_write_settings_fast[FormedLaunchpadCC26X2R1]
[gw13] [ 35%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedZStack1CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_reconnect_lockup[FormedLaunchpadCC26X2R1]
[gw0] [ 35%] PASSED tests/api/test_nvram.py::test_osal_read_unexpected_value[\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-OsalNvIds.NWKKEY]
[gw27] [ 36%] PASSED tests/application/test_joining.py::test_permit_join_with_invalid_key[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join[FormedLaunchpadCC26X2R1]
[gw15] [ 36%] PASSED tests/application/test_connect.py::test_disconnect[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_permit_join[FormedZStack1CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedLaunchpadCC26X2R1]
[gw60] [ 36%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedZStack3CC2531]
tests/application/test_requests.py::test_request_recovery_route_rediscovery_af[FormedLaunchpadCC26X2R1]
[gw12] [ 36%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow2[FormedLaunchpadCC26X2R1]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedZStack3CC2531]
[gw58] [ 37%] PASSED tests/api/test_network_state.py::test_write_settings_fast[FormedZStack1CC2531]
tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedZStack1CC2531]
tests/application/test_requests.py::test_zigpy_request[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_recovery_manual_source_route[relays0-False-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_cancellation_shielding[FormedZStack3CC2531]
tests/application/test_requests.py::test_request_addr_mode[addr1-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_addr_mode[addr1-FormedZStack1CC2531]
tests/application/test_requests.py::test_request_addr_mode[addr0-FormedZStack3CC2531]
[gw23] [ 37%] PASSED tests/api/test_nvram_migration.py::test_addrmgr_rewrite_fix[FormedZStack3CC2531]
tests/application/test_connect.py::test_reconnect[FormedZStack1CC2531]
[gw41] [ 37%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader[2]
tests/api/test_connect.py::test_connect_skip_bootloader[3]
[gw56] [ 37%] PASSED tests/api/test_network_state.py::test_write_settings_fast[ResetZStack3CC2531]
tests/application/test_requests.py::test_mrequest[FormedZStack3CC2531]
[gw56] [ 38%] PASSED tests/application/test_requests.py::test_mrequest[FormedZStack3CC2531]
tests/application/test_startup.py::test_not_configured[ResetZStack3CC2531]
[gw51] [ 38%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedZStack3CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedZStack1CC2531]
[gw56] [ 38%] PASSED tests/application/test_startup.py::test_not_configured[ResetZStack3CC2531]
tests/application/test_startup.py::test_not_configured[ResetZStack1CC2531]
[gw26] [ 38%] PASSED tests/api/test_request.py::test_znp_sreq_srsp
tests/application/test_joining.py::test_join_coordinator[FormedZStack3CC2531]
[gw56] [ 39%] PASSED tests/application/test_startup.py::test_not_configured[ResetZStack1CC2531]
tests/application/test_startup.py::test_reset[FormedZStack3CC2531]
[gw62] [ 39%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedZStack3CC2531]
[gw29] [ 39%] PASSED tests/application/test_connect.py::test_probe_successful[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_chosen_dst_endpoint[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_zigpy_request[FormedZStack3CC2531]
[gw47] [ 39%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedZStack3CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedZStack1CC2531]
[gw9] [ 40%] PASSED tests/application/test_connect.py::test_probe_successful[FormedZStack3CC2531]
tests/application/test_requests.py::test_request_addr_mode[addr0-FormedLaunchpadCC26X2R1]
[gw8] [ 40%] PASSED tests/application/test_connect.py::test_probe_successful[FormedZStack1CC2531]
tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack3CC2531]
[gw45] [ 40%] PASSED tests/application/test_connect.py::test_probe_unsuccessful_slow1[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_nonstandard_profile[FormedLaunchpadCC26X2R1]
[gw53] [ 40%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedZStack3CC2531]
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedZStack1CC2531]
[gw36] [ 40%] PASSED tests/api/test_response.py::test_response_timeouts
tests/application/test_joining.py::test_on_zdo_device_join[FormedZStack1CC2531]
[gw55] [ 41%] PASSED tests/api/test_network_state.py::test_state_write_tclk_zstack3[FormedZStack3CC2531]
tests/application/test_connect.py::test_reconnect[FormedZStack3CC2531]
[gw39] [ 41%] PASSED tests/test_utils.py::test_combine_concurrent_calls
tests/api/test_response.py::test_response_callbacks
[gw51] [ 41%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedZStack1CC2531]
tests/application/test_startup.py::test_reset[FormedLaunchpadCC26X2R1]
[gw47] [ 41%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedZStack1CC2531]
tests/application/test_startup.py::test_tx_power[False-FormedLaunchpadCC26X2R1]
[gw39] [ 42%] PASSED tests/api/test_response.py::test_response_callbacks
[gw53] [ 42%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedZStack1CC2531]
tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-off]
tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-False]
[gw3] [ 42%] PASSED tests/api/test_request.py::test_callback_rsp_background_timeout
tests/application/test_connect.py::test_disconnect_failure[FormedLaunchpadCC26X2R1]
[gw3] [ 42%] PASSED tests/application/test_connect.py::test_disconnect_failure[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-False]
[gw42] [ 43%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader_batched_rsp
tests/api/test_connect.py::test_connect_skip_bootloader_failure
[gw20] [ 43%] PASSED tests/api/test_nvram_migration.py::test_addrmgr_empty_entries[FormedLaunchpadCC26X2R1]
tests/application/test_connect.py::test_reconnect_lockup[FormedZStack3CC2531]
[gw41] [ 43%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader[3]
tests/application/test_startup.py::test_not_configured[ResetLaunchpadCC26X2R1]
[gw41] [ 43%] PASSED tests/application/test_startup.py::test_not_configured[ResetLaunchpadCC26X2R1]
[gw17] [ 44%] PASSED tests/application/test_connect.py::test_probe_multiple[FormedZStack3CC2531]
tests/application/test_startup.py::test_auto_form_unnecessary[FormedZStack3CC2531]
tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack1CC2531]
[gw11] [ 44%] PASSED tests/application/test_connect.py::test_probe_multiple[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_cancellation_shielding[FormedZStack1CC2531]
[gw2] [ 44%] PASSED tests/application/test_connect.py::test_probe_multiple[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_mrequest[FormedLaunchpadCC26X2R1]
[gw2] [ 44%] PASSED tests/application/test_requests.py::test_mrequest[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_auto_form_necessary[ResetZStack1CC2531]
[gw6] [ 45%] PASSED tests/application/test_connect.py::test_reconnect_lockup[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedZStack1CC2531]
[gw47] [ 45%] PASSED tests/application/test_startup.py::test_tx_power[False-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-on]
[gw49] [ 45%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetLaunchpadCC26X2R1]
tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetZStack3CC2531]
[gw23] [ 45%] PASSED tests/application/test_connect.py::test_reconnect[FormedZStack1CC2531]
tests/application/test_startup.py::test_endpoints[FormedZStack1CC2531]
[gw46] [ 46%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetLaunchpadCC26X2R1]
tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetZStack3CC2531]
[gw52] [ 46%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetLaunchpadCC26X2R1]
tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetZStack3CC2531]
[gw50] [ 46%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_manual_source_route[relays1-True-FormedLaunchpadCC26X2R1]
[gw54] [ 46%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedLaunchpadCC26X2R1]
[gw55] [ 47%] PASSED tests/application/test_connect.py::test_reconnect[FormedZStack3CC2531]
tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-True]
[gw49] [ 47%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack3CC2531-ResetZStack3CC2531]
tests/application/test_startup.py::test_reset_network_info[ResetZStack3CC2531]
[gw48] [ 47%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-FormedLaunchpadCC26X2R1]
[gw46] [ 47%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedLaunchpadCC26X2R1-ResetZStack3CC2531]
tests/application/test_requests.py::test_send_packet_failure[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_reset_network_info[FormedLaunchpadCC26X2R1]
[gw49] [ 48%] PASSED tests/application/test_startup.py::test_reset_network_info[ResetZStack3CC2531]
tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-False]
[gw46] [ 48%] PASSED tests/application/test_startup.py::test_reset_network_info[FormedLaunchpadCC26X2R1]
tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-True-1-False]
[gw52] [ 48%] PASSED tests/api/test_network_state.py::test_state_transfer[FormedZStack1CC2531-ResetZStack3CC2531]
tests/application/test_startup.py::test_reset_network_info[FormedZStack3CC2531]
[gw20] [ 48%] PASSED tests/application/test_connect.py::test_reconnect_lockup[FormedZStack3CC2531]
tests/application/test_startup.py::test_auto_form_unnecessary[FormedLaunchpadCC26X2R1]
[gw52] [ 49%] PASSED tests/application/test_startup.py::test_reset_network_info[FormedZStack3CC2531]
tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedZStack3CC2531]
[gw30] [ 49%] PASSED tests/application/test_connect.py::test_reconnect_lockup_pyserial[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_mrequest_doesnt_block[FormedLaunchpadCC26X2R1]
[gw18] [ 49%] PASSED tests/application/test_connect.py::test_reconnect_lockup[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedLaunchpadCC26X2R1]
[gw4] [ 49%] PASSED tests/application/test_connect.py::test_reconnect[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_addr_mode[addr0-FormedZStack1CC2531]
[gw42] [ 50%] PASSED tests/api/test_connect.py::test_connect_skip_bootloader_failure
tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-True]
[gw14] [ 50%] PASSED tests/application/test_connect.py::test_shutdown_from_app[FormedZStack3CC2531]
tests/application/test_requests.py::test_broadcast[FormedLaunchpadCC26X2R1]
[gw28] [ 50%] PASSED tests/application/test_joining.py::test_join_coordinator[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_cancellation_shielding[FormedLaunchpadCC26X2R1]
[gw58] [ 50%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr0-FormedZStack3CC2531]
tests/application/test_startup.py::test_endpoints[FormedZStack3CC2531]
[gw7] [ 51%] PASSED tests/application/test_connect.py::test_shutdown_from_app[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_recovery_manual_source_route[relays0-True-FormedLaunchpadCC26X2R1]
[gw12] [ 51%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr1-FormedZStack1CC2531]
tests/application/test_startup.py::test_endpoints[FormedLaunchpadCC26X2R1]
[gw34] [ 51%] PASSED tests/application/test_joining.py::test_permit_join_with_key[permit_result1-FormedZStack3CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedLaunchpadCC26X2R1]
[gw38] [ 51%] PASSED tests/application/test_joining.py::test_on_zdo_device_join[FormedZStack3CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedLaunchpadCC26X2R1]
[gw26] [ 52%] PASSED tests/application/test_joining.py::test_join_coordinator[FormedZStack3CC2531]
tests/application/test_startup.py::test_reset[FormedZStack1CC2531]
[gw13] [ 52%] FAILED tests/application/test_requests.py::test_zigpy_request[FormedZStack1CC2531]
tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedZStack3CC2531]
[gw56] [ 52%] PASSED tests/application/test_startup.py::test_reset[FormedZStack3CC2531]
tests/application/test_startup.py::test_tx_power[True-FormedLaunchpadCC26X2R1]
[gw29] [ 52%] FAILED tests/application/test_requests.py::test_zigpy_request[FormedZStack3CC2531]
tests/application/test_startup.py::test_tx_power[True-FormedZStack1CC2531]
[gw36] [ 53%] PASSED tests/application/test_joining.py::test_on_zdo_device_join[FormedZStack1CC2531]
tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-on]
[gw15] [ 53%] PASSED tests/application/test_requests.py::test_request_cancellation_shielding[FormedZStack3CC2531]
tests/application/test_startup.py::test_info[FormedZStack3CC2531-CC2531, Z-Stack 3.0.x (build 20190425)-15-Channels.CHANNEL_15-46763-ext_pan_id1-network_key1]
[gw39] [ 53%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-off]
tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-True]
[gw3] [ 53%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-False]
tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-on]
[gw8] [ 54%] FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack3CC2531]
tests/application/test_startup.py::test_tx_power[False-FormedZStack1CC2531]
[gw19] [ 54%] PASSED tests/application/test_joining.py::test_permit_join_with_key[None-FormedZStack3CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedZStack1CC2531]
[gw5] [ 54%] PASSED tests/application/test_connect.py::test_clean_shutdown
tests/application/test_requests.py::test_nonstandard_profile[FormedZStack1CC2531]
[gw25] [ 54%] PASSED tests/application/test_connect.py::test_multiple_shutdown
tests/application/test_requests.py::test_request_concurrency[FormedLaunchpadCC26X2R1]
[gw41] [ 55%] PASSED tests/application/test_startup.py::test_auto_form_unnecessary[FormedZStack3CC2531]
tests/application/test_startup.py::test_auto_form_unnecessary[FormedZStack1CC2531]
[gw33] [ 55%] PASSED tests/application/test_joining.py::test_permit_join_with_key[permit_result1-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_use_ieee_addr[FormedLaunchpadCC26X2R1]
[gw6] [ 55%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedZStack1CC2531]
tests/application/test_startup.py::test_deprecated_concurrency_config[FormedLaunchpadCC26X2R1]
[gw6] [ 55%] PASSED tests/application/test_startup.py::test_deprecated_concurrency_config[FormedLaunchpadCC26X2R1]
tests/tools/test_flash.py::test_flash_backup_write[True]
[gw6] [ 56%] PASSED tests/tools/test_flash.py::test_flash_backup_write[True]
tests/tools/test_flash.py::test_flash_write_bad_crc
[gw6] [ 56%] PASSED tests/tools/test_flash.py::test_flash_write_bad_crc
tests/tools/test_flash.py::test_flash_write_bad_size
[gw6] [ 56%] PASSED tests/tools/test_flash.py::test_flash_write_bad_size
tests/tools/test_logging.py::test_logging_level_parser[0-20]
[gw6] [ 56%] PASSED tests/tools/test_logging.py::test_logging_level_parser[0-20]
tests/tools/test_logging.py::test_logging_level_parser[1-10]
[gw6] [ 57%] PASSED tests/tools/test_logging.py::test_logging_level_parser[1-10]
tests/tools/test_logging.py::test_logging_level_parser[2-5]
[gw6] [ 57%] PASSED tests/tools/test_logging.py::test_logging_level_parser[2-5]
tests/tools/test_logging.py::test_command_close_stdout
[gw17] [ 57%] FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack1CC2531]
[gw16] [ 57%] PASSED tests/application/test_joining.py::test_join_coordinator[FormedLaunchpadCC26X2R1]
[gw6] [ 58%] PASSED tests/tools/test_logging.py::test_command_close_stdout
tests/tools/test_network_backup_restore.py::test_schema_validation
tests/application/test_startup.py::test_auto_form_necessary[ResetLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_route_rediscovery_zdo[FormedLaunchpadCC26X2R1]
[gw6] [ 58%] PASSED tests/tools/test_network_backup_restore.py::test_schema_validation
tests/tools/test_network_backup_restore.py::test_schema_validation_device_key_info
[gw6] [ 58%] PASSED tests/tools/test_network_backup_restore.py::test_schema_validation_device_key_info
tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetZStack3CC2531]
[gw24] [ 58%] PASSED tests/application/test_connect.py::test_shutdown_from_app[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_addr_mode[addr1-FormedZStack3CC2531]
[gw6] [ 59%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetZStack3CC2531]
tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetZStack1CC2531]
[gw60] [ 59%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr1-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_info[FormedZStack1CC2531-CC2531, Z-Stack Home 1.2 (build 20190608)-11-Channels.CHANNEL_11-6754-ext_pan_id2-network_key2]
[gw47] [ 59%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-on]
[gw6] [ 59%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetZStack1CC2531]
tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_reset_network_info[ResetLaunchpadCC26X2R1]
[gw32] [ 60%] PASSED tests/application/test_joining.py::test_on_zdo_device_join[FormedLaunchpadCC26X2R1]
[gw47] [ 60%] PASSED tests/application/test_startup.py::test_reset_network_info[ResetLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedZStack1CC2531]
[gw40] [ 60%] FAILED tests/application/test_requests.py::test_zigpy_request[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_route_discovery_concurrency[FormedLaunchpadCC26X2R1]
[gw47] [ 60%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedZStack1CC2531]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetZStack3CC2531]
[gw45] [ 60%] PASSED tests/application/test_requests.py::test_nonstandard_profile[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-off]
[gw11] [ 61%] PASSED tests/application/test_requests.py::test_request_cancellation_shielding[FormedZStack1CC2531]
tests/application/test_startup.py::test_auto_form_necessary[ResetZStack3CC2531]
[gw23] [ 61%] PASSED tests/application/test_startup.py::test_endpoints[FormedZStack1CC2531]
tests/application/test_startup.py::test_reset_network_info[ResetZStack1CC2531]
[gw23] [ 61%] PASSED tests/application/test_startup.py::test_reset_network_info[ResetZStack1CC2531]
tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack1
[gw62] [ 61%] PASSED tests/application/test_requests.py::test_chosen_dst_endpoint[FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_tx_power[True-FormedZStack3CC2531]
[gw23] [ 62%] PASSED tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack1
tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack30
[gw9] [ 62%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr0-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_tx_power[False-FormedZStack3CC2531]
[gw44] [ 62%] FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_manual_source_route[relays1-False-FormedLaunchpadCC26X2R1]
[gw23] [ 62%] PASSED tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack30
[gw51] [ 63%] PASSED tests/application/test_startup.py::test_reset[FormedLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_seed_candidate_finding_simple
tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-False]
[gw23] [ 63%] PASSED tests/tools/test_network_backup_restore.py::test_seed_candidate_finding_simple
tests/tools/test_network_scan.py::test_network_scan_failure[FormedLaunchpadCC26X2R1]
[gw53] [ 63%] PASSED tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-False]
tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-off]
[gw23] [ 63%] PASSED tests/tools/test_network_scan.py::test_network_scan_failure[FormedLaunchpadCC26X2R1]
tests/tools/test_network_scan.py::test_network_scan_nib_clear[FormedZStack1CC2531]
[gw23] [ 64%] PASSED tests/tools/test_network_scan.py::test_network_scan_nib_clear[FormedZStack1CC2531]
tests/tools/test_nvram.py::test_nvram_read[ResetLaunchpadCC26X2R1]
[gw0] [ 64%] PASSED tests/application/test_requests.py::test_request_recovery_manual_source_route[relays0-False-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedZStack1CC2531]
[gw47] [ 64%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetZStack3CC2531]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedZStack3CC2531]
[gw10] [ 64%] PASSED tests/application/test_joining.py::test_permit_join_with_key[None-FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedZStack3CC2531]
[gw52] [ 65%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedZStack3CC2531]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedLaunchpadCC26X2R1]
[gw27] [ 65%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_info[FormedLaunchpadCC26X2R1-CC1352/CC2652, Z-Stack 3.30+ (build 20220219)-15-Channels.CHANNEL_15-17410-ext_pan_id0-network_key0]
[gw47] [ 65%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedZStack3CC2531]
tests/tools/test_nvram.py::test_nvram_read[FormedLaunchpadCC26X2R1]
[gw4] [ 65%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr0-FormedZStack1CC2531]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedLaunchpadCC26X2R1]
[gw23] [ 66%] PASSED tests/tools/test_nvram.py::test_nvram_read[ResetLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_read[ResetZStack3CC2531]
[gw6] [ 66%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetLaunchpadCC26X2R1]
[gw50] [ 66%] PASSED tests/application/test_requests.py::test_request_recovery_manual_source_route[relays1-True-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_reset_network_info[FormedZStack1CC2531]
[gw50] [ 66%] PASSED tests/application/test_startup.py::test_reset_network_info[FormedZStack1CC2531]
tests/tools/test_nvram.py::test_nvram_write[FormedZStack1CC2531]
[gw55] [ 67%] PASSED tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-True]
tests/application/test_startup.py::test_concurrency_auto_config[FormedZStack1CC2531-2]
[gw20] [ 67%] PASSED tests/application/test_startup.py::test_auto_form_unnecessary[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedZStack1CC2531]
[gw55] [ 67%] PASSED tests/application/test_startup.py::test_concurrency_auto_config[FormedZStack1CC2531-2]
tests/tools/test_nvram.py::test_nvram_reset[ResetZStack3CC2531]
[gw23] [ 67%] PASSED tests/tools/test_nvram.py::test_nvram_read[ResetZStack3CC2531]
tests/tools/test_nvram.py::test_nvram_write[FormedLaunchpadCC26X2R1]
[gw50] [ 68%] PASSED tests/tools/test_nvram.py::test_nvram_write[FormedZStack1CC2531]
tests/tools/test_nvram.py::test_nvram_reset[ResetLaunchpadCC26X2R1]
[gw30] [ 68%] PASSED tests/application/test_requests.py::test_mrequest_doesnt_block[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedZStack3CC2531]
[gw18] [ 68%] PASSED tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedZStack1CC2531]
[gw31] [ 68%] PASSED tests/application/test_requests.py::test_request_recovery_route_rediscovery_af[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_send_packet_failure[FormedZStack3CC2531]
[gw55] [ 69%] PASSED tests/tools/test_nvram.py::test_nvram_reset[ResetZStack3CC2531]
tests/tools/test_nvram.py::test_nvram_reset[FormedLaunchpadCC26X2R1]
[gw54] [ 69%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedLaunchpadCC26X2R1]
tests/application/test_startup.py::test_concurrency_auto_config[FormedLaunchpadCC26X2R1-16]
[gw50] [ 69%] PASSED tests/tools/test_nvram.py::test_nvram_reset[ResetLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_reset[FormedZStack1CC2531]
[gw47] [ 69%] PASSED tests/tools/test_nvram.py::test_nvram_read[FormedLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_write[ResetZStack3CC2531]
[gw22] [ 70%] FAILED tests/application/test_joining.py::test_join_device[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_nonstandard_profile[FormedZStack3CC2531]
[gw50] [ 70%] PASSED tests/tools/test_nvram.py::test_nvram_reset[FormedZStack1CC2531]
[gw47] [ 70%] PASSED tests/tools/test_nvram.py::test_nvram_write[ResetZStack3CC2531]
[gw55] [ 70%] PASSED tests/tools/test_nvram.py::test_nvram_reset[FormedLaunchpadCC26X2R1]
[gw54] [ 71%] PASSED tests/application/test_startup.py::test_concurrency_auto_config[FormedLaunchpadCC26X2R1-16]
[gw48] [ 71%] PASSED tests/application/test_requests.py::test_send_packet_failure[FormedLaunchpadCC26X2R1]
tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-True]
[gw6] [ 71%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_write[FormedZStack3CC2531]
[gw23] [ 71%] PASSED tests/tools/test_nvram.py::test_nvram_write[FormedLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_reset[FormedZStack3CC2531]
[gw42] [ 72%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-True]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedZStack3CC2531]
[gw23] [ 72%] PASSED tests/tools/test_nvram.py::test_nvram_reset[FormedZStack3CC2531]
[gw6] [ 72%] PASSED tests/tools/test_nvram.py::test_nvram_write[FormedZStack3CC2531]
[gw57] [ 72%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedZStack1CC2531]
[gw37] [ 73%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedZStack3CC2531]
tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedZStack3CC2531]
[gw61] [ 73%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedZStack1CC2531]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedZStack3CC2531]
[gw63] [ 73%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedZStack3CC2531]
tests/application/test_requests.py::test_send_packet_failure[FormedZStack1CC2531]
[gw46] [ 73%] FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-True-1-False]
tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedLaunchpadCC26X2R1]
[gw49] [ 74%] FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-False]
tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-200-True]
[gw58] [ 74%] PASSED tests/application/test_startup.py::test_endpoints[FormedZStack3CC2531]
tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedZStack3CC2531]
[gw26] [ 74%] PASSED tests/application/test_startup.py::test_reset[FormedZStack1CC2531]
tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedLaunchpadCC26X2R1]
[gw13] [ 74%] PASSED tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedZStack3CC2531]
tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedZStack3CC2531]
[gw29] [ 75%] PASSED tests/application/test_startup.py::test_tx_power[True-FormedZStack1CC2531]
tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedLaunchpadCC26X2R1]
[gw15] [ 75%] PASSED tests/application/test_startup.py::test_info[FormedZStack3CC2531-CC2531, Z-Stack 3.0.x (build 20190425)-15-Channels.CHANNEL_15-46763-ext_pan_id1-network_key1]
tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedZStack1CC2531]
[gw8] [ 75%] PASSED tests/application/test_startup.py::test_tx_power[False-FormedZStack1CC2531]
tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetZStack3CC2531]
[gw39] [ 75%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-True]
tests/tools/test_common.py::test_unclosable_file
[gw39] [ 76%] PASSED tests/tools/test_common.py::test_unclosable_file
[gw8] [ 76%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetZStack3CC2531]
[gw3] [ 76%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-on]
tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetLaunchpadCC26X2R1]
[gw59] [ 76%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_slow[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedZStack1CC2531]
[gw3] [ 77%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetLaunchpadCC26X2R1]
[gw35] [ 77%] PASSED tests/application/test_joining.py::test_on_zdo_device_join_and_announce_fast[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedZStack3CC2531]
[gw19] [ 77%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedZStack1CC2531]
tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetZStack1CC2531]
[gw19] [ 77%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_unformed[ResetZStack1CC2531]
[gw5] [ 78%] PASSED tests/application/test_requests.py::test_nonstandard_profile[FormedZStack1CC2531]
tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedLaunchpadCC26X2R1]
[gw41] [ 78%] PASSED tests/application/test_startup.py::test_auto_form_unnecessary[FormedZStack1CC2531]
tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedZStack1CC2531]
[gw7] [ 78%] PASSED tests/application/test_requests.py::test_request_recovery_manual_source_route[relays0-True-FormedLaunchpadCC26X2R1]
[gw14] [ 78%] PASSED tests/application/test_requests.py::test_broadcast[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedZStack1CC2531]
tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedZStack1CC2531]
[gw12] [ 79%] PASSED tests/application/test_startup.py::test_endpoints[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedLaunchpadCC26X2R1]
[gw2] [ 79%] PASSED tests/application/test_startup.py::test_auto_form_necessary[ResetZStack1CC2531]
tests/application/test_startup.py::test_zstack_build_id_empty[FormedZStack1CC2531]
[gw56] [ 79%] PASSED tests/application/test_startup.py::test_tx_power[True-FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedZStack1CC2531]
[gw60] [ 79%] PASSED tests/application/test_startup.py::test_info[FormedZStack1CC2531-CC2531, Z-Stack Home 1.2 (build 20190608)-11-Channels.CHANNEL_11-6754-ext_pan_id2-network_key2]
tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedZStack3CC2531]
[gw41] [ 80%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedZStack1CC2531]
[gw24] [ 80%] PASSED tests/application/test_requests.py::test_request_addr_mode[addr1-FormedZStack3CC2531]
tests/tools/test_network_backup_restore.py::test_network_backup_pipe[FormedZStack1CC2531]
[gw32] [ 80%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedZStack1CC2531]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetZStack1CC2531]
[gw24] [ 80%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_pipe[FormedZStack1CC2531]
[gw60] [ 80%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_formed[FormedZStack3CC2531]
[gw28] [ 81%] PASSED tests/application/test_requests.py::test_request_cancellation_shielding[FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedLaunchpadCC26X2R1]
[gw32] [ 81%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[ResetZStack1CC2531]
[gw53] [ 81%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack1CC2531-off]
[gw51] [ 81%] PASSED tests/application/test_startup.py::test_led_mode[FormedZStack3CC2531-False]
tests/tools/test_network_scan.py::test_network_scan_nib_clear[FormedLaunchpadCC26X2R1]
tests/tools/test_network_scan.py::test_network_scan_duplicates[FormedLaunchpadCC26X2R1]
[gw9] [ 82%] PASSED tests/application/test_startup.py::test_tx_power[False-FormedZStack3CC2531]
[gw36] [ 82%] PASSED tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-on]
tests/tools/test_network_backup_restore.py::test_seed_candidate_finding_complex
tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedZStack3CC2531]
[gw62] [ 82%] PASSED tests/application/test_startup.py::test_tx_power[True-FormedZStack3CC2531]
tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack33
[gw5] [ 82%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedLaunchpadCC26X2R1]
[gw62] [ 83%] PASSED tests/tools/test_network_backup_restore.py::test_nwk_frame_counter_zstack33
[gw51] [ 83%] PASSED tests/tools/test_network_scan.py::test_network_scan_duplicates[FormedLaunchpadCC26X2R1]
[gw53] [ 83%] PASSED tests/tools/test_network_scan.py::test_network_scan_nib_clear[FormedLaunchpadCC26X2R1]
[gw9] [ 83%] PASSED tests/tools/test_network_backup_restore.py::test_seed_candidate_finding_complex
[gw34] [ 84%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedZStack3CC2531]
[gw0] [ 84%] PASSED tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedZStack1CC2531]
tests/tools/test_nvram.py::test_nvram_read[ResetZStack1CC2531]
[gw10] [ 84%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-True-FormedZStack3CC2531]
tests/tools/test_nvram.py::test_nvram_read[FormedZStack3CC2531]
[gw0] [ 84%] PASSED tests/tools/test_nvram.py::test_nvram_read[ResetZStack1CC2531]
[gw45] [ 85%] PASSED tests/application/test_startup.py::test_led_mode[FormedLaunchpadCC26X2R1-off]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedZStack1CC2531]
[gw45] [ 85%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedZStack1CC2531]
[gw10] [ 85%] PASSED tests/tools/test_nvram.py::test_nvram_read[FormedZStack3CC2531]
[gw25] [ 85%] PASSED tests/application/test_requests.py::test_request_concurrency[FormedLaunchpadCC26X2R1]
tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedZStack3CC2531]
[gw38] [ 86%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedLaunchpadCC26X2R1]
tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedZStack1CC2531]
[gw25] [ 86%] PASSED tests/tools/test_energy_scan.py::test_energy_scan_formed[FormedZStack3CC2531]
[gw44] [ 86%] PASSED tests/application/test_requests.py::test_request_recovery_manual_source_route[relays1-False-FormedLaunchpadCC26X2R1]
[gw20] [ 86%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedZStack1CC2531]
tests/tools/test_network_scan.py::test_network_scan[FormedLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_reset[ResetZStack1CC2531]
[gw27] [ 87%] PASSED tests/application/test_startup.py::test_info[FormedLaunchpadCC26X2R1-CC1352/CC2652, Z-Stack 3.30+ (build 20220219)-15-Channels.CHANNEL_15-17410-ext_pan_id0-network_key0]
tests/tools/test_nvram.py::test_nvram_write[ResetLaunchpadCC26X2R1]
[gw44] [ 87%] PASSED tests/tools/test_network_scan.py::test_network_scan[FormedLaunchpadCC26X2R1]
[gw4] [ 87%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_write[ResetZStack1CC2531]
[gw20] [ 87%] PASSED tests/tools/test_nvram.py::test_nvram_reset[ResetZStack1CC2531]
[gw4] [ 88%] PASSED tests/tools/test_nvram.py::test_nvram_write[ResetZStack1CC2531]
[gw40] [ 88%] PASSED tests/application/test_requests.py::test_route_discovery_concurrency[FormedLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedLaunchpadCC26X2R1]
[gw22] [ 88%] PASSED tests/application/test_requests.py::test_nonstandard_profile[FormedZStack3CC2531]
[gw27] [ 88%] PASSED tests/tools/test_nvram.py::test_nvram_write[ResetLaunchpadCC26X2R1]
[gw33] [ 89%] PASSED tests/application/test_requests.py::test_request_recovery_use_ieee_addr[FormedLaunchpadCC26X2R1]
tests/tools/test_flash.py::test_flash_backup_write[False]
[gw33] [ 89%] PASSED tests/tools/test_flash.py::test_flash_backup_write[False]
[gw31] [ 89%] PASSED tests/application/test_requests.py::test_send_packet_failure[FormedZStack3CC2531]
[gw16] [ 89%] FAILED tests/application/test_requests.py::test_request_recovery_route_rediscovery_zdo[FormedLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetLaunchpadCC26X2R1]
[gw16] [ 90%] PASSED tests/tools/test_network_backup_restore.py::test_network_backup_empty[ResetLaunchpadCC26X2R1]
[gw42] [ 90%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedZStack3CC2531]
[gw40] [ 90%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_and_backup[FormedLaunchpadCC26X2R1]
[gw37] [ 90%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedZStack3CC2531]
[gw61] [ 91%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-False-FormedZStack3CC2531]
[gw13] [ 91%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedZStack3CC2531]
[gw57] [ 91%] PASSED tests/application/test_requests.py::test_send_packet_failure_disconnected[FormedLaunchpadCC26X2R1]
[gw58] [ 91%] PASSED tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedZStack3CC2531]
[gw15] [ 92%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedZStack1CC2531]
[gw59] [ 92%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.APS_NO_ACK-True-FormedZStack1CC2531]
[gw46] [ 92%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_relays_message_callback[FormedLaunchpadCC26X2R1]
[gw35] [ 92%] PASSED tests/application/test_requests.py::test_request_recovery_assoc_remove[Status.SUCCESS-False-FormedZStack3CC2531]
[gw14] [ 93%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_leave_callback[FormedZStack1CC2531]
[gw26] [ 93%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedLaunchpadCC26X2R1]
[gw56] [ 93%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_broadcast[FormedZStack1CC2531]
[gw2] [ 93%] PASSED tests/application/test_startup.py::test_zstack_build_id_empty[FormedZStack1CC2531]
[gw7] [ 94%] PASSED tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedZStack1CC2531]
[gw29] [ 94%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedLaunchpadCC26X2R1]
[gw63] [ 94%] PASSED tests/application/test_requests.py::test_send_packet_failure[FormedZStack1CC2531]
[gw36] [ 94%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_af_group[FormedZStack3CC2531]
[gw11] [ 95%] PASSED tests/application/test_startup.py::test_auto_form_necessary[ResetZStack3CC2531]
tests/tools/test_network_backup_restore.py::test_network_restore_pick_optimal_tclk[ResetLaunchpadCC26X2R1]
[gw34] [ 95%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedZStack3CC2531]
[gw12] [ 95%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedLaunchpadCC26X2R1]
[gw52] [ 95%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedLaunchpadCC26X2R1]
tests/tools/test_nvram.py::test_nvram_read[FormedZStack1CC2531]
[gw30] [ 96%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedZStack3CC2531]
tests/tools/test_nvram.py::test_nvram_reset_clear[FormedLaunchpadCC26X2R1]
[gw28] [ 96%] PASSED tests/application/test_zigpy_callbacks.py::test_on_af_message_callback[FormedLaunchpadCC26X2R1]
[gw18] [ 96%] PASSED tests/application/test_zigpy_callbacks.py::test_on_zdo_device_announce_nwk_change[FormedZStack1CC2531]
[gw52] [ 96%] PASSED tests/tools/test_nvram.py::test_nvram_read[FormedZStack1CC2531]
[gw38] [ 97%] PASSED tests/application/test_zigpy_callbacks.py::test_receive_zdo_broadcast[FormedZStack1CC2531]
[gw17] [ 97%] PASSED tests/application/test_startup.py::test_auto_form_necessary[ResetLaunchpadCC26X2R1]
tests/tools/test_network_backup_restore.py::test_schema_validation_counters
[gw17] [ 97%] PASSED tests/tools/test_network_backup_restore.py::test_schema_validation_counters
[gw48] [ 97%] FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-True]
[gw30] [ 98%] PASSED tests/tools/test_nvram.py::test_nvram_reset_clear[FormedLaunchpadCC26X2R1]
[gw11] [ 98%] PASSED tests/tools/test_network_backup_restore.py::test_network_restore_pick_optimal_tclk[ResetLaunchpadCC26X2R1]
[gw49] [ 98%] FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-200-True]
[gw43] [ 98%] FAILED tests/application/test_joining.py::test_permit_join[FormedZStack3CC2531]
tests/application/test_requests.py::test_mrequest[FormedZStack1CC2531]
[gw43] [ 99%] PASSED tests/application/test_requests.py::test_mrequest[FormedZStack1CC2531]
[gw21] [ 99%] FAILED tests/application/test_joining.py::test_permit_join[FormedZStack1CC2531]
[gw1] [ 99%] FAILED tests/application/test_joining.py::test_permit_join[FormedLaunchpadCC26X2R1]
tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedZStack1CC2531]
tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedZStack3CC2531]
[gw21] [ 99%] PASSED tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedZStack1CC2531]
[gw1] [100%] PASSED tests/application/test_requests.py::test_send_security_and_packet_source_route[FormedZStack3CC2531] Task was destroyed but it is pending!
task: <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wait_for=<Task pending name='Task-5' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>
Task was destroyed but it is pending!
task: <Task pending name='Task-587' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-586' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-582' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-4' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-692' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-693' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wait_for=<Task pending name='Task-5' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>
Task was destroyed but it is pending!
task: <Task pending name='Task-77' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-76' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-72' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-182' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-183' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-701' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-702' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-679' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-204' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-580' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-585' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-584' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-684' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-85' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-78' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-82' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-74' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-79' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-763' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-781' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-667' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-189' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-190' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-581' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-167' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-585' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-586' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-591' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1238' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1814' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1818' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1819' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-202' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-198' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-199' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-176' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-713' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-690' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1168' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1172' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-82' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1173' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1177' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-76' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-72' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-77' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1271' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-155' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-742' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-746' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-747' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-678' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-114' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1262' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1266' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1267' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-311' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1284' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-80' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-73' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-77' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-69' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-98' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-74' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-92' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-88' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-93' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-240' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1241' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1817' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1821' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1822' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2444' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2418' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1842' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future finished result=ZDO.MgmtNWKUp...erAddr=0x0000)>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2422' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2423' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2442' coro=<CatchingTaskMixin.catching_coro() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/util.py:310> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-713' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1269' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-738' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-196' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-832' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-946' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-947' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-768' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-6' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wait_for=<Task pending name='Task-8' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-8' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>
Task was destroyed but it is pending!
task: <Task pending name='Task-77' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-76' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-72' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-716' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-680' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-582' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-586' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:200> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-587' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-590' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-593' coro=<BaseServerZNP.reply_to.<locals>.callback() running at /build/source/tests/conftest.py:339> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-260' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2298' coro=<ControllerApplication._watchdog_loop() done, defined at /build/source/zigpy_znp/zigbee/application.py:639> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-278' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-282' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-283' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-799' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-755' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-1731' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future finished result=ZDO.MgmtNWKUp...erAddr=0x0000)>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2307' coro=<ControllerApplication._watchdog_loop() running at /build/source/zigpy_znp/zigbee/application.py:647> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2311' coro=<BackupManager._backup_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/backups.py:205> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2312' coro=<Topology._scan_loop() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/topology.py:66> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-2331' coro=<CatchingTaskMixin.catching_coro() running at /nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/util.py:310> wait_for=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
=================================== FAILURES ===================================
___________________ test_zigpy_request[FormedZStack1CC2531] ____________________
[gw13] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff44884c0>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request(device, make_application):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.status = zigpy.endpoint.Status.ZDO_INIT
ep.profile_id = 260
ep.add_input_cluster(6)
# Respond to a light turn on request
data_req = znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.SUCCESS,
Endpoint=1,
TSN=TSN,
),
c.ZDO.SrcRtgInd.Callback(DstAddr=device.nwk, Relays=[]),
c.AF.IncomingMsg.Callback(
GroupId=0x0000,
ClusterId=6,
SrcAddr=device.nwk,
SrcEndpoint=1,
DstEndpoint=1,
WasBroadcast=False,
LQI=63,
SecurityUse=False,
TimeStamp=1198515,
TSN=0,
Data=bytes([0x08, TSN, 0x0B, 0x00, 0x00]),
MacSrcAddr=device.nwk,
MsgResultRadius=29,
),
],
)
# Turn on the light
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44b8490>
data_req = <Task pending name='Task-77' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conft...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
make_application = <function make_application.<locals>.inner at 0x7ffff44884c0>
znp_server = <tests.conftest.FormedZStack1CC2531 object at 0x7ffff44b8dc0>
tests/application/test_requests.py:103:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff44b8910>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff44da740>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44b8490>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44b8490>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44b8490>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff449bf40>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff449bf40>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff449bf40>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:50.841 WARNING Your network is using the insecure Zigbee2MQTT network key!
2023-04-05 20:43:50.858 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:05.874 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:07.123 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
___________________ test_zigpy_request[FormedZStack3CC2531] ____________________
[gw29] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff448c9d0>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request(device, make_application):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.status = zigpy.endpoint.Status.ZDO_INIT
ep.profile_id = 260
ep.add_input_cluster(6)
# Respond to a light turn on request
data_req = znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.SUCCESS,
Endpoint=1,
TSN=TSN,
),
c.ZDO.SrcRtgInd.Callback(DstAddr=device.nwk, Relays=[]),
c.AF.IncomingMsg.Callback(
GroupId=0x0000,
ClusterId=6,
SrcAddr=device.nwk,
SrcEndpoint=1,
DstEndpoint=1,
WasBroadcast=False,
LQI=63,
SecurityUse=False,
TimeStamp=1198515,
TSN=0,
Data=bytes([0x08, TSN, 0x0B, 0x00, 0x00]),
MacSrcAddr=device.nwk,
MsgResultRadius=29,
),
],
)
# Turn on the light
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff45d2560>
data_req = <Task pending name='Task-82' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conft...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
make_application = <function make_application.<locals>.inner at 0x7ffff448c9d0>
znp_server = <tests.conftest.FormedZStack3CC2531 object at 0x7ffff4498d30>
tests/application/test_requests.py:103:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff4498340>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff42fd690>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff45d2560>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff45d2560>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff45d2560>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44de7a0>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff44de7a0>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44de7a0>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:50.935 ERROR Task was destroyed but it is pending!
task: <Task pending name='Task-10' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
2023-04-05 20:43:50.956 WARNING Server does not have a handler for command SYS.NVLength.Req(SysId=1, ItemId=4, SubId=0)
2023-04-05 20:43:51.168 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:06.185 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:07.311 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
_______________ test_zigpy_request_failure[FormedZStack3CC2531] ________________
[gw8] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
make_application = <function make_application.<locals>.inner at 0x7ffff448c3a0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4494220>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request_failure(device, make_application, mocker):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.profile_id = 260
ep.add_input_cluster(6)
# Fail to respond to a light turn on request
znp_server.reply_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.FAILURE,
Endpoint=1,
TSN=TSN,
),
],
)
mocker.spy(app, "send_packet")
# Fail to turn on the light
with pytest.raises(InvalidCommandResponse):
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44c9c60>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
make_application = <function make_application.<locals>.inner at 0x7ffff448c3a0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4494220>
znp_server = <tests.conftest.FormedZStack3CC2531 object at 0x7ffff4495d50>
tests/application/test_requests.py:149:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff44cae90>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff4314ee0>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44c9c60>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/unittest/mock.py:2245: in _execute_mock_call
result = await effect(*args, **kwargs)
_call = call(ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr...Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None))
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
effect = <function ControllerApplication.send_packet at 0x7ffff44d5120>
kwargs = {}
self = <AsyncMock name='send_packet' spec='method' id='140737292195088'>
/nix/store/jk54ky718axbp6sv4n8lbgfsk8z87hbq-python3.10-pytest-mock-3.10.0/lib/python3.10/site-packages/pytest_mock/plugin.py:150: in async_wrapper
r = await method(*args, **kwargs)
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
kwargs = {}
method = <bound method ControllerApplication.send_packet of <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44c9c60>>
spy_obj = <function send_packet at 0x7ffff44d5360>
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44c9c60>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44c9c60>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4495b70>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff4495b70>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4495b70>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:50.957 ERROR Task was destroyed but it is pending!
task: <Task pending name='Task-8' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
2023-04-05 20:43:50.977 WARNING Server does not have a handler for command SYS.NVLength.Req(SysId=1, ItemId=4, SubId=0)
2023-04-05 20:43:51.246 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:06.262 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:07.449 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
_______________ test_zigpy_request_failure[FormedZStack1CC2531] ________________
[gw17] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
make_application = <function make_application.<locals>.inner at 0x7ffff448eb00>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff44c9f30>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request_failure(device, make_application, mocker):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.profile_id = 260
ep.add_input_cluster(6)
# Fail to respond to a light turn on request
znp_server.reply_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.FAILURE,
Endpoint=1,
TSN=TSN,
),
],
)
mocker.spy(app, "send_packet")
# Fail to turn on the light
with pytest.raises(InvalidCommandResponse):
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44cb6a0>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
make_application = <function make_application.<locals>.inner at 0x7ffff448eb00>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff44c9f30>
znp_server = <tests.conftest.FormedZStack1CC2531 object at 0x7ffff44d8ca0>
tests/application/test_requests.py:149:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff44d86a0>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff431e8c0>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44cb6a0>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/unittest/mock.py:2245: in _execute_mock_call
result = await effect(*args, **kwargs)
_call = call(ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr...Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None))
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
effect = <function ControllerApplication.send_packet at 0x7ffff44ed900>
kwargs = {}
self = <AsyncMock name='send_packet' spec='method' id='140737290169424'>
/nix/store/jk54ky718axbp6sv4n8lbgfsk8z87hbq-python3.10-pytest-mock-3.10.0/lib/python3.10/site-packages/pytest_mock/plugin.py:150: in async_wrapper
r = await method(*args, **kwargs)
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
kwargs = {}
method = <bound method ControllerApplication.send_packet of <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44cb6a0>>
spy_obj = <function send_packet at 0x7ffff44edb40>
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44cb6a0>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44cb6a0>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44dbb80>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff44dbb80>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44dbb80>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:52.337 ERROR Task was destroyed but it is pending!
task: <Task pending name='Task-21' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
2023-04-05 20:43:52.508 WARNING Your network is using the insecure Zigbee2MQTT network key!
2023-04-05 20:43:52.524 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:07.539 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:08.778 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
_________________ test_zigpy_request[FormedLaunchpadCC26X2R1] __________________
[gw40] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff448f9a0>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request(device, make_application):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.status = zigpy.endpoint.Status.ZDO_INIT
ep.profile_id = 260
ep.add_input_cluster(6)
# Respond to a light turn on request
data_req = znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.SUCCESS,
Endpoint=1,
TSN=TSN,
),
c.ZDO.SrcRtgInd.Callback(DstAddr=device.nwk, Relays=[]),
c.AF.IncomingMsg.Callback(
GroupId=0x0000,
ClusterId=6,
SrcAddr=device.nwk,
SrcEndpoint=1,
DstEndpoint=1,
WasBroadcast=False,
LQI=63,
SecurityUse=False,
TimeStamp=1198515,
TSN=0,
Data=bytes([0x08, TSN, 0x0B, 0x00, 0x00]),
MacSrcAddr=device.nwk,
MsgResultRadius=29,
),
],
)
# Turn on the light
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44f0d60>
data_req = <Task pending name='Task-590' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conf...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
make_application = <function make_application.<locals>.inner at 0x7ffff448f9a0>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff449b160>
tests/application/test_requests.py:103:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff435b070>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.ZDO_INIT: 1>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff4383010>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44f0d60>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44f0d60>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff44f0d60>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff435e3e0>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff435e3e0>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff435e3e0>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:52.975 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:07.990 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:09.199 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
_____________ test_zigpy_request_failure[FormedLaunchpadCC26X2R1] ______________
[gw44] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
make_application = <function make_application.<locals>.inner at 0x7ffff448c790>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4498d60>
@pytest.mark.parametrize("device", FORMED_DEVICES)
async def test_zigpy_request_failure(device, make_application, mocker):
app, znp_server = await make_application(device)
await app.startup(auto_form=False)
TSN = 6
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAABB)
ep = device.add_endpoint(1)
ep.profile_id = 260
ep.add_input_cluster(6)
# Fail to respond to a light turn on request
znp_server.reply_to(
request=c.AF.DataRequestExt.Req(
DstAddrModeAddress=t.AddrModeAddress(
mode=t.AddrMode.NWK, address=device.nwk
),
DstEndpoint=1,
SrcEndpoint=1,
ClusterId=6,
TSN=TSN,
Data=bytes([0x01, TSN, 0x01]),
partial=True,
),
responses=[
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
c.AF.DataConfirm.Callback(
Status=t.Status.FAILURE,
Endpoint=1,
TSN=TSN,
),
],
)
mocker.spy(app, "send_packet")
# Fail to turn on the light
with pytest.raises(InvalidCommandResponse):
> await device.endpoints[1].on_off.on()
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4499120>
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
ep = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
make_application = <function make_application.<locals>.inner at 0x7ffff448c790>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4498d60>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff44c4640>
tests/application/test_requests.py:149:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/zcl/__init__.py:326: in request
return await self._endpoint.request(
args = ()
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
general = False
hdr = ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, direct...e=0, reserved=0, *is_cluster=True, *is_general=False), tsn=7, command_id=1, *direction=<Direction.Server_to_Client: 0>)
kwargs = {}
manufacturer = None
request = on()
schema = <class 'zigpy.zcl.foundation.on'>
self = <zigpy.zcl.clusters.general.OnOff object at 0x7ffff44e43d0>
tsn = None
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/endpoint.py:237: in request
return await self.device.request(
cluster = 6
command_id = 1
data = b'\x01\x07\x01'
expect_reply = True
profile_id = 260
self = <Endpoint id=1 in=[on_off:0x0006] out=[] status=<Status.NEW: 0>>
sequence = 7
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = 6
data = b'\x01\x07\x01'
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
req = <zigpy.util.Request object at 0x7ffff4354310>
self = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
sequence = 7
src_ep = 1
timeout = 5
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = 6
data = b'\x01\x07\x01'
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
expect_reply = True
extended_timeout = False
profile = 260
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4499120>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 1
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/unittest/mock.py:2245: in _execute_mock_call
result = await effect(*args, **kwargs)
_call = call(ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr...Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None))
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
effect = <function ControllerApplication.send_packet at 0x7ffff448fbe0>
kwargs = {}
self = <AsyncMock name='send_packet' spec='method' id='140737290259520'>
/nix/store/jk54ky718axbp6sv4n8lbgfsk8z87hbq-python3.10-pytest-mock-3.10.0/lib/python3.10/site-packages/pytest_mock/plugin.py:150: in async_wrapper
r = await method(*args, **kwargs)
args = (ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mod...erialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None),)
kwargs = {}
method = <bound method ControllerApplication.send_packet of <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4499120>>
spy_obj = <function send_packet at 0x7ffff448f1c0>
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <Device model='Model' manuf='Manufacturer' nwk=0xAABB ieee=07:06:05:04:03:02:01:00 is_initialized=False>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=1, dst=AddrModeAddress(addr_mode...=Serialized[b'\x01\x07\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4499120>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:919: in _send_request_raw
response = await asyncio.shield(
cluster = 6
data = b'\x01\x07\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB)
dst_ep = 1
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 260
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4499120>
sequence = 7
src_ep = 1
zigpy_znp/api.py:1049: in request_callback_rsp
await self.request(request, timeout=timeout, **response_params)
background = False
callback = AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7)
callback_rsp = <Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>
listener = OneShotResponseListener(matching_commands=(AF.DataConfirm.Callback(Status=None, Endpoint=None, TSN=7),), future=<Future pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932]>)
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44c6c80>
timeout = 30
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <zigpy_znp.api.ZNP object at 0x7ffff44c6c80>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
timeout = 30, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
response = await response_future
if isinstance(response, c.RPCError.CommandNotRecognized.Rsp):
> raise CommandNotRecognized(
f"Fatal request error {response} in response to {request}"
)
E zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ)) in response to AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\xBB\xAA\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06\x00\x07\x20\x00\x03\x00\x01\x07\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPa...point=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
response = RPCError.CommandNotRecognized.Rsp(ErrorCode=<ErrorCode.InvalidCommandId: 2>, RequestHeader=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ))
response_future = <Future finished result=RPCError.Comm...andType.SREQ))>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff44c6c80>
timeout = 30
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1013: CommandNotRecognized
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:53.126 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:08.141 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:09.426 WARNING Server does not have a handler for command AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0xAABB), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x01\x07\x01')
__________________ test_join_device[FormedLaunchpadCC26X2R1] ___________________
[gw22] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
fut = <Future cancelled>, timeout = 5
async def wait_for(fut, timeout):
"""Wait for the single Future or coroutine to complete, with timeout.
Coroutine will be wrapped in Task.
Returns result of the Future or coroutine. When a timeout occurs,
it cancels the task and raises TimeoutError. To avoid the task
cancellation, wrap it in shield().
If the wait is cancelled, the task is also cancelled.
This function is a coroutine.
"""
loop = events.get_running_loop()
if timeout is None:
return await fut
if timeout <= 0:
fut = ensure_future(fut, loop=loop)
if fut.done():
return fut.result()
await _cancel_and_wait(fut, loop=loop)
try:
return fut.result()
except exceptions.CancelledError as exc:
raise exceptions.TimeoutError() from exc
waiter = loop.create_future()
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
cb = functools.partial(_release_waiter, waiter)
fut = ensure_future(fut, loop=loop)
fut.add_done_callback(cb)
try:
# wait until the future completes or the timeout
try:
await waiter
except exceptions.CancelledError:
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
raise
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
# In case task cancellation failed with some
# exception, we should re-raise it
# See https://bugs.python.org/issue40607
try:
> return fut.result()
E asyncio.exceptions.CancelledError
cb = functools.partial(<function _release_waiter at 0x7ffff5a9f760>, <Future finished result=None>)
fut = <Future cancelled>
loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 5
timeout_handle = <TimerHandle cancelled when=1177215.659082123>
waiter = <Future finished result=None>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/tasks.py:456: CancelledError
The above exception was the direct cause of the following exception:
device = <Device model='Model' manuf='Manufacturer' nwk=0x1234 ieee=ec:1b:bd:ff:fe:54:4f:40 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff448c550>
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_join_device(device, make_application):
ieee = t.EUI64.convert("EC:1B:BD:FF:FE:54:4F:40")
nwk = 0x1234
app, znp_server = await make_application(server_cls=device)
device = app.add_initialized_device(ieee=ieee, nwk=nwk)
permit_join = znp_server.reply_once_to(
request=c.ZDO.MgmtPermitJoinReq.Req(
AddrMode=t.AddrMode.NWK, Dst=nwk, Duration=60, partial=True
),
responses=[
c.ZDO.MgmtPermitJoinReq.Rsp(Status=t.Status.SUCCESS),
c.ZDO.MgmtPermitJoinRsp.Callback(Src=nwk, Status=t.ZDOStatus.SUCCESS),
c.ZDO.MsgCbIncoming.Callback(
Src=nwk,
IsBroadcast=t.Bool.false,
ClusterId=32822,
SecurityUse=0,
TSN=6,
MacDst=0x0000,
Data=b"\x00",
),
],
)
await app.startup(auto_form=False)
> await app.permit(node=ieee)
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4497c10>
device = <Device model='Model' manuf='Manufacturer' nwk=0x1234 ieee=ec:1b:bd:ff:fe:54:4f:40 is_initialized=True>
ieee = ec:1b:bd:ff:fe:54:4f:40
make_application = <function make_application.<locals>.inner at 0x7ffff448c550>
nwk = 4660
permit_join = <Task finished name='Task-4' coro=<BaseServerZNP.reply_once_to.<locals>.replier() done, defined at /build/source/tests/conftest.py:325> result=ZDO.MgmtPermi...ignificance=0)>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff44970d0>
tests/application/test_joining.py:126:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
zigpy_znp/zigbee/application.py:322: in permit
await super().permit(time_s=time_s, node=node)
__class__ = <class 'zigpy_znp.zigbee.application.ControllerApplication'>
node = ec:1b:bd:ff:fe:54:4f:40
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4497c10>
time_s = 60
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:1033: in permit
r = await dev.zdo.permit(time_s)
dev = <Device model='Model' manuf='Manufacturer' nwk=0x1234 ieee=ec:1b:bd:ff:fe:54:4f:40 is_initialized=True>
node = ec:1b:bd:ff:fe:54:4f:40
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4497c10>
time_s = 60
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:310: in request
return await asyncio.wait_for(req.result, timeout)
cluster = <ZDOCmd.Mgmt_Permit_Joining_req: 0x0036>
data = b'\x07<\x00'
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
req = <zigpy.util.Request object at 0x7ffff44e0340>
self = <Device model='Model' manuf='Manufacturer' nwk=0x1234 ieee=ec:1b:bd:ff:fe:54:4f:40 is_initialized=True>
sequence = 7
src_ep = 0
timeout = 5
use_ieee = False
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
fut = <Future cancelled>, timeout = 5
async def wait_for(fut, timeout):
"""Wait for the single Future or coroutine to complete, with timeout.
Coroutine will be wrapped in Task.
Returns result of the Future or coroutine. When a timeout occurs,
it cancels the task and raises TimeoutError. To avoid the task
cancellation, wrap it in shield().
If the wait is cancelled, the task is also cancelled.
This function is a coroutine.
"""
loop = events.get_running_loop()
if timeout is None:
return await fut
if timeout <= 0:
fut = ensure_future(fut, loop=loop)
if fut.done():
return fut.result()
await _cancel_and_wait(fut, loop=loop)
try:
return fut.result()
except exceptions.CancelledError as exc:
raise exceptions.TimeoutError() from exc
waiter = loop.create_future()
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
cb = functools.partial(_release_waiter, waiter)
fut = ensure_future(fut, loop=loop)
fut.add_done_callback(cb)
try:
# wait until the future completes or the timeout
try:
await waiter
except exceptions.CancelledError:
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
raise
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
# In case task cancellation failed with some
# exception, we should re-raise it
# See https://bugs.python.org/issue40607
try:
return fut.result()
except exceptions.CancelledError as exc:
> raise exceptions.TimeoutError() from exc
E asyncio.exceptions.TimeoutError
cb = functools.partial(<function _release_waiter at 0x7ffff5a9f760>, <Future finished result=None>)
fut = <Future cancelled>
loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 5
timeout_handle = <TimerHandle cancelled when=1177215.659082123>
waiter = <Future finished result=None>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/tasks.py:458: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:52.987 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:08.003 WARNING Coordinator does not support energy scanning
________ test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-True-1-False] ________
[gw46] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
self = <zigpy_znp.api.ZNP object at 0x7ffff4380e50>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC), DstEndpoint=0...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
timeout = None, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x0F\xFC\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
> response = await response_future
E asyncio.exceptions.CancelledError
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x0F\xFC\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC), DstEndpoint=0...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4380e50>
timeout = None
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1010: CancelledError
During handling of the above exception, another exception occurred:
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, broadcast = True
nwk_update_id = 1, change_channel = False
make_application = <function make_application.<locals>.inner at 0x7ffff44897e0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4375d80>
@pytest.mark.parametrize(
"broadcast,nwk_update_id,change_channel",
[
(False, 1, False),
(False, 1, True),
(True, 1, False),
(False, 200, True),
],
)
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_mgmt_nwk_update_req(
device, broadcast, nwk_update_id, change_channel, make_application, mocker
):
mocker.patch("zigpy_znp.zigbee.device.NWK_UPDATE_LOOP_DELAY", 0.1)
app, znp_server = await make_application(server_cls=device)
if change_channel:
new_channel = 11 + (26 - znp_server.nib.nwkLogicalChannel)
else:
new_channel = znp_server.nib.nwkLogicalChannel
async def update_channel(req):
# Wait a bit before updating
await asyncio.sleep(0.5)
znp_server.nib = znp_server.nib.replace(
nwkUpdateId=znp_server.nib.nwkUpdateId + 1,
nwkLogicalChannel=list(req.Channels)[0],
channelList=req.Channels,
)
yield
znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstEndpoint=0,
ClusterId=zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
partial=True,
),
responses=[c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS)],
)
nwk_update_req = znp_server.reply_once_to(
request=c.ZDO.MgmtNWKUpdateReq.Req(
Dst=0x0000,
DstAddrMode=t.AddrMode.NWK,
Channels=t.Channels.from_channel_list([new_channel]),
ScanDuration=254,
# Missing fields in the request cannot be `None` in the Z-Stack command
ScanCount=0,
NwkManagerAddr=0x0000,
),
responses=[
c.ZDO.MgmtNWKUpdateReq.Rsp(Status=t.Status.SUCCESS),
update_channel,
],
)
await app.startup(auto_form=False)
update = zdo_t.NwkUpdate(
ScanChannels=t.Channels.from_channel_list([new_channel]),
ScanDuration=zdo_t.NwkUpdate.CHANNEL_CHANGE_REQ,
nwkUpdateId=nwk_update_id,
)
if broadcast:
> await zigpy.zdo.broadcast(
app,
zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
0x0000, # group id (ignore)
0, # radius
update,
broadcast_address=zigpy_t.BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR,
)
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4304070>
broadcast = True
change_channel = False
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>
make_application = <function make_application.<locals>.inner at 0x7ffff44897e0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4375d80>
new_channel = 15
nwk_update_id = 1
nwk_update_req = <Task pending name='Task-1241' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/con...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
update = NwkUpdate(ScanChannels=<Channels.CHANNEL_15: 32768>, ScanDuration=254, nwkUpdateId=1)
update_channel = <function test_mgmt_nwk_update_req.<locals>.update_channel at 0x7ffff42fe320>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff4305b70>
tests/application/test_zdo_requests.py:82:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:519: in broadcast
return await app.broadcast(
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4304070>
broadcast_address = <BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR: 65532>
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
dst_ep = 0
grpid = 0
profile = 0
radius = 0
sequence = 7
src_ep = 0
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:822: in broadcast
await self.send_packet(
broadcast_address = <BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR: 65532>
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
dst_ep = 0
grpid = 0
profile = 0
radius = 0
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4304070>
sequence = 7
src_ep = 0
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = None
dst_addr = AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode...07\x00\x80\x00\x00\xfe\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4304070>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:908: in _send_request_raw
response = await self._znp.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC)
dst_ep = 0
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 0
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC), DstEndpoint=0...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4304070>
sequence = 7
src_ep = 0
zigpy_znp/api.py:1006: in request
async with async_timeout.timeout(
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x0F\xFC\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.Broadcast: 15>, address=0xFFFC), DstEndpoint=0...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4380e50>
timeout = None
value = <Status.SUCCESS: 0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:129: in __aexit__
self._do_exit(exc_type)
exc_tb = <traceback object at 0x7ffff4369680>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError()
self = <async_timeout.Timeout object at 0x7ffff4368500>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <async_timeout.Timeout object at 0x7ffff4368500>
exc_type = <class 'asyncio.exceptions.CancelledError'>
def _do_exit(self, exc_type: Optional[Type[BaseException]]) -> None:
if exc_type is asyncio.CancelledError and self._state == _State.TIMEOUT:
self._timeout_handler = None
> raise asyncio.TimeoutError
E asyncio.exceptions.TimeoutError
exc_type = <class 'asyncio.exceptions.CancelledError'>
self = <async_timeout.Timeout object at 0x7ffff4368500>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:212: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:56.122 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:06.136 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:07.324 WARNING NWK update request is ignored when channel does not change
2023-04-05 20:44:07.325 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.CHANNEL_15: 32768>, ScanDuration=254, nwkUpdateId=1)}
_______ test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-False] ________
[gw49] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
self = <zigpy_znp.api.ZNP object at 0x7ffff4332380>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
timeout = None, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
> response = await response_future
E asyncio.exceptions.CancelledError
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4332380>
timeout = None
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1010: CancelledError
During handling of the above exception, another exception occurred:
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, broadcast = False
nwk_update_id = 1, change_channel = False
make_application = <function make_application.<locals>.inner at 0x7ffff448bd00>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4326c50>
@pytest.mark.parametrize(
"broadcast,nwk_update_id,change_channel",
[
(False, 1, False),
(False, 1, True),
(True, 1, False),
(False, 200, True),
],
)
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_mgmt_nwk_update_req(
device, broadcast, nwk_update_id, change_channel, make_application, mocker
):
mocker.patch("zigpy_znp.zigbee.device.NWK_UPDATE_LOOP_DELAY", 0.1)
app, znp_server = await make_application(server_cls=device)
if change_channel:
new_channel = 11 + (26 - znp_server.nib.nwkLogicalChannel)
else:
new_channel = znp_server.nib.nwkLogicalChannel
async def update_channel(req):
# Wait a bit before updating
await asyncio.sleep(0.5)
znp_server.nib = znp_server.nib.replace(
nwkUpdateId=znp_server.nib.nwkUpdateId + 1,
nwkLogicalChannel=list(req.Channels)[0],
channelList=req.Channels,
)
yield
znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstEndpoint=0,
ClusterId=zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
partial=True,
),
responses=[c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS)],
)
nwk_update_req = znp_server.reply_once_to(
request=c.ZDO.MgmtNWKUpdateReq.Req(
Dst=0x0000,
DstAddrMode=t.AddrMode.NWK,
Channels=t.Channels.from_channel_list([new_channel]),
ScanDuration=254,
# Missing fields in the request cannot be `None` in the Z-Stack command
ScanCount=0,
NwkManagerAddr=0x0000,
),
responses=[
c.ZDO.MgmtNWKUpdateReq.Rsp(Status=t.Status.SUCCESS),
update_channel,
],
)
await app.startup(auto_form=False)
update = zdo_t.NwkUpdate(
ScanChannels=t.Channels.from_channel_list([new_channel]),
ScanDuration=zdo_t.NwkUpdate.CHANNEL_CHANGE_REQ,
nwkUpdateId=nwk_update_id,
)
if broadcast:
await zigpy.zdo.broadcast(
app,
zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
0x0000, # group id (ignore)
0, # radius
update,
broadcast_address=zigpy_t.BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR,
)
else:
> await app._device.zdo.Mgmt_NWK_Update_req(update)
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4367d90>
broadcast = False
change_channel = False
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>
make_application = <function make_application.<locals>.inner at 0x7ffff448bd00>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4326c50>
new_channel = 15
nwk_update_id = 1
nwk_update_req = <Task pending name='Task-1238' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/con...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
update = NwkUpdate(ScanChannels=<Channels.CHANNEL_15: 32768>, ScanDuration=254, nwkUpdateId=1)
update_channel = <function test_mgmt_nwk_update_req.<locals>.update_channel at 0x7ffff44f1900>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff43672e0>
tests/application/test_zdo_requests.py:91:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
req = <zigpy.util.Request object at 0x7ffff44d21d0>
self = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
sequence = 7
src_ep = 0
timeout = 10
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4367d90>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 0
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode...07\x00\x80\x00\x00\xfe\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4367d90>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:908: in _send_request_raw
response = await self._znp.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x80\x00\x00\xfe\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 0
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff4367d90>
sequence = 7
src_ep = 0
zigpy_znp/api.py:1006: in request
async with async_timeout.timeout(
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x80\x00\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x80\x00\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff4332380>
timeout = None
value = <Status.SUCCESS: 0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:129: in __aexit__
self._do_exit(exc_type)
exc_tb = <traceback object at 0x7ffff4368f80>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError()
self = <async_timeout.Timeout object at 0x7ffff436bac0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <async_timeout.Timeout object at 0x7ffff436bac0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
def _do_exit(self, exc_type: Optional[Type[BaseException]]) -> None:
if exc_type is asyncio.CancelledError and self._state == _State.TIMEOUT:
self._timeout_handler = None
> raise asyncio.TimeoutError
E asyncio.exceptions.TimeoutError
exc_type = <class 'asyncio.exceptions.CancelledError'>
self = <async_timeout.Timeout object at 0x7ffff436bac0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:212: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:56.256 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:06.269 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:07.433 WARNING NWK update request is ignored when channel does not change
2023-04-05 20:44:07.434 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.CHANNEL_15: 32768>, ScanDuration=254, nwkUpdateId=1)}
_____ test_request_recovery_route_rediscovery_zdo[FormedLaunchpadCC26X2R1] _____
[gw16] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
fut = <Future cancelled>, timeout = 5
async def wait_for(fut, timeout):
"""Wait for the single Future or coroutine to complete, with timeout.
Coroutine will be wrapped in Task.
Returns result of the Future or coroutine. When a timeout occurs,
it cancels the task and raises TimeoutError. To avoid the task
cancellation, wrap it in shield().
If the wait is cancelled, the task is also cancelled.
This function is a coroutine.
"""
loop = events.get_running_loop()
if timeout is None:
return await fut
if timeout <= 0:
fut = ensure_future(fut, loop=loop)
if fut.done():
return fut.result()
await _cancel_and_wait(fut, loop=loop)
try:
return fut.result()
except exceptions.CancelledError as exc:
raise exceptions.TimeoutError() from exc
waiter = loop.create_future()
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
cb = functools.partial(_release_waiter, waiter)
fut = ensure_future(fut, loop=loop)
fut.add_done_callback(cb)
try:
# wait until the future completes or the timeout
try:
await waiter
except exceptions.CancelledError:
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
raise
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
# In case task cancellation failed with some
# exception, we should re-raise it
# See https://bugs.python.org/issue40607
try:
> return fut.result()
E asyncio.exceptions.CancelledError
cb = functools.partial(<function _release_waiter at 0x7ffff5a9f760>, <Future finished result=None>)
fut = <Future cancelled>
loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 5
timeout_handle = <TimerHandle cancelled when=1177235.017048009>
waiter = <Future finished result=None>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/tasks.py:456: CancelledError
The above exception was the direct cause of the following exception:
device = <Device model='Model' manuf='Manufacturer' nwk=0xABCD ieee=07:06:05:04:03:02:01:00 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff448ad40>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4320bb0>
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_request_recovery_route_rediscovery_zdo(device, make_application, mocker):
TSN = 6
app, znp_server = await make_application(server_cls=device)
await app.startup(auto_form=False)
# The data confirm timeout must be shorter than the ARSP timeout
mocker.patch("zigpy_znp.zigbee.application.DATA_CONFIRM_TIMEOUT", new=0.1)
app._znp._config[conf.CONF_ZNP_CONFIG][conf.CONF_ARSP_TIMEOUT] = 1
device = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xABCD)
# Fail the first time
route_discovered = False
def route_replier(req):
nonlocal route_discovered
if not route_discovered:
return c.ZDO.ExtRouteChk.Rsp(Status=c.zdo.RoutingStatus.FAIL)
else:
return c.ZDO.ExtRouteChk.Rsp(Status=c.zdo.RoutingStatus.SUCCESS)
def set_route_discovered(req):
nonlocal route_discovered
route_discovered = True
return c.ZDO.ExtRouteDisc.Rsp(Status=t.Status.SUCCESS)
znp_server.reply_to(
request=c.ZDO.ExtRouteChk.Req(Dst=device.nwk, partial=True),
responses=[route_replier],
override=True,
)
was_route_discovered = znp_server.reply_once_to(
request=c.ZDO.ExtRouteDisc.Req(
Dst=device.nwk, Options=c.zdo.RouteDiscoveryOptions.UNICAST, partial=True
),
responses=[set_route_discovered],
)
zdo_req = znp_server.reply_once_to(
request=zdo_request_matcher(
dst_addr=t.AddrModeAddress(t.AddrMode.NWK, device.nwk),
command_id=zdo_t.ZDOCmd.Active_EP_req,
TSN=TSN,
zdo_NWKAddrOfInterest=device.nwk,
),
responses=[
c.ZDO.ActiveEpRsp.Callback(
Src=device.nwk,
Status=t.ZDOStatus.SUCCESS,
NWK=device.nwk,
ActiveEndpoints=[],
),
c.ZDO.MsgCbIncoming.Callback(
Src=device.nwk,
IsBroadcast=t.Bool.false,
ClusterId=zdo_t.ZDOCmd.Active_EP_rsp,
SecurityUse=0,
TSN=TSN,
MacDst=device.nwk,
Data=serialize_zdo_command(
command_id=zdo_t.ZDOCmd.Active_EP_rsp,
Status=t.ZDOStatus.SUCCESS,
NWKAddrOfInterest=device.nwk,
ActiveEPList=[],
),
),
],
)
> await device.zdo.Active_EP_req(device.nwk)
TSN = 6
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff43345b0>
device = <Device model='Model' manuf='Manufacturer' nwk=0xABCD ieee=07:06:05:04:03:02:01:00 is_initialized=True>
make_application = <function make_application.<locals>.inner at 0x7ffff448ad40>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff4320bb0>
route_discovered = True
route_replier = <function test_request_recovery_route_rediscovery_zdo.<locals>.route_replier at 0x7ffff448aa70>
set_route_discovered = <function test_request_recovery_route_rediscovery_zdo.<locals>.set_route_discovered at 0x7ffff448a950>
was_route_discovered = <Task finished name='Task-1176' coro=<BaseServerZNP.reply_once_to.<locals>.replier() done, defined at /build/source/tests/conftest.py:325> result=ZDO.ExtRouteD...0>, Radius=30)>
zdo_req = <Task pending name='Task-1177' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/con...ure pending cb=[ZNP.wait_for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]>>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff4345690>
tests/application/test_requests.py:532:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:310: in request
return await asyncio.wait_for(req.result, timeout)
cluster = <ZDOCmd.Active_EP_req: 0x0005>
data = b'\x07\xcd\xab'
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
req = <zigpy.util.Request object at 0x7ffff44d8ca0>
self = <Device model='Model' manuf='Manufacturer' nwk=0xABCD ieee=07:06:05:04:03:02:01:00 is_initialized=True>
sequence = 7
src_ep = 0
timeout = 5
use_ieee = False
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
fut = <Future cancelled>, timeout = 5
async def wait_for(fut, timeout):
"""Wait for the single Future or coroutine to complete, with timeout.
Coroutine will be wrapped in Task.
Returns result of the Future or coroutine. When a timeout occurs,
it cancels the task and raises TimeoutError. To avoid the task
cancellation, wrap it in shield().
If the wait is cancelled, the task is also cancelled.
This function is a coroutine.
"""
loop = events.get_running_loop()
if timeout is None:
return await fut
if timeout <= 0:
fut = ensure_future(fut, loop=loop)
if fut.done():
return fut.result()
await _cancel_and_wait(fut, loop=loop)
try:
return fut.result()
except exceptions.CancelledError as exc:
raise exceptions.TimeoutError() from exc
waiter = loop.create_future()
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
cb = functools.partial(_release_waiter, waiter)
fut = ensure_future(fut, loop=loop)
fut.add_done_callback(cb)
try:
# wait until the future completes or the timeout
try:
await waiter
except exceptions.CancelledError:
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
raise
if fut.done():
return fut.result()
else:
fut.remove_done_callback(cb)
# We must ensure that the task is not running
# after wait_for() returns.
# See https://bugs.python.org/issue32751
await _cancel_and_wait(fut, loop=loop)
# In case task cancellation failed with some
# exception, we should re-raise it
# See https://bugs.python.org/issue40607
try:
return fut.result()
except exceptions.CancelledError as exc:
> raise exceptions.TimeoutError() from exc
E asyncio.exceptions.TimeoutError
cb = functools.partial(<function _release_waiter at 0x7ffff5a9f760>, <Future finished result=None>)
fut = <Future cancelled>
loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 5
timeout_handle = <TimerHandle cancelled when=1177235.017048009>
waiter = <Future finished result=None>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/tasks.py:458: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:44:09.252 ERROR Task was destroyed but it is pending!
task: <Task pending name='Task-591' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
2023-04-05 20:44:11.197 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:26.212 WARNING Coordinator does not support energy scanning
________ test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-True] ________
[gw48] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
self = <zigpy_znp.api.ZNP object at 0x7ffff425c640>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\x01')
timeout = None, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\x01')
response_future = <Future cancelled>
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
> response = await response_future
E asyncio.exceptions.CancelledError
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff425c640>
timeout = None
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1010: CancelledError
During handling of the above exception, another exception occurred:
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, broadcast = False
nwk_update_id = 1, change_channel = True
make_application = <function make_application.<locals>.inner at 0x7ffff448aa70>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff43da200>
@pytest.mark.parametrize(
"broadcast,nwk_update_id,change_channel",
[
(False, 1, False),
(False, 1, True),
(True, 1, False),
(False, 200, True),
],
)
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_mgmt_nwk_update_req(
device, broadcast, nwk_update_id, change_channel, make_application, mocker
):
mocker.patch("zigpy_znp.zigbee.device.NWK_UPDATE_LOOP_DELAY", 0.1)
app, znp_server = await make_application(server_cls=device)
if change_channel:
new_channel = 11 + (26 - znp_server.nib.nwkLogicalChannel)
else:
new_channel = znp_server.nib.nwkLogicalChannel
async def update_channel(req):
# Wait a bit before updating
await asyncio.sleep(0.5)
znp_server.nib = znp_server.nib.replace(
nwkUpdateId=znp_server.nib.nwkUpdateId + 1,
nwkLogicalChannel=list(req.Channels)[0],
channelList=req.Channels,
)
yield
znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstEndpoint=0,
ClusterId=zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
partial=True,
),
responses=[c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS)],
)
nwk_update_req = znp_server.reply_once_to(
request=c.ZDO.MgmtNWKUpdateReq.Req(
Dst=0x0000,
DstAddrMode=t.AddrMode.NWK,
Channels=t.Channels.from_channel_list([new_channel]),
ScanDuration=254,
# Missing fields in the request cannot be `None` in the Z-Stack command
ScanCount=0,
NwkManagerAddr=0x0000,
),
responses=[
c.ZDO.MgmtNWKUpdateReq.Rsp(Status=t.Status.SUCCESS),
update_channel,
],
)
await app.startup(auto_form=False)
update = zdo_t.NwkUpdate(
ScanChannels=t.Channels.from_channel_list([new_channel]),
ScanDuration=zdo_t.NwkUpdate.CHANNEL_CHANGE_REQ,
nwkUpdateId=nwk_update_id,
)
if broadcast:
await zigpy.zdo.broadcast(
app,
zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
0x0000, # group id (ignore)
0, # radius
update,
broadcast_address=zigpy_t.BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR,
)
else:
> await app._device.zdo.Mgmt_NWK_Update_req(update)
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff43b13c0>
broadcast = False
change_channel = True
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>
make_application = <function make_application.<locals>.inner at 0x7ffff448aa70>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff43da200>
new_channel = 22
nwk_update_id = 1
nwk_update_req = <Task pending name='Task-1731' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future finished result=ZDO.MgmtNWKUp...erAddr=0x0000)>>
update = NwkUpdate(ScanChannels=<Channels.CHANNEL_22: 4194304>, ScanDuration=254, nwkUpdateId=1)
update_channel = <function test_mgmt_nwk_update_req.<locals>.update_channel at 0x7ffff430edd0>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff420cb80>
tests/application/test_zdo_requests.py:91:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\x01'
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
req = <zigpy.util.Request object at 0x7ffff42664d0>
self = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
sequence = 7
src_ep = 0
timeout = 10
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\x01'
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff43b13c0>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 0
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode...'\x07\x00\x00@\x00\xfe\x01'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff43b13c0>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:908: in _send_request_raw
response = await self._znp.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\x01'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 0
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\x01')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff43b13c0>
sequence = 7
src_ep = 0
zigpy_znp/api.py:1006: in request
async with async_timeout.timeout(
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\x01')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\x01')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7ffff425c640>
timeout = None
value = <Status.SUCCESS: 0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:129: in __aexit__
self._do_exit(exc_type)
exc_tb = <traceback object at 0x7ffff43c7ec0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError()
self = <async_timeout.Timeout object at 0x7ffff43c6fc0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <async_timeout.Timeout object at 0x7ffff43c6fc0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
def _do_exit(self, exc_type: Optional[Type[BaseException]]) -> None:
if exc_type is asyncio.CancelledError and self._state == _State.TIMEOUT:
self._timeout_handler = None
> raise asyncio.TimeoutError
E asyncio.exceptions.TimeoutError
exc_type = <class 'asyncio.exceptions.CancelledError'>
self = <async_timeout.Timeout object at 0x7ffff43c6fc0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:212: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:44:17.388 ERROR Task was destroyed but it is pending!
task: <Task pending name='Task-1728' coro=<BaseServerZNP.reply_to.<locals>.callback() done, defined at /build/source/tests/conftest.py:337> wait_for=<Future pending cb=[Task.task_wakeup()]>>
2023-04-05 20:44:19.800 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:29.813 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:30.990 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.CHANNEL_22: 4194304>, ScanDuration=254, nwkUpdateId=1)}
_______ test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-200-True] _______
[gw49] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
self = <zigpy_znp.api.ZNP object at 0x7fffeffc2c20>
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\xC8')
timeout = None, response_params = {'RspStatus': <Status.SUCCESS: 0>}
renamed_response_params = {'Status': <Status.SUCCESS: 0>}, param = 'RspStatus'
value = <Status.SUCCESS: 0>
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\xC8')
response_future = <Future cancelled>
async def request(
self, request: t.CommandBase, timeout: int | None = None, **response_params
) -> t.CommandBase | None:
"""
Sends a SREQ/AREQ request and returns its SRSP (only for SREQ), failing if any
of the SRSP's parameters don't match `response_params`.
"""
# Common mistake is to do `znp.request(c.SYS.Ping())`
if type(request) is not request.Req:
raise ValueError(f"Cannot send a command that isn't a request: {request!r}")
# Construct a partial response out of the `Rsp*` kwargs if one is provided
if request.Rsp:
renamed_response_params = {}
for param, value in response_params.items():
if not param.startswith("Rsp"):
raise KeyError(
f"All response params must start with 'Rsp': {param!r}"
)
renamed_response_params[param.replace("Rsp", "", 1)] = value
# Construct our response before we send the request so that we fail early
partial_response = request.Rsp(partial=True, **renamed_response_params)
elif response_params:
raise ValueError(
f"Command has no response so response_params={response_params} "
f"will have no effect"
)
frame = request.to_frame(align=self.nvram.align_structs)
if self._uart is None:
raise RuntimeError("Coordinator is disconnected, cannot send request")
# We should only be sending one SREQ at a time, according to the spec
async with self._sync_request_lock:
LOGGER.debug("Sending request: %s", request)
# If our request has no response, we cannot wait for one
if not request.Rsp:
LOGGER.debug("Request has no response, not waiting for one.")
self._uart.send(frame)
return None
# We need to create the response listener before we send the request
response_future = self.wait_for_responses(
[
request.Rsp(partial=True),
c.RPCError.CommandNotRecognized.Rsp(
partial=True, RequestHeader=request.header
),
]
)
self._uart.send(frame)
# We should get a SRSP in a reasonable amount of time
async with async_timeout.timeout(
timeout or self._znp_config[conf.CONF_SREQ_TIMEOUT]
):
# We lock until either a sync response is seen or an error occurs
> response = await response_future
E asyncio.exceptions.CancelledError
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\xC8')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\xC8')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7fffeffc2c20>
timeout = None
value = <Status.SUCCESS: 0>
zigpy_znp/api.py:1010: CancelledError
During handling of the above exception, another exception occurred:
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, broadcast = False
nwk_update_id = 200, change_channel = True
make_application = <function make_application.<locals>.inner at 0x7ffff44896c0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff439a9b0>
@pytest.mark.parametrize(
"broadcast,nwk_update_id,change_channel",
[
(False, 1, False),
(False, 1, True),
(True, 1, False),
(False, 200, True),
],
)
@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
async def test_mgmt_nwk_update_req(
device, broadcast, nwk_update_id, change_channel, make_application, mocker
):
mocker.patch("zigpy_znp.zigbee.device.NWK_UPDATE_LOOP_DELAY", 0.1)
app, znp_server = await make_application(server_cls=device)
if change_channel:
new_channel = 11 + (26 - znp_server.nib.nwkLogicalChannel)
else:
new_channel = znp_server.nib.nwkLogicalChannel
async def update_channel(req):
# Wait a bit before updating
await asyncio.sleep(0.5)
znp_server.nib = znp_server.nib.replace(
nwkUpdateId=znp_server.nib.nwkUpdateId + 1,
nwkLogicalChannel=list(req.Channels)[0],
channelList=req.Channels,
)
yield
znp_server.reply_once_to(
request=c.AF.DataRequestExt.Req(
DstEndpoint=0,
ClusterId=zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
partial=True,
),
responses=[c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS)],
)
nwk_update_req = znp_server.reply_once_to(
request=c.ZDO.MgmtNWKUpdateReq.Req(
Dst=0x0000,
DstAddrMode=t.AddrMode.NWK,
Channels=t.Channels.from_channel_list([new_channel]),
ScanDuration=254,
# Missing fields in the request cannot be `None` in the Z-Stack command
ScanCount=0,
NwkManagerAddr=0x0000,
),
responses=[
c.ZDO.MgmtNWKUpdateReq.Rsp(Status=t.Status.SUCCESS),
update_channel,
],
)
await app.startup(auto_form=False)
update = zdo_t.NwkUpdate(
ScanChannels=t.Channels.from_channel_list([new_channel]),
ScanDuration=zdo_t.NwkUpdate.CHANNEL_CHANGE_REQ,
nwkUpdateId=nwk_update_id,
)
if broadcast:
await zigpy.zdo.broadcast(
app,
zdo_t.ZDOCmd.Mgmt_NWK_Update_req,
0x0000, # group id (ignore)
0, # radius
update,
broadcast_address=zigpy_t.BroadcastAddress.ALL_ROUTERS_AND_COORDINATOR,
)
else:
> await app._device.zdo.Mgmt_NWK_Update_req(update)
app = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff439b6d0>
broadcast = False
change_channel = True
device = <class 'tests.conftest.FormedLaunchpadCC26X2R1'>
make_application = <function make_application.<locals>.inner at 0x7ffff44896c0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7ffff439a9b0>
new_channel = 22
nwk_update_id = 200
nwk_update_req = <Task pending name='Task-1842' coro=<BaseServerZNP.reply_once_to.<locals>.replier() running at /build/source/tests/conftest.py:326> wait_for=<Future finished result=ZDO.MgmtNWKUp...erAddr=0x0000)>>
update = NwkUpdate(ScanChannels=<Channels.CHANNEL_22: 4194304>, ScanDuration=254, nwkUpdateId=200)
update_channel = <function test_mgmt_nwk_update_req.<locals>.update_channel at 0x7ffff418aef0>
znp_server = <tests.conftest.FormedLaunchpadCC26X2R1 object at 0x7ffff4326860>
tests/application/test_zdo_requests.py:91:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/device.py:294: in request
await self._application.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\xc8'
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
req = <zigpy.util.Request object at 0x7fffeffb5f30>
self = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
sequence = 7
src_ep = 0
timeout = 10
use_ieee = False
/nix/store/1hj16m7vgwvxp50wqm492ik287invqni-python3.10-zigpy-0.54.0/lib/python3.10/site-packages/zigpy/application.py:734: in request
await self.send_packet(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\xc8'
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
expect_reply = True
extended_timeout = False
profile = 0
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff439b6d0>
sequence = 7
source_route = None
src = AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000)
src_ep = 0
tx_options = <TransmitOptions.NONE: 0>
use_ieee = False
zigpy_znp/zigbee/application.py:1033: in send_packet
response = await self._send_request_raw(
association = None
attempt = 0
device = <ZNPCoordinator model='CC1352/CC2652, Z-Stack 3.30+ (build 20220219)' manuf='Texas Instruments' nwk=0x0000 ieee=00:12:4b:00:1e:17:ef:a8 is_initialized=True>
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
force_relays = None
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
packet = ZigbeePacket(src=AddrModeAddress(addr_mode=<AddrMode.NWK: 2>, address=0x0000), src_ep=0, dst=AddrModeAddress(addr_mode...'\x07\x00\x00@\x00\xfe\xc8'], tx_options=<TransmitOptions.NONE: 0>, radius=0, non_member_radius=0, lqi=None, rssi=None)
response = None
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff439b6d0>
status = None
tried_assoc_remove = False
tried_ieee_address = False
tried_last_good_route = False
tried_route_discovery = False
zigpy_znp/zigbee/application.py:908: in _send_request_raw
response = await self._znp.request(
cluster = <ZDOCmd.Mgmt_NWK_Update_req: 0x0038>
data = b'\x07\x00\x00@\x00\xfe\xc8'
dst_addr = AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000)
dst_ep = 0
extended_timeout = False
options = <TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>
profile = 0
radius = 0
relays = None
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\xC8')
self = <zigpy_znp.zigbee.application.ControllerApplication object at 0x7ffff439b6d0>
sequence = 7
src_ep = 0
zigpy_znp/api.py:1006: in request
async with async_timeout.timeout(
frame = GeneralFrame(header=CommandHeader(id=0x02, subsystem=Subsystem.AF, type=CommandType.SREQ), data=b'\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\x07\x20\x00\x07\x00\x07\x00\x00\x40\x00\xFE\xC8')
param = 'RspStatus'
partial_response = AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
renamed_response_params = {'Status': <Status.SUCCESS: 0>}
request = AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x0000), DstEndpoint=0, DstPa...d=56, TSN=7, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=0, Data=b'\x07\x00\x00\x40\x00\xFE\xC8')
response_future = <Future cancelled>
response_params = {'RspStatus': <Status.SUCCESS: 0>}
self = <zigpy_znp.api.ZNP object at 0x7fffeffc2c20>
timeout = None
value = <Status.SUCCESS: 0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:129: in __aexit__
self._do_exit(exc_type)
exc_tb = <traceback object at 0x7ffff4336fc0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError()
self = <async_timeout.Timeout object at 0x7ffff431f6c0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <async_timeout.Timeout object at 0x7ffff431f6c0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
def _do_exit(self, exc_type: Optional[Type[BaseException]]) -> None:
if exc_type is asyncio.CancelledError and self._state == _State.TIMEOUT:
self._timeout_handler = None
> raise asyncio.TimeoutError
E asyncio.exceptions.TimeoutError
exc_type = <class 'asyncio.exceptions.CancelledError'>
self = <async_timeout.Timeout object at 0x7ffff431f6c0>
/nix/store/jdhykmja86ih19bwlrap4z3kabwv56gm-python3.10-async-timeout-4.0.2/lib/python3.10/site-packages/async_timeout/__init__.py:212: TimeoutError
------------------------------ Captured log call -------------------------------
2023-04-05 20:44:24.638 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:34.651 WARNING Coordinator does not support energy scanning
2023-04-05 20:44:35.783 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.CHANNEL_22: 4194304>, ScanDuration=254, nwkUpdateId=200)}
____________________ test_permit_join[FormedZStack3CC2531] _____________________
[gw43] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
args = ()
kwargs = {'device': <class 'tests.conftest.FormedZStack3CC2531'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff448d5a0>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff44d76a0>}
coro = <coroutine object test_permit_join at 0x7ffff45b7920>
task = <Task pending name='Task-6' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
@functools.wraps(func)
def inner(*args, **kwargs):
coro = func(*args, **kwargs)
if not inspect.isawaitable(coro):
pyfuncitem.warn(
pytest.PytestWarning(
f"The test {pyfuncitem} is marked with '@pytest.mark.asyncio' "
"but it is not an async function. "
"Please remove asyncio marker. "
"If the test is not marked explicitly, "
"check for global markers applied via 'pytestmark'."
)
)
return
task = asyncio.ensure_future(coro, loop=_loop)
try:
> _loop.run_until_complete(task)
_loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
args = ()
coro = <coroutine object test_permit_join at 0x7ffff45b7920>
func = <function test_permit_join at 0x7ffff475f010>
kwargs = {'device': <class 'tests.conftest.FormedZStack3CC2531'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff448d5a0>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff44d76a0>}
pyfuncitem = <Function test_permit_join[FormedZStack3CC2531]>
task = <Task pending name='Task-6' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
/nix/store/jzgqa79rzl4sqg4p6gxwl29s8jgqi3iq-python3.10-pytest-asyncio-0.20.3/lib/python3.10/site-packages/pytest_asyncio/plugin.py:478:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:636: in run_until_complete
self.run_forever()
future = <Task pending name='Task-6' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
new_task = False
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:603: in run_forever
self._run_once()
old_agen_hooks = asyncgen_hooks(firstiter=None, finalizer=None)
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:1871: in _run_once
event_list = self._selector.select(timeout)
handle = <TimerHandle cancelled when=1177477.423987146>
sched_count = 4
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 29.99993997393176
when = 1177492.426149048
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selectors.EpollSelector object at 0x7ffff44d7310>, timeout = 30.0
def select(self, timeout=None):
if timeout is None:
timeout = -1
elif timeout <= 0:
timeout = 0
else:
# epoll_wait() has a resolution of 1 millisecond, round away
# from zero to wait *at least* timeout seconds.
timeout = math.ceil(timeout * 1e3) * 1e-3
# epoll_wait() expects `maxevents` to be greater than zero;
# we want to make sure that `select()` can be called when no
# FD is registered.
max_ev = max(len(self._fd_to_key), 1)
ready = []
try:
> fd_event_list = self._selector.poll(timeout, max_ev)
E Failed: Timeout >300.0s
max_ev = 1
ready = []
self = <selectors.EpollSelector object at 0x7ffff44d7310>
timeout = 30.0
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/selectors.py:469: Failed
----------------------------- Captured stderr call -----------------------------
~~~~~~~~~~~~~~~~~~~~~ Stack of <unknown> (140737335465536) ~~~~~~~~~~~~~~~~~~~~~
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 285, in _perform_spawn
reply.run()
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 220, in run
self._result = func(*args, **kwargs)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 967, in _thread_receiver
msg = Message.from_io(io)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 432, in from_io
header = io.read(9) # type 1, channel 4, payload 4
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 400, in read
data = self._read(numbytes - len(buf))
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:50.530 WARNING Server does not have a handler for command SYS.NVLength.Req(SysId=1, ItemId=4, SubId=0)
2023-04-05 20:43:50.789 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:05.805 WARNING Coordinator does not support energy scanning
____________________ test_permit_join[FormedZStack1CC2531] _____________________
[gw21] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
args = ()
kwargs = {'device': <class 'tests.conftest.FormedZStack1CC2531'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff4490670>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff4498040>}
coro = <coroutine object test_permit_join at 0x7ffff45b7450>
task = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
@functools.wraps(func)
def inner(*args, **kwargs):
coro = func(*args, **kwargs)
if not inspect.isawaitable(coro):
pyfuncitem.warn(
pytest.PytestWarning(
f"The test {pyfuncitem} is marked with '@pytest.mark.asyncio' "
"but it is not an async function. "
"Please remove asyncio marker. "
"If the test is not marked explicitly, "
"check for global markers applied via 'pytestmark'."
)
)
return
task = asyncio.ensure_future(coro, loop=_loop)
try:
> _loop.run_until_complete(task)
_loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
args = ()
coro = <coroutine object test_permit_join at 0x7ffff45b7450>
func = <function test_permit_join at 0x7ffff475f010>
kwargs = {'device': <class 'tests.conftest.FormedZStack1CC2531'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff4490670>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff4498040>}
pyfuncitem = <Function test_permit_join[FormedZStack1CC2531]>
task = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
/nix/store/jzgqa79rzl4sqg4p6gxwl29s8jgqi3iq-python3.10-pytest-asyncio-0.20.3/lib/python3.10/site-packages/pytest_asyncio/plugin.py:478:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:636: in run_until_complete
self.run_forever()
future = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
new_task = False
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:603: in run_forever
self._run_once()
old_agen_hooks = asyncgen_hooks(firstiter=None, finalizer=None)
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:1871: in _run_once
event_list = self._selector.select(timeout)
handle = <TimerHandle cancelled when=1177477.48220799>
sched_count = 4
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 29.999958090949804
when = 1177492.484354604
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selectors.EpollSelector object at 0x7ffff4498070>, timeout = 30.0
def select(self, timeout=None):
if timeout is None:
timeout = -1
elif timeout <= 0:
timeout = 0
else:
# epoll_wait() has a resolution of 1 millisecond, round away
# from zero to wait *at least* timeout seconds.
timeout = math.ceil(timeout * 1e3) * 1e-3
# epoll_wait() expects `maxevents` to be greater than zero;
# we want to make sure that `select()` can be called when no
# FD is registered.
max_ev = max(len(self._fd_to_key), 1)
ready = []
try:
> fd_event_list = self._selector.poll(timeout, max_ev)
E Failed: Timeout >300.0s
max_ev = 1
ready = []
self = <selectors.EpollSelector object at 0x7ffff4498070>
timeout = 30.0
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/selectors.py:469: Failed
----------------------------- Captured stderr call -----------------------------
~~~~~~~~~~~~~~~~~~~~~ Stack of <unknown> (140737335465536) ~~~~~~~~~~~~~~~~~~~~~
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 285, in _perform_spawn
reply.run()
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 220, in run
self._result = func(*args, **kwargs)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 967, in _thread_receiver
msg = Message.from_io(io)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 432, in from_io
header = io.read(9) # type 1, channel 4, payload 4
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 400, in read
data = self._read(numbytes - len(buf))
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:50.829 WARNING Your network is using the insecure Zigbee2MQTT network key!
2023-04-05 20:43:50.844 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:05.860 WARNING Coordinator does not support energy scanning
__________________ test_permit_join[FormedLaunchpadCC26X2R1] ___________________
[gw1] linux -- Python 3.10.10 /nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/bin/python3.10
args = ()
kwargs = {'device': <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff4454a60>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff4470910>}
coro = <coroutine object test_permit_join at 0x7ffff442fd10>
task = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
@functools.wraps(func)
def inner(*args, **kwargs):
coro = func(*args, **kwargs)
if not inspect.isawaitable(coro):
pyfuncitem.warn(
pytest.PytestWarning(
f"The test {pyfuncitem} is marked with '@pytest.mark.asyncio' "
"but it is not an async function. "
"Please remove asyncio marker. "
"If the test is not marked explicitly, "
"check for global markers applied via 'pytestmark'."
)
)
return
task = asyncio.ensure_future(coro, loop=_loop)
try:
> _loop.run_until_complete(task)
_loop = <_UnixSelectorEventLoop running=False closed=False debug=False>
args = ()
coro = <coroutine object test_permit_join at 0x7ffff442fd10>
func = <function test_permit_join at 0x7ffff45b6d40>
kwargs = {'device': <class 'tests.conftest.FormedLaunchpadCC26X2R1'>, 'make_application': <function make_application.<locals>.inner at 0x7ffff4454a60>, 'mocker': <pytest_mock.plugin.MockerFixture object at 0x7ffff4470910>}
pyfuncitem = <Function test_permit_join[FormedLaunchpadCC26X2R1]>
task = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
/nix/store/jzgqa79rzl4sqg4p6gxwl29s8jgqi3iq-python3.10-pytest-asyncio-0.20.3/lib/python3.10/site-packages/pytest_asyncio/plugin.py:478:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:636: in run_until_complete
self.run_forever()
future = <Task pending name='Task-3' coro=<test_permit_join() running at /build/source/tests/application/test_joining.py:65> wa...for_responses.<locals>.<lambda>() at /build/source/zigpy_znp/api.py:932, Task.task_wakeup()]> cb=[Task.task_wakeup()]>>
new_task = False
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:603: in run_forever
self._run_once()
old_agen_hooks = asyncgen_hooks(firstiter=None, finalizer=None)
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/asyncio/base_events.py:1871: in _run_once
event_list = self._selector.select(timeout)
handle = <TimerHandle cancelled when=1177479.627787606>
sched_count = 4
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
timeout = 29.999959462089464
when = 1177494.629910163
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <selectors.EpollSelector object at 0x7ffff44737f0>, timeout = 30.0
def select(self, timeout=None):
if timeout is None:
timeout = -1
elif timeout <= 0:
timeout = 0
else:
# epoll_wait() has a resolution of 1 millisecond, round away
# from zero to wait *at least* timeout seconds.
timeout = math.ceil(timeout * 1e3) * 1e-3
# epoll_wait() expects `maxevents` to be greater than zero;
# we want to make sure that `select()` can be called when no
# FD is registered.
max_ev = max(len(self._fd_to_key), 1)
ready = []
try:
> fd_event_list = self._selector.poll(timeout, max_ev)
E Failed: Timeout >300.0s
max_ev = 1
ready = []
self = <selectors.EpollSelector object at 0x7ffff44737f0>
timeout = 30.0
/nix/store/syz2y6j53y5hpzbs7l0965zwxshi8iyl-python3-3.10.10/lib/python3.10/selectors.py:469: Failed
----------------------------- Captured stderr call -----------------------------
~~~~~~~~~~~~~~~~~~~~~ Stack of <unknown> (140737335465536) ~~~~~~~~~~~~~~~~~~~~~
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 285, in _perform_spawn
reply.run()
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 220, in run
self._result = func(*args, **kwargs)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 967, in _thread_receiver
msg = Message.from_io(io)
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 432, in from_io
header = io.read(9) # type 1, channel 4, payload 4
File "/nix/store/rpcg0qhpzkp30xh5pldwwh5yxpinssmq-python3.10-execnet-1.9.0/lib/python3.10/site-packages/execnet/gateway_base.py", line 400, in read
data = self._read(numbytes - len(buf))
------------------------------ Captured log call -------------------------------
2023-04-05 20:43:52.989 WARNING No ZDO handler on_zdo_mgmt_nwk_update_req, kwargs: {'NwkUpdate': NwkUpdate(ScanChannels=<Channels.ALL_CHANNELS: 134215680>, ScanDuration=4, ScanCount=1)}
2023-04-05 20:44:08.005 WARNING Coordinator does not support energy scanning
=========================== short test summary info ============================
FAILED tests/application/test_requests.py::test_zigpy_request[FormedZStack1CC2531] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_requests.py::test_zigpy_request[FormedZStack3CC2531] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack3CC2531] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedZStack1CC2531] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_requests.py::test_zigpy_request[FormedLaunchpadCC26X2R1] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_requests.py::test_zigpy_request_failure[FormedLaunchpadCC26X2R1] - zigpy_znp.exceptions.CommandNotRecognized: Fatal request error RPCError.Com...
FAILED tests/application/test_joining.py::test_join_device[FormedLaunchpadCC26X2R1] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-True-1-False] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-False] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_requests.py::test_request_recovery_route_rediscovery_zdo[FormedLaunchpadCC26X2R1] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-1-True] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_zdo_requests.py::test_mgmt_nwk_update_req[FormedLaunchpadCC26X2R1-False-200-True] - asyncio.exceptions.TimeoutError
FAILED tests/application/test_joining.py::test_permit_join[FormedZStack3CC2531] - Failed: Timeout >300.0s
FAILED tests/application/test_joining.py::test_permit_join[FormedZStack1CC2531] - Failed: Timeout >300.0s
FAILED tests/application/test_joining.py::test_permit_join[FormedLaunchpadCC26X2R1] - Failed: Timeout >300.0s
================== 15 failed, 390 passed in 328.92s (0:05:28) ==================
/nix/store/sw36plhp82916wwg6i6097rkzza7d950-stdenv-linux/setup: line 1594: pop_var_context: head of shell_variables not a function context
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment