Created
April 5, 2023 20:49
-
-
Save mweinelt/5ec098950ae2f0c0d49547e46660bf3e to your computer and use it in GitHub Desktop.
zigpy-znp 0.10.0 test failures with zigpy 0.54.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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