Running as unit: rb-build-amd64_25-54178.service; invocation ID: b563c03060af466ea67fbb4d3dc07327 ==================================================================================== Wed Sep 17 18:45:41 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job reproducible_builder_amd64_25) on jenkins, called using "ionos1-amd64 ionos5-amd64" as arguments. Wed Sep 17 18:45:41 UTC 2025 - actually running "reproducible_build.sh" (md5sum cc591790ab2c8e13f5e554202b95c89c) as "/tmp/jenkins-script-cbM69Yr6" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Wed Sep 17 18:45:41 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos1-amd64.debian.net is marked as down. Wed Sep 17 18:45:41 UTC 2025 - checking via ssh if ionos1-amd64.debian.net is up. removed '/tmp/read-only-fs-test-kB65U3' Wed Sep 17 18:45:41 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos5-amd64.debian.net is marked as down. Wed Sep 17 18:45:41 UTC 2025 - checking via ssh if ionos5-amd64.debian.net is up. removed '/tmp/read-only-fs-test-YYQgSo' ok, let's check if python-xknx is building anywhere yet… ok, python-xknx is not building anywhere… UPDATE 1 ============================================================================= Initialising reproducibly build of python-xknx in unstable on amd64 on jenkins now. 1st build will be done on ionos1-amd64.debian.net. 2nd build will be done on ionos5-amd64.debian.net. ============================================================================= Wed Sep 17 18:45:45 UTC 2025 I: starting to build python-xknx/unstable/amd64 on jenkins on '2025-09-17 18:45' Wed Sep 17 18:45:45 UTC 2025 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/amd64_25/54178/console.log 1758134745 amd64 unstable python-xknx Wed Sep 17 18:45:45 UTC 2025 I: Downloading source for unstable/python-xknx=3.6.0-1 --2025-09-17 18:45:45-- http://deb.debian.org/debian/pool/main/p/python-xknx/python-xknx_3.6.0-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2305 (2.3K) [text/prs.lines.tag] Saving to: ‘python-xknx_3.6.0-1.dsc’ 0K .. 100% 271M=0s 2025-09-17 18:45:45 (271 MB/s) - ‘python-xknx_3.6.0-1.dsc’ saved [2305/2305] --2025-09-17 18:45:45-- http://deb.debian.org/debian/pool/main/p/python-xknx/python-xknx_3.6.0-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2305 (2.3K) [text/prs.lines.tag] Saving to: ‘python-xknx_3.6.0-1.dsc’ 0K .. 100% 271M=0s 2025-09-17 18:45:45 (271 MB/s) - ‘python-xknx_3.6.0-1.dsc’ saved [2305/2305] Wed Sep 17 18:45:45 UTC 2025 I: python-xknx_3.6.0-1.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: python-xknx Binary: python3-xknx Architecture: all Version: 3.6.0-1 Maintainer: Home Assistant Team Uploaders: Thomas Goirand , Edward Betts Homepage: https://github.com/XKNX/xknx Standards-Version: 4.7.2 Vcs-Browser: https://salsa.debian.org/homeassistant-team/deps/python-xknx Vcs-Git: https://salsa.debian.org/homeassistant-team/deps/python-xknx.git Testsuite: autopkgtest Testsuite-Triggers: @builddeps@, pybuild-plugin-autopkgtest Build-Depends: debhelper-compat (= 13), openstack-pkg-tools, pybuild-plugin-pyproject, python3-all, python3-setuptools Build-Depends-Indep: python3-cryptography, python3-freezegun, python3-ifaddr, python3-mypy, python3-pytest, python3-pytest-asyncio, python3-pytest-cov Package-List: python3-xknx deb python optional arch=all Checksums-Sha1: fb1b4e7a64e010175706508e83af62613bd47902 711972 python-xknx_3.6.0.orig.tar.gz d098a6bc764469b27635548cf2dc4466cf8c1ff9 2608 python-xknx_3.6.0-1.debian.tar.xz Checksums-Sha256: da656542aea978847596de8c0b6ee1a87339291c048f202bf5ae89e44ce57d8f 711972 python-xknx_3.6.0.orig.tar.gz 13a515a60a3a6e98e9ad4374b06ff43bd5eb8d6d004371c2c03550d282b17776 2608 python-xknx_3.6.0-1.debian.tar.xz Files: f2ddc5c39ccebf230b0f7efde0ef2627 711972 python-xknx_3.6.0.orig.tar.gz 9ab1195617eee49bde4b63960239e33a 2608 python-xknx_3.6.0-1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE+4rPp4xyYInDitAmlgWhCYxjuSoFAmfkIzYACgkQlgWhCYxj uSqQOQ//R/ifNoUjHWZt5FK1koleeu42g+VSlLhRKE22b9Etgk8v8mq8RSnSOTyQ Jy6BqaPVL8l8sDi5XZMumlmpCwXyM6vOram6uDQ4qjnRn8MfuLwD7Cdfmxp7GfdF +6cXQkx9e9ZvSF0yuqVm+b0WXEwD2xDRwtURCpu01nuXhXeN7vUtX8qozKvXOeTN JEYhEKwjConnPEoIlU7UMLGEAAwaqiWkXCbYZgHlMxRfOGiSfcSn/JC3fWHsR+Ck S1f/cMv9Dp7u9BJm17oX95hq4TxBkMS2rlp9VussvB+ns0U9UjgTQGdOxX6ULrVD YjIDcrn6rw2pyNvXgU/hZ1jyeaYZlxwyYDuvSh+gulKCt2z3+gBUW1hdUX1aU52I LjmU2/CMPKOqrets3Tj9tMWMQlDuOhJURdkeTuxXfBZ1a8FEvYFWbmb3cXy7pMJy dph0E4lqcXF36vTn7iySCNIbS3qMtEP9M14fsDGCjwViuoQ6tY5B77OE1GiJ5ZGN 694VCLh+1XDZt6G8YoWCahF/icpf0JQIJk/NzYGQaZY42CYINFhPO1gv/fNKpzmz xWEUNhXczqqJNwkjZQv6oii+YrHefhwgKqzPx/a8pSDqii5ZeaHg9D3DSkPqBQ4D d3DkJlpRNbAiH9mu7imPV0SSecgZMHopb6O15sX+iYqBkzm8FN8= =eRUg -----END PGP SIGNATURE----- Wed Sep 17 18:45:45 UTC 2025 I: Checking whether the package is not for us Wed Sep 17 18:45:45 UTC 2025 I: Starting 1st build on remote node ionos1-amd64.debian.net. Wed Sep 17 18:45:45 UTC 2025 I: Preparing to do remote build '1' on ionos1-amd64.debian.net. Wed Sep 17 18:45:45 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos1-amd64.debian.net is marked as down. Wed Sep 17 18:45:45 UTC 2025 - checking via ssh if ionos1-amd64.debian.net is up. removed '/tmp/read-only-fs-test-CWo9EG' ==================================================================================== Wed Sep 17 18:45:45 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on ionos1-amd64, called using "1 python-xknx unstable /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn 3.6.0-1" as arguments. Wed Sep 17 18:45:45 UTC 2025 - actually running "reproducible_build.sh" (md5sum cc591790ab2c8e13f5e554202b95c89c) as "/tmp/jenkins-script-zfItQIjK" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Wed Sep 17 18:45:45 UTC 2025 I: Downloading source for unstable/python-xknx=3.6.0-1 Reading package lists... NOTICE: 'python-xknx' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/homeassistant-team/deps/python-xknx.git Please use: git clone https://salsa.debian.org/homeassistant-team/deps/python-xknx.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 717 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (dsc) [2305 B] Get:2 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (tar) [712 kB] Get:3 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (diff) [2608 B] Fetched 717 kB in 0s (5439 kB/s) Download complete and in download only mode Reading package lists... NOTICE: 'python-xknx' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/homeassistant-team/deps/python-xknx.git Please use: git clone https://salsa.debian.org/homeassistant-team/deps/python-xknx.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 717 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (dsc) [2305 B] Get:2 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (tar) [712 kB] Get:3 http://deb.debian.org/debian unstable/main python-xknx 3.6.0-1 (diff) [2608 B] Fetched 717 kB in 0s (5439 kB/s) Download complete and in download only mode ============================================================================= Building python-xknx in unstable on amd64 on ionos1-amd64 now. Date: Wed Sep 17 18:45:46 UTC 2025 Date UTC: Wed Sep 17 18:45:46 UTC 2025 ============================================================================= W: /root/.pbuilderrc does not exist I: Logging to b1/build.log I: pbuilder: network access will be disabled during build I: Current time: Wed Sep 17 06:45:46 -12 2025 I: pbuilder-time-stamp: 1758134746 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [python-xknx_3.6.0-1.dsc] I: copying [./python-xknx_3.6.0.orig.tar.gz] I: copying [./python-xknx_3.6.0-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./python-xknx_3.6.0-1.dsc: no acceptable signature found dpkg-source: info: extracting python-xknx in python-xknx-3.6.0 dpkg-source: info: unpacking python-xknx_3.6.0.orig.tar.gz dpkg-source: info: unpacking python-xknx_3.6.0-1.debian.tar.xz I: using fakeroot in build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/113504/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='amd64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=40 ' DISTRIBUTION='unstable' HOME='/root' HOST_ARCH='amd64' IFS=' ' INVOCATION_ID='121814075efb40bfb0ae038c6b643bd4' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='113504' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/pbuilderrc_ofDa --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/b1 --logfile b1/build.log python-xknx_3.6.0-1.dsc' SUDO_GID='110' SUDO_HOME='/var/lib/jenkins' SUDO_UID='105' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://46.16.76.132:3128' I: uname -a Linux ionos1-amd64 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin I: user script /srv/workspace/pbuilder/113504/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: amd64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), openstack-pkg-tools, pybuild-plugin-pyproject, python3-all, python3-setuptools, python3-cryptography, python3-freezegun, python3-ifaddr, python3-mypy, python3-pytest, python3-pytest-asyncio, python3-pytest-cov dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19917 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on openstack-pkg-tools; however: Package openstack-pkg-tools is not installed. pbuilder-satisfydepends-dummy depends on pybuild-plugin-pyproject; however: Package pybuild-plugin-pyproject is not installed. pbuilder-satisfydepends-dummy depends on python3-all; however: Package python3-all is not installed. pbuilder-satisfydepends-dummy depends on python3-setuptools; however: Package python3-setuptools is not installed. pbuilder-satisfydepends-dummy depends on python3-cryptography; however: Package python3-cryptography is not installed. pbuilder-satisfydepends-dummy depends on python3-freezegun; however: Package python3-freezegun is not installed. pbuilder-satisfydepends-dummy depends on python3-ifaddr; however: Package python3-ifaddr is not installed. pbuilder-satisfydepends-dummy depends on python3-mypy; however: Package python3-mypy is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-asyncio; however: Package python3-pytest-asyncio is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-cov; however: Package python3-pytest-cov is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} jq{a} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libffi8{a} libfile-stripnondeterminism-perl{a} libjq1{a} libjs-jquery{a} libjs-jquery-hotkeys{a} libjs-jquery-isonscreen{a} libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-jquery-throttle-debounce{a} libmagic-mgc{a} libmagic1t64{a} libonig5{a} libpipeline1{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2-16{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} openstack-pkg-tools{a} po-debconf{a} pybuild-plugin-pyproject{a} python3{a} python3-all{a} python3-async-generator{a} python3-autocommand{a} python3-bcrypt{a} python3-build{a} python3-cffi-backend{a} python3-coverage{a} python3-cryptography{a} python3-dateutil{a} python3-freezegun{a} python3-ifaddr{a} python3-inflect{a} python3-iniconfig{a} python3-installer{a} python3-jaraco.context{a} python3-jaraco.functools{a} python3-jaraco.text{a} python3-minimal{a} python3-more-itertools{a} python3-mypy{a} python3-mypy-extensions{a} python3-packaging{a} python3-pathspec{a} python3-pip{a} python3-pkg-resources{a} python3-pluggy{a} python3-psutil{a} python3-pygments{a} python3-pyproject-hooks{a} python3-pytest{a} python3-pytest-asyncio{a} python3-pytest-cov{a} python3-setuptools{a} python3-typeguard{a} python3-typing-extensions{a} python3-wheel{a} python3-zipp{a} python3.13{a} python3.13-minimal{a} readline-common{a} sensible-utils{a} tzdata{a} The following packages are RECOMMENDED but will NOT be installed: autopkgtest curl javascript-common libarchive-cpio-perl libjs-sphinxdoc libltdl-dev libmail-sendmail-perl lynx madison-lite pristine-tar python3-dev python3-lxml python3-orjson wget 0 packages upgraded, 93 newly installed, 0 to remove and 0 not upgraded. Need to get 35.8 MB of archives. After unpacking 152 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main amd64 libexpat1 amd64 2.7.2-1 [111 kB] Get: 2 http://deb.debian.org/debian unstable/main amd64 libpython3.13-minimal amd64 3.13.7-1 [864 kB] Get: 3 http://deb.debian.org/debian unstable/main amd64 python3.13-minimal amd64 3.13.7-1 [2216 kB] Get: 4 http://deb.debian.org/debian unstable/main amd64 python3-minimal amd64 3.13.7-1 [27.2 kB] Get: 5 http://deb.debian.org/debian unstable/main amd64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian unstable/main amd64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian unstable/main amd64 tzdata all 2025b-5 [260 kB] Get: 8 http://deb.debian.org/debian unstable/main amd64 libffi8 amd64 3.5.2-2 [25.5 kB] Get: 9 http://deb.debian.org/debian unstable/main amd64 readline-common all 8.3-3 [74.8 kB] Get: 10 http://deb.debian.org/debian unstable/main amd64 libreadline8t64 amd64 8.3-3 [191 kB] Get: 11 http://deb.debian.org/debian unstable/main amd64 libpython3.13-stdlib amd64 3.13.7-1 [1960 kB] Get: 12 http://deb.debian.org/debian unstable/main amd64 python3.13 amd64 3.13.7-1 [761 kB] Get: 13 http://deb.debian.org/debian unstable/main amd64 libpython3-stdlib amd64 3.13.7-1 [10.2 kB] Get: 14 http://deb.debian.org/debian unstable/main amd64 python3 amd64 3.13.7-1 [28.3 kB] Get: 15 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.26 [27.0 kB] Get: 16 http://deb.debian.org/debian unstable/main amd64 openssl amd64 3.5.2-1 [1493 kB] Get: 17 http://deb.debian.org/debian unstable/main amd64 ca-certificates all 20250419 [162 kB] Get: 18 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.46-5 [338 kB] Get: 19 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.46-5 [109 kB] Get: 20 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.46-5 [43.6 kB] Get: 21 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.23.1-2+b1 [244 kB] Get: 22 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-2 [68.5 kB] Get: 23 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-9 [1187 kB] Get: 24 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.41.1-3 [100 kB] Get: 25 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-1 [42.0 kB] Get: 26 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.13.1-1 [1469 kB] Get: 27 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.20-1 [324 kB] Get: 28 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.72-3.1 [494 kB] Get: 29 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20240727.1 [60.2 kB] Get: 30 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.17-4 [862 kB] Get: 31 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.23.1-2 [770 kB] Get: 32 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.26 [91.8 kB] Get: 33 http://deb.debian.org/debian unstable/main amd64 libtool all 2.5.4-5 [540 kB] Get: 34 http://deb.debian.org/debian unstable/main amd64 dh-autoreconf all 21 [12.2 kB] Get: 35 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 36 http://deb.debian.org/debian unstable/main amd64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Get: 37 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Get: 38 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.193-3 [192 kB] Get: 39 http://deb.debian.org/debian unstable/main amd64 dwz amd64 0.16-2 [108 kB] Get: 40 http://deb.debian.org/debian unstable/main amd64 libunistring5 amd64 1.3-2 [477 kB] Get: 41 http://deb.debian.org/debian unstable/main amd64 libxml2-16 amd64 2.14.5+dfsg-0.2 [638 kB] Get: 42 http://deb.debian.org/debian unstable/main amd64 gettext amd64 0.23.1-2+b1 [1680 kB] Get: 43 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 44 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 45 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.26 [939 kB] Get: 46 http://deb.debian.org/debian unstable/main amd64 dh-python all 6.20250414 [116 kB] Get: 47 http://deb.debian.org/debian unstable/main amd64 libonig5 amd64 6.9.10-1 [200 kB] Get: 48 http://deb.debian.org/debian unstable/main amd64 libjq1 amd64 1.8.1-3 [167 kB] Get: 49 http://deb.debian.org/debian unstable/main amd64 jq amd64 1.8.1-3 [85.3 kB] Get: 50 http://deb.debian.org/debian unstable/main amd64 libjs-jquery all 3.7.1+dfsg+~3.5.33-1 [319 kB] Get: 51 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-hotkeys all 0.2.0-1 [12.6 kB] Get: 52 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-isonscreen all 1.2.0-1.1 [3196 B] Get: 53 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-metadata all 12-4 [6532 B] Get: 54 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [184 kB] Get: 55 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.2 kB] Get: 56 http://deb.debian.org/debian unstable/main amd64 python3-packaging all 25.0-1 [56.6 kB] Get: 57 http://deb.debian.org/debian unstable/main amd64 python3-wheel all 0.46.1-2 [21.7 kB] Get: 58 http://deb.debian.org/debian unstable/main amd64 python3-pip all 25.2+dfsg-1 [1386 kB] Get: 59 http://deb.debian.org/debian unstable/main amd64 openstack-pkg-tools all 135 [98.7 kB] Get: 60 http://deb.debian.org/debian unstable/main amd64 python3-pyproject-hooks all 1.2.0-1 [11.7 kB] Get: 61 http://deb.debian.org/debian unstable/main amd64 python3-build all 1.2.2-4 [36.2 kB] Get: 62 http://deb.debian.org/debian unstable/main amd64 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Get: 63 http://deb.debian.org/debian unstable/main amd64 pybuild-plugin-pyproject all 6.20250414 [11.8 kB] Get: 64 http://deb.debian.org/debian unstable/main amd64 python3-all amd64 3.13.7-1 [1048 B] Get: 65 http://deb.debian.org/debian unstable/main amd64 python3-async-generator all 1.10-4 [17.4 kB] Get: 66 http://deb.debian.org/debian unstable/main amd64 python3-autocommand all 2.2.2-3 [13.6 kB] Get: 67 http://deb.debian.org/debian unstable/main amd64 python3-bcrypt amd64 4.3.0-1 [212 kB] Get: 68 http://deb.debian.org/debian unstable/main amd64 python3-cffi-backend amd64 2.0.0-1 [102 kB] Get: 69 http://deb.debian.org/debian unstable/main amd64 python3-coverage amd64 7.8.2+dfsg1-1 [182 kB] Get: 70 http://deb.debian.org/debian unstable/main amd64 python3-cryptography amd64 43.0.0-3 [941 kB] Get: 71 http://deb.debian.org/debian unstable/main amd64 python3-dateutil all 2.9.0-4 [79.4 kB] Get: 72 http://deb.debian.org/debian unstable/main amd64 python3-freezegun all 1.5.1-1.2 [17.2 kB] Get: 73 http://deb.debian.org/debian unstable/main amd64 python3-ifaddr all 0.2.0-2 [9916 B] Get: 74 http://deb.debian.org/debian unstable/main amd64 python3-more-itertools all 10.8.0-1 [71.7 kB] Get: 75 http://deb.debian.org/debian unstable/main amd64 python3-typing-extensions all 4.15.0-1 [92.4 kB] Get: 76 http://deb.debian.org/debian unstable/main amd64 python3-typeguard all 4.4.4-1 [37.1 kB] Get: 77 http://deb.debian.org/debian unstable/main amd64 python3-inflect all 7.5.0-1 [33.0 kB] Get: 78 http://deb.debian.org/debian unstable/main amd64 python3-iniconfig all 1.1.1-2 [6396 B] Get: 79 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Get: 80 http://deb.debian.org/debian unstable/main amd64 python3-pkg-resources all 78.1.1-0.1 [224 kB] Get: 81 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Get: 82 http://deb.debian.org/debian unstable/main amd64 python3-zipp all 3.23.0-1 [11.0 kB] Get: 83 http://deb.debian.org/debian unstable/main amd64 python3-setuptools all 78.1.1-0.1 [738 kB] Get: 84 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.context all 6.0.1-1 [8276 B] Get: 85 http://deb.debian.org/debian unstable/main amd64 python3-mypy-extensions all 1.1.0-1 [6656 B] Get: 86 http://deb.debian.org/debian unstable/main amd64 python3-pathspec all 0.12.1-1 [28.1 kB] Get: 87 http://deb.debian.org/debian unstable/main amd64 python3-psutil amd64 7.0.0-2 [220 kB] Get: 88 http://deb.debian.org/debian unstable/main amd64 python3-mypy amd64 1.18.1-1 [9407 kB] Get: 89 http://deb.debian.org/debian unstable/main amd64 python3-pluggy all 1.6.0-1 [27.1 kB] Get: 90 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.18.0+dfsg-2 [836 kB] Get: 91 http://deb.debian.org/debian unstable/main amd64 python3-pytest all 8.4.2-1 [266 kB] Get: 92 http://deb.debian.org/debian unstable/main amd64 python3-pytest-asyncio all 1.1.0-2 [13.1 kB] Get: 93 http://deb.debian.org/debian unstable/main amd64 python3-pytest-cov all 5.0.0-1 [26.8 kB] Fetched 35.8 MB in 1s (42.5 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19917 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.2-1_amd64.deb ... Unpacking libexpat1:amd64 (2.7.2-1) ... Selecting previously unselected package libpython3.13-minimal:amd64. Preparing to unpack .../libpython3.13-minimal_3.13.7-1_amd64.deb ... Unpacking libpython3.13-minimal:amd64 (3.13.7-1) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.7-1_amd64.deb ... Unpacking python3.13-minimal (3.13.7-1) ... Setting up libpython3.13-minimal:amd64 (3.13.7-1) ... Setting up libexpat1:amd64 (2.7.2-1) ... Setting up python3.13-minimal (3.13.7-1) ... Selecting previously unselected package python3-minimal. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 20251 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.7-1_amd64.deb ... Unpacking python3-minimal (3.13.7-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-5_all.deb ... Unpacking tzdata (2025b-5) ... Selecting previously unselected package libffi8:amd64. Preparing to unpack .../4-libffi8_3.5.2-2_amd64.deb ... Unpacking libffi8:amd64 (3.5.2-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.3-3_all.deb ... Unpacking readline-common (8.3-3) ... Selecting previously unselected package libreadline8t64:amd64. Preparing to unpack .../6-libreadline8t64_8.3-3_amd64.deb ... Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8 to /lib/x86_64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8.2 to /lib/x86_64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8 to /lib/x86_64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8.2 to /lib/x86_64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:amd64 (8.3-3) ... Selecting previously unselected package libpython3.13-stdlib:amd64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.7-1_amd64.deb ... Unpacking libpython3.13-stdlib:amd64 (3.13.7-1) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.7-1_amd64.deb ... Unpacking python3.13 (3.13.7-1) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../9-libpython3-stdlib_3.13.7-1_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.13.7-1) ... Setting up python3-minimal (3.13.7-1) ... Selecting previously unselected package python3. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 21266 files and directories currently installed.) Preparing to unpack .../00-python3_3.13.7-1_amd64.deb ... Unpacking python3 (3.13.7-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../01-sensible-utils_0.0.26_all.deb ... Unpacking sensible-utils (0.0.26) ... Selecting previously unselected package openssl. Preparing to unpack .../02-openssl_3.5.2-1_amd64.deb ... Unpacking openssl (3.5.2-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../03-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../04-libmagic-mgc_1%3a5.46-5_amd64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:amd64. Preparing to unpack .../05-libmagic1t64_1%3a5.46-5_amd64.deb ... Unpacking libmagic1t64:amd64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../06-file_1%3a5.46-5_amd64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../07-gettext-base_0.23.1-2+b1_amd64.deb ... Unpacking gettext-base (0.23.1-2+b1) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../08-libuchardet0_0.0.8-2_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.8-2) ... Selecting previously unselected package groff-base. Preparing to unpack .../09-groff-base_1.23.0-9_amd64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../10-bsdextrautils_2.41.1-3_amd64.deb ... Unpacking bsdextrautils (2.41.1-3) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../11-libpipeline1_1.5.8-1_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../12-man-db_2.13.1-1_amd64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../13-m4_1.4.20-1_amd64.deb ... Unpacking m4 (1.4.20-1) ... Selecting previously unselected package autoconf. Preparing to unpack .../14-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../15-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../16-automake_1%3a1.17-4_all.deb ... Unpacking automake (1:1.17-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../17-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../18-libdebhelper-perl_13.26_all.deb ... Unpacking libdebhelper-perl (13.26) ... Selecting previously unselected package libtool. Preparing to unpack .../19-libtool_2.5.4-5_all.deb ... Unpacking libtool (2.5.4-5) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../20-dh-autoreconf_21_all.deb ... Unpacking dh-autoreconf (21) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../21-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../22-libfile-stripnondeterminism-perl_1.15.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.15.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../23-dh-strip-nondeterminism_1.15.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.15.0-1) ... Selecting previously unselected package libelf1t64:amd64. Preparing to unpack .../24-libelf1t64_0.193-3_amd64.deb ... Unpacking libelf1t64:amd64 (0.193-3) ... Selecting previously unselected package dwz. Preparing to unpack .../25-dwz_0.16-2_amd64.deb ... Unpacking dwz (0.16-2) ... Selecting previously unselected package libunistring5:amd64. Preparing to unpack .../26-libunistring5_1.3-2_amd64.deb ... Unpacking libunistring5:amd64 (1.3-2) ... Selecting previously unselected package libxml2-16:amd64. Preparing to unpack .../27-libxml2-16_2.14.5+dfsg-0.2_amd64.deb ... Unpacking libxml2-16:amd64 (2.14.5+dfsg-0.2) ... Selecting previously unselected package gettext. Preparing to unpack .../28-gettext_0.23.1-2+b1_amd64.deb ... Unpacking gettext (0.23.1-2+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../29-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../30-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../31-debhelper_13.26_all.deb ... Unpacking debhelper (13.26) ... Selecting previously unselected package dh-python. Preparing to unpack .../32-dh-python_6.20250414_all.deb ... Unpacking dh-python (6.20250414) ... Selecting previously unselected package libonig5:amd64. Preparing to unpack .../33-libonig5_6.9.10-1_amd64.deb ... Unpacking libonig5:amd64 (6.9.10-1) ... Selecting previously unselected package libjq1:amd64. Preparing to unpack .../34-libjq1_1.8.1-3_amd64.deb ... Unpacking libjq1:amd64 (1.8.1-3) ... Selecting previously unselected package jq. Preparing to unpack .../35-jq_1.8.1-3_amd64.deb ... Unpacking jq (1.8.1-3) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../36-libjs-jquery_3.7.1+dfsg+~3.5.33-1_all.deb ... Unpacking libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Selecting previously unselected package libjs-jquery-hotkeys. Preparing to unpack .../37-libjs-jquery-hotkeys_0.2.0-1_all.deb ... Unpacking libjs-jquery-hotkeys (0.2.0-1) ... Selecting previously unselected package libjs-jquery-isonscreen. Preparing to unpack .../38-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... Selecting previously unselected package libjs-jquery-metadata. Preparing to unpack .../39-libjs-jquery-metadata_12-4_all.deb ... Unpacking libjs-jquery-metadata (12-4) ... Selecting previously unselected package libjs-jquery-tablesorter. Preparing to unpack .../40-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Selecting previously unselected package libjs-jquery-throttle-debounce. Preparing to unpack .../41-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../42-python3-packaging_25.0-1_all.deb ... Unpacking python3-packaging (25.0-1) ... Selecting previously unselected package python3-wheel. Preparing to unpack .../43-python3-wheel_0.46.1-2_all.deb ... Unpacking python3-wheel (0.46.1-2) ... Selecting previously unselected package python3-pip. Preparing to unpack .../44-python3-pip_25.2+dfsg-1_all.deb ... Unpacking python3-pip (25.2+dfsg-1) ... Selecting previously unselected package openstack-pkg-tools. Preparing to unpack .../45-openstack-pkg-tools_135_all.deb ... Unpacking openstack-pkg-tools (135) ... Selecting previously unselected package python3-pyproject-hooks. Preparing to unpack .../46-python3-pyproject-hooks_1.2.0-1_all.deb ... Unpacking python3-pyproject-hooks (1.2.0-1) ... Selecting previously unselected package python3-build. Preparing to unpack .../47-python3-build_1.2.2-4_all.deb ... Unpacking python3-build (1.2.2-4) ... Selecting previously unselected package python3-installer. Preparing to unpack .../48-python3-installer_0.7.0+dfsg1-3_all.deb ... Unpacking python3-installer (0.7.0+dfsg1-3) ... Selecting previously unselected package pybuild-plugin-pyproject. Preparing to unpack .../49-pybuild-plugin-pyproject_6.20250414_all.deb ... Unpacking pybuild-plugin-pyproject (6.20250414) ... Selecting previously unselected package python3-all. Preparing to unpack .../50-python3-all_3.13.7-1_amd64.deb ... Unpacking python3-all (3.13.7-1) ... Selecting previously unselected package python3-async-generator. Preparing to unpack .../51-python3-async-generator_1.10-4_all.deb ... Unpacking python3-async-generator (1.10-4) ... Selecting previously unselected package python3-autocommand. Preparing to unpack .../52-python3-autocommand_2.2.2-3_all.deb ... Unpacking python3-autocommand (2.2.2-3) ... Selecting previously unselected package python3-bcrypt. Preparing to unpack .../53-python3-bcrypt_4.3.0-1_amd64.deb ... Unpacking python3-bcrypt (4.3.0-1) ... Selecting previously unselected package python3-cffi-backend:amd64. Preparing to unpack .../54-python3-cffi-backend_2.0.0-1_amd64.deb ... Unpacking python3-cffi-backend:amd64 (2.0.0-1) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../55-python3-coverage_7.8.2+dfsg1-1_amd64.deb ... Unpacking python3-coverage (7.8.2+dfsg1-1) ... Selecting previously unselected package python3-cryptography. Preparing to unpack .../56-python3-cryptography_43.0.0-3_amd64.deb ... Unpacking python3-cryptography (43.0.0-3) ... Selecting previously unselected package python3-dateutil. Preparing to unpack .../57-python3-dateutil_2.9.0-4_all.deb ... Unpacking python3-dateutil (2.9.0-4) ... Selecting previously unselected package python3-freezegun. Preparing to unpack .../58-python3-freezegun_1.5.1-1.2_all.deb ... Unpacking python3-freezegun (1.5.1-1.2) ... Selecting previously unselected package python3-ifaddr. Preparing to unpack .../59-python3-ifaddr_0.2.0-2_all.deb ... Unpacking python3-ifaddr (0.2.0-2) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../60-python3-more-itertools_10.8.0-1_all.deb ... Unpacking python3-more-itertools (10.8.0-1) ... Selecting previously unselected package python3-typing-extensions. Preparing to unpack .../61-python3-typing-extensions_4.15.0-1_all.deb ... Unpacking python3-typing-extensions (4.15.0-1) ... Selecting previously unselected package python3-typeguard. Preparing to unpack .../62-python3-typeguard_4.4.4-1_all.deb ... Unpacking python3-typeguard (4.4.4-1) ... Selecting previously unselected package python3-inflect. Preparing to unpack .../63-python3-inflect_7.5.0-1_all.deb ... Unpacking python3-inflect (7.5.0-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../64-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-jaraco.functools. Preparing to unpack .../65-python3-jaraco.functools_4.1.0-1_all.deb ... Unpacking python3-jaraco.functools (4.1.0-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../66-python3-pkg-resources_78.1.1-0.1_all.deb ... Unpacking python3-pkg-resources (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.text. Preparing to unpack .../67-python3-jaraco.text_4.0.0-1_all.deb ... Unpacking python3-jaraco.text (4.0.0-1) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../68-python3-zipp_3.23.0-1_all.deb ... Unpacking python3-zipp (3.23.0-1) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../69-python3-setuptools_78.1.1-0.1_all.deb ... Unpacking python3-setuptools (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.context. Preparing to unpack .../70-python3-jaraco.context_6.0.1-1_all.deb ... Unpacking python3-jaraco.context (6.0.1-1) ... Selecting previously unselected package python3-mypy-extensions. Preparing to unpack .../71-python3-mypy-extensions_1.1.0-1_all.deb ... Unpacking python3-mypy-extensions (1.1.0-1) ... Selecting previously unselected package python3-pathspec. Preparing to unpack .../72-python3-pathspec_0.12.1-1_all.deb ... Unpacking python3-pathspec (0.12.1-1) ... Selecting previously unselected package python3-psutil. Preparing to unpack .../73-python3-psutil_7.0.0-2_amd64.deb ... Unpacking python3-psutil (7.0.0-2) ... Selecting previously unselected package python3-mypy. Preparing to unpack .../74-python3-mypy_1.18.1-1_amd64.deb ... Unpacking python3-mypy (1.18.1-1) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../75-python3-pluggy_1.6.0-1_all.deb ... Unpacking python3-pluggy (1.6.0-1) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../76-python3-pygments_2.18.0+dfsg-2_all.deb ... Unpacking python3-pygments (2.18.0+dfsg-2) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../77-python3-pytest_8.4.2-1_all.deb ... Unpacking python3-pytest (8.4.2-1) ... Selecting previously unselected package python3-pytest-asyncio. Preparing to unpack .../78-python3-pytest-asyncio_1.1.0-2_all.deb ... Unpacking python3-pytest-asyncio (1.1.0-2) ... Selecting previously unselected package python3-pytest-cov. Preparing to unpack .../79-python3-pytest-cov_5.0.0-1_all.deb ... Unpacking python3-pytest-cov (5.0.0-1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:amd64 (1.5.8-1) ... Setting up bsdextrautils (2.41.1-3) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libxml2-16:amd64 (2.14.5+dfsg-0.2) ... Setting up libdebhelper-perl (13.26) ... Setting up libmagic1t64:amd64 (1:5.46-5) ... Setting up gettext-base (0.23.1-2+b1) ... Setting up m4 (1.4.20-1) ... Setting up file (1:5.46-5) ... Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Setting up libelf1t64:amd64 (0.193-3) ... Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' Local time is now: Wed Sep 17 18:47:09 UTC 2025. Universal Time is now: Wed Sep 17 18:47:09 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20240727.1) ... Setting up libunistring5:amd64 (1.3-2) ... Setting up autopoint (0.23.1-2) ... Setting up autoconf (2.72-3.1) ... Setting up libffi8:amd64 (3.5.2-2) ... Setting up dwz (0.16-2) ... Setting up sensible-utils (0.0.26) ... Setting up libuchardet0:amd64 (0.0.8-2) ... Setting up netbase (6.5) ... Setting up libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Setting up libjs-jquery-hotkeys (0.2.0-1) ... Setting up openssl (3.5.2-1) ... Setting up readline-common (8.3-3) ... Setting up libonig5:amd64 (6.9.10-1) ... Setting up automake (1:1.17-4) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.15.0-1) ... Setting up gettext (0.23.1-2+b1) ... Setting up libtool (2.5.4-5) ... Setting up libjq1:amd64 (1.8.1-3) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (21) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up libjs-jquery-metadata (12-4) ... Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... Setting up libreadline8t64:amd64 (8.3-3) ... Setting up dh-strip-nondeterminism (1.15.0-1) ... Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Setting up groff-base (1.23.0-9) ... Setting up jq (1.8.1-3) ... Setting up libpython3.13-stdlib:amd64 (3.13.7-1) ... Setting up libpython3-stdlib:amd64 (3.13.7-1) ... Setting up python3.13 (3.13.7-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up python3 (3.13.7-1) ... Setting up python3-zipp (3.23.0-1) ... Setting up python3-autocommand (2.2.2-3) ... Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up python3-psutil (7.0.0-2) ... Setting up python3-ifaddr (0.2.0-2) ... Setting up python3-pygments (2.18.0+dfsg-2) ... Setting up python3-packaging (25.0-1) ... Setting up python3-pyproject-hooks (1.2.0-1) ... Setting up python3-typing-extensions (4.15.0-1) ... Setting up python3-installer (0.7.0+dfsg1-3) ... Setting up python3-pluggy (1.6.0-1) ... Setting up python3-dateutil (2.9.0-4) ... Setting up python3-pathspec (0.12.1-1) ... Setting up python3-freezegun (1.5.1-1.2) ... Setting up python3-cffi-backend:amd64 (2.0.0-1) ... Setting up dh-python (6.20250414) ... Setting up python3-more-itertools (10.8.0-1) ... Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-jaraco.functools (4.1.0-1) ... Setting up python3-async-generator (1.10-4) ... Setting up python3-jaraco.context (6.0.1-1) ... Setting up python3-pytest (8.4.2-1) ... Setting up python3-mypy-extensions (1.1.0-1) ... Setting up python3-bcrypt (4.3.0-1) ... Setting up python3-typeguard (4.4.4-1) ... Setting up python3-all (3.13.7-1) ... Setting up python3-coverage (7.8.2+dfsg1-1) ... Setting up debhelper (13.26) ... Setting up python3-pytest-cov (5.0.0-1) ... Setting up python3-wheel (0.46.1-2) ... Setting up python3-inflect (7.5.0-1) ... Setting up python3-jaraco.text (4.0.0-1) ... Setting up python3-cryptography (43.0.0-3) ... Setting up python3-mypy (1.18.1-1) ... Setting up python3-pip (25.2+dfsg-1) ... Setting up python3-pytest-asyncio (1.1.0-2) ... Setting up python3-build (1.2.2-4) ... Setting up python3-pkg-resources (78.1.1-0.1) ... Setting up python3-setuptools (78.1.1-0.1) ... Setting up pybuild-plugin-pyproject (6.20250414) ... Setting up openstack-pkg-tools (135) ... Processing triggers for libc-bin (2.41-12) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps Reading package lists... Building dependency tree... Reading state information... fakeroot is already the newest version (1.37.1.2-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: Running cd /build/reproducible-path/python-xknx-3.6.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../python-xknx_3.6.0-1_source.changes dpkg-buildpackage: info: source package python-xknx dpkg-buildpackage: info: source version 3.6.0-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Edward Betts dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 dpkg-source: info: using options from python-xknx-3.6.0/debian/source/options: --extend-diff-ignore=^[^/]*[.]egg-info/ debian/rules clean make: pyversions: No such file or directory py3versions: no X-Python3-Version in control file, using supported versions dh clean --buildsystem=pybuild --with python3 dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary make: pyversions: No such file or directory py3versions: no X-Python3-Version in control file, using supported versions dh binary --buildsystem=pybuild --with python3 dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild dh_auto_build -O--buildsystem=pybuild I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13 * Building wheel... /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/xknx copying xknx/__version__.py -> build/lib/xknx copying xknx/xknx.py -> build/lib/xknx copying xknx/__init__.py -> build/lib/xknx creating build/lib/xknx/io copying xknx/io/connection.py -> build/lib/xknx/io copying xknx/io/interface.py -> build/lib/xknx/io copying xknx/io/__init__.py -> build/lib/xknx/io copying xknx/io/self_description.py -> build/lib/xknx/io copying xknx/io/tunnel.py -> build/lib/xknx/io copying xknx/io/const.py -> build/lib/xknx/io copying xknx/io/ip_secure.py -> build/lib/xknx/io copying xknx/io/knxip_interface.py -> build/lib/xknx/io copying xknx/io/util.py -> build/lib/xknx/io copying xknx/io/gateway_scanner.py -> build/lib/xknx/io copying xknx/io/routing.py -> build/lib/xknx/io creating build/lib/xknx/secure copying xknx/secure/data_secure_asdu.py -> build/lib/xknx/secure copying xknx/secure/security_primitives.py -> build/lib/xknx/secure copying xknx/secure/__init__.py -> build/lib/xknx/secure copying xknx/secure/keyring.py -> build/lib/xknx/secure copying xknx/secure/data_secure.py -> build/lib/xknx/secure copying xknx/secure/util.py -> build/lib/xknx/secure creating build/lib/xknx/knxip copying xknx/knxip/connectionstate_request.py -> build/lib/xknx/knxip copying xknx/knxip/routing_busy.py -> build/lib/xknx/knxip copying xknx/knxip/routing_lost_message.py -> build/lib/xknx/knxip copying xknx/knxip/search_request_extended.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_ack.py -> build/lib/xknx/knxip copying xknx/knxip/session_response.py -> build/lib/xknx/knxip copying xknx/knxip/connect_response.py -> build/lib/xknx/knxip copying xknx/knxip/search_response.py -> build/lib/xknx/knxip copying xknx/knxip/session_authenticate.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_feature.py -> build/lib/xknx/knxip copying xknx/knxip/session_request.py -> build/lib/xknx/knxip copying xknx/knxip/disconnect_request.py -> build/lib/xknx/knxip copying xknx/knxip/device_configuration_request.py -> build/lib/xknx/knxip copying xknx/knxip/routing_indication.py -> build/lib/xknx/knxip copying xknx/knxip/timer_notify.py -> build/lib/xknx/knxip copying xknx/knxip/search_request.py -> build/lib/xknx/knxip copying xknx/knxip/connect_request.py -> build/lib/xknx/knxip copying xknx/knxip/description_request.py -> build/lib/xknx/knxip copying xknx/knxip/body.py -> build/lib/xknx/knxip copying xknx/knxip/hpai.py -> build/lib/xknx/knxip copying xknx/knxip/srp.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_request.py -> build/lib/xknx/knxip copying xknx/knxip/__init__.py -> build/lib/xknx/knxip copying xknx/knxip/secure_wrapper.py -> build/lib/xknx/knxip copying xknx/knxip/knxip.py -> build/lib/xknx/knxip copying xknx/knxip/search_response_extended.py -> build/lib/xknx/knxip copying xknx/knxip/dib.py -> build/lib/xknx/knxip copying xknx/knxip/session_status.py -> build/lib/xknx/knxip copying xknx/knxip/description_response.py -> build/lib/xknx/knxip copying xknx/knxip/device_configuration_ack.py -> build/lib/xknx/knxip copying xknx/knxip/connectionstate_response.py -> build/lib/xknx/knxip copying xknx/knxip/disconnect_response.py -> build/lib/xknx/knxip copying xknx/knxip/header.py -> build/lib/xknx/knxip copying xknx/knxip/knxip_enum.py -> build/lib/xknx/knxip copying xknx/knxip/error_code.py -> build/lib/xknx/knxip creating build/lib/xknx/tools copying xknx/tools/group_communication.py -> build/lib/xknx/tools copying xknx/tools/__init__.py -> build/lib/xknx/tools creating build/lib/xknx/exceptions copying xknx/exceptions/__init__.py -> build/lib/xknx/exceptions copying xknx/exceptions/exception.py -> build/lib/xknx/exceptions creating build/lib/xknx/cemi copying xknx/cemi/__init__.py -> build/lib/xknx/cemi copying xknx/cemi/const.py -> build/lib/xknx/cemi copying xknx/cemi/cemi_handler.py -> build/lib/xknx/cemi copying xknx/cemi/cemi_frame.py -> build/lib/xknx/cemi creating build/lib/xknx/remote_value copying xknx/remote_value/remote_value_by_length.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_datetime.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_dpt_value_1_ucount.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_scene_number.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_temp.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_raw.py -> build/lib/xknx/remote_value copying xknx/remote_value/__init__.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_step.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_scaling.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_climate_mode.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_rgb.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_setpoint_shift.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_updown.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_switch.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_rgbw.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_sensor.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_xyy.py -> build/lib/xknx/remote_value creating build/lib/xknx/core copying xknx/core/value_reader.py -> build/lib/xknx/core copying xknx/core/state_updater.py -> build/lib/xknx/core copying xknx/core/task_registry.py -> build/lib/xknx/core copying xknx/core/telegram_queue.py -> build/lib/xknx/core copying xknx/core/__init__.py -> build/lib/xknx/core copying xknx/core/group_address_dpt.py -> build/lib/xknx/core copying xknx/core/connection_state.py -> build/lib/xknx/core copying xknx/core/connection_manager.py -> build/lib/xknx/core creating build/lib/xknx/typing copying xknx/typing/__init__.py -> build/lib/xknx/typing creating build/lib/xknx/management copying xknx/management/management.py -> build/lib/xknx/management copying xknx/management/__init__.py -> build/lib/xknx/management copying xknx/management/procedures.py -> build/lib/xknx/management copying xknx/management/application_layer_enum.py -> build/lib/xknx/management creating build/lib/xknx/devices copying xknx/devices/notification.py -> build/lib/xknx/devices copying xknx/devices/devices.py -> build/lib/xknx/devices copying xknx/devices/travelcalculator.py -> build/lib/xknx/devices copying xknx/devices/scene.py -> build/lib/xknx/devices copying xknx/devices/sensor.py -> build/lib/xknx/devices copying xknx/devices/weather.py -> build/lib/xknx/devices copying xknx/devices/light.py -> build/lib/xknx/devices copying xknx/devices/switch.py -> build/lib/xknx/devices copying xknx/devices/datetime.py -> build/lib/xknx/devices copying xknx/devices/binary_sensor.py -> build/lib/xknx/devices copying xknx/devices/device.py -> build/lib/xknx/devices copying xknx/devices/__init__.py -> build/lib/xknx/devices copying xknx/devices/fan.py -> build/lib/xknx/devices copying xknx/devices/raw_value.py -> build/lib/xknx/devices copying xknx/devices/climate.py -> build/lib/xknx/devices copying xknx/devices/expose_sensor.py -> build/lib/xknx/devices copying xknx/devices/numeric_value.py -> build/lib/xknx/devices copying xknx/devices/cover.py -> build/lib/xknx/devices copying xknx/devices/climate_mode.py -> build/lib/xknx/devices creating build/lib/xknx/util copying xknx/util/__init__.py -> build/lib/xknx/util creating build/lib/xknx/dpt copying xknx/dpt/dpt_7.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_16.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_235.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_19.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_251.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_6.py -> build/lib/xknx/dpt copying xknx/dpt/dpt.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_5.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_1.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_11.py -> build/lib/xknx/dpt copying xknx/dpt/__init__.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_13.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_17.py -> build/lib/xknx/dpt copying xknx/dpt/payload.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_12.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_10.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_20.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_14.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_242.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_3.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_9.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_29.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_232.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_18.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_8.py -> build/lib/xknx/dpt creating build/lib/xknx/telegram copying xknx/telegram/tpci.py -> build/lib/xknx/telegram copying xknx/telegram/address_filter.py -> build/lib/xknx/telegram copying xknx/telegram/address.py -> build/lib/xknx/telegram copying xknx/telegram/__init__.py -> build/lib/xknx/telegram copying xknx/telegram/telegram.py -> build/lib/xknx/telegram copying xknx/telegram/apci.py -> build/lib/xknx/telegram creating build/lib/xknx/profile copying xknx/profile/__init__.py -> build/lib/xknx/profile copying xknx/profile/const.py -> build/lib/xknx/profile creating build/lib/xknx/io/request_response copying xknx/io/request_response/session.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/authenticate.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/device_configuration.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/tunnelling.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/__init__.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/connect.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/disconnect.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/connectionstate.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/request_response.py -> build/lib/xknx/io/request_response creating build/lib/xknx/io/transport copying xknx/io/transport/tcp_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/udp_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/ip_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/__init__.py -> build/lib/xknx/io/transport running egg_info creating xknx.egg-info writing xknx.egg-info/PKG-INFO writing dependency_links to xknx.egg-info/dependency_links.txt writing requirements to xknx.egg-info/requires.txt writing top-level names to xknx.egg-info/top_level.txt writing manifest file 'xknx.egg-info/SOURCES.txt' reading manifest file 'xknx.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'xknx.egg-info/SOURCES.txt' copying xknx/py.typed -> build/lib/xknx installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/xknx creating build/bdist.linux-x86_64/wheel/xknx/io creating build/bdist.linux-x86_64/wheel/xknx/io/request_response copying build/lib/xknx/io/request_response/session.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/authenticate.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/device_configuration.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/tunnelling.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/connect.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/disconnect.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/connectionstate.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/request_response.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/connection.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/interface.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/self_description.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/tunnel.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/const.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/ip_secure.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/knxip_interface.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/util.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/gateway_scanner.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/routing.py -> build/bdist.linux-x86_64/wheel/./xknx/io creating build/bdist.linux-x86_64/wheel/xknx/io/transport copying build/lib/xknx/io/transport/tcp_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/udp_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/ip_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport creating build/bdist.linux-x86_64/wheel/xknx/secure copying build/lib/xknx/secure/data_secure_asdu.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/security_primitives.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/keyring.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/data_secure.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/util.py -> build/bdist.linux-x86_64/wheel/./xknx/secure creating build/bdist.linux-x86_64/wheel/xknx/knxip copying build/lib/xknx/knxip/connectionstate_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_busy.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_lost_message.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_request_extended.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_ack.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connect_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_authenticate.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_feature.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/disconnect_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/device_configuration_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_indication.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/timer_notify.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connect_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/description_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/body.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/hpai.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/srp.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/secure_wrapper.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/knxip.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_response_extended.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/dib.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_status.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/description_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/device_configuration_ack.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connectionstate_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/disconnect_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/header.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/knxip_enum.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/error_code.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip creating build/bdist.linux-x86_64/wheel/xknx/tools copying build/lib/xknx/tools/group_communication.py -> build/bdist.linux-x86_64/wheel/./xknx/tools copying build/lib/xknx/tools/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/tools creating build/bdist.linux-x86_64/wheel/xknx/exceptions copying build/lib/xknx/exceptions/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/exceptions copying build/lib/xknx/exceptions/exception.py -> build/bdist.linux-x86_64/wheel/./xknx/exceptions copying build/lib/xknx/__version__.py -> build/bdist.linux-x86_64/wheel/./xknx copying build/lib/xknx/xknx.py -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/cemi copying build/lib/xknx/cemi/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/const.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/cemi_handler.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/cemi_frame.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/remote_value copying build/lib/xknx/remote_value/remote_value_by_length.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_datetime.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_dpt_value_1_ucount.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_scene_number.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_temp.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_raw.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_step.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_scaling.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_climate_mode.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_rgb.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_setpoint_shift.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_updown.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_switch.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_rgbw.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_xyy.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value creating build/bdist.linux-x86_64/wheel/xknx/core copying build/lib/xknx/core/value_reader.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/state_updater.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/task_registry.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/telegram_queue.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/group_address_dpt.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/connection_state.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/connection_manager.py -> build/bdist.linux-x86_64/wheel/./xknx/core creating build/bdist.linux-x86_64/wheel/xknx/typing copying build/lib/xknx/typing/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/typing creating build/bdist.linux-x86_64/wheel/xknx/management copying build/lib/xknx/management/management.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/procedures.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/application_layer_enum.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/py.typed -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/devices copying build/lib/xknx/devices/notification.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/devices.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/travelcalculator.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/scene.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/weather.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/light.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/switch.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/datetime.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/binary_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/device.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/fan.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/raw_value.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/climate.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/expose_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/numeric_value.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/cover.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/climate_mode.py -> build/bdist.linux-x86_64/wheel/./xknx/devices creating build/bdist.linux-x86_64/wheel/xknx/util copying build/lib/xknx/util/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/util creating build/bdist.linux-x86_64/wheel/xknx/dpt copying build/lib/xknx/dpt/dpt_7.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_16.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_235.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_19.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_251.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_6.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_5.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_1.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_11.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_13.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_17.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/payload.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_12.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_10.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_20.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_14.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_242.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_3.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_9.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_29.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_232.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_18.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_8.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt creating build/bdist.linux-x86_64/wheel/xknx/telegram copying build/lib/xknx/telegram/tpci.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/address_filter.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/address.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/telegram.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/apci.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram creating build/bdist.linux-x86_64/wheel/xknx/profile copying build/lib/xknx/profile/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/profile copying build/lib/xknx/profile/const.py -> build/bdist.linux-x86_64/wheel/./xknx/profile running install_egg_info Copying xknx.egg-info to build/bdist.linux-x86_64/wheel/./xknx-3.6.0.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/xknx-3.6.0.dist-info/WHEEL creating '/build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/.tmp-me3vaiy7/xknx-3.6.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'xknx/__init__.py' adding 'xknx/__version__.py' adding 'xknx/py.typed' adding 'xknx/xknx.py' adding 'xknx/cemi/__init__.py' adding 'xknx/cemi/cemi_frame.py' adding 'xknx/cemi/cemi_handler.py' adding 'xknx/cemi/const.py' adding 'xknx/core/__init__.py' adding 'xknx/core/connection_manager.py' adding 'xknx/core/connection_state.py' adding 'xknx/core/group_address_dpt.py' adding 'xknx/core/state_updater.py' adding 'xknx/core/task_registry.py' adding 'xknx/core/telegram_queue.py' adding 'xknx/core/value_reader.py' adding 'xknx/devices/__init__.py' adding 'xknx/devices/binary_sensor.py' adding 'xknx/devices/climate.py' adding 'xknx/devices/climate_mode.py' adding 'xknx/devices/cover.py' adding 'xknx/devices/datetime.py' adding 'xknx/devices/device.py' adding 'xknx/devices/devices.py' adding 'xknx/devices/expose_sensor.py' adding 'xknx/devices/fan.py' adding 'xknx/devices/light.py' adding 'xknx/devices/notification.py' adding 'xknx/devices/numeric_value.py' adding 'xknx/devices/raw_value.py' adding 'xknx/devices/scene.py' adding 'xknx/devices/sensor.py' adding 'xknx/devices/switch.py' adding 'xknx/devices/travelcalculator.py' adding 'xknx/devices/weather.py' adding 'xknx/dpt/__init__.py' adding 'xknx/dpt/dpt.py' adding 'xknx/dpt/dpt_1.py' adding 'xknx/dpt/dpt_10.py' adding 'xknx/dpt/dpt_11.py' adding 'xknx/dpt/dpt_12.py' adding 'xknx/dpt/dpt_13.py' adding 'xknx/dpt/dpt_14.py' adding 'xknx/dpt/dpt_16.py' adding 'xknx/dpt/dpt_17.py' adding 'xknx/dpt/dpt_18.py' adding 'xknx/dpt/dpt_19.py' adding 'xknx/dpt/dpt_20.py' adding 'xknx/dpt/dpt_232.py' adding 'xknx/dpt/dpt_235.py' adding 'xknx/dpt/dpt_242.py' adding 'xknx/dpt/dpt_251.py' adding 'xknx/dpt/dpt_29.py' adding 'xknx/dpt/dpt_3.py' adding 'xknx/dpt/dpt_5.py' adding 'xknx/dpt/dpt_6.py' adding 'xknx/dpt/dpt_7.py' adding 'xknx/dpt/dpt_8.py' adding 'xknx/dpt/dpt_9.py' adding 'xknx/dpt/payload.py' adding 'xknx/exceptions/__init__.py' adding 'xknx/exceptions/exception.py' adding 'xknx/io/__init__.py' adding 'xknx/io/connection.py' adding 'xknx/io/const.py' adding 'xknx/io/gateway_scanner.py' adding 'xknx/io/interface.py' adding 'xknx/io/ip_secure.py' adding 'xknx/io/knxip_interface.py' adding 'xknx/io/routing.py' adding 'xknx/io/self_description.py' adding 'xknx/io/tunnel.py' adding 'xknx/io/util.py' adding 'xknx/io/request_response/__init__.py' adding 'xknx/io/request_response/authenticate.py' adding 'xknx/io/request_response/connect.py' adding 'xknx/io/request_response/connectionstate.py' adding 'xknx/io/request_response/device_configuration.py' adding 'xknx/io/request_response/disconnect.py' adding 'xknx/io/request_response/request_response.py' adding 'xknx/io/request_response/session.py' adding 'xknx/io/request_response/tunnelling.py' adding 'xknx/io/transport/__init__.py' adding 'xknx/io/transport/ip_transport.py' adding 'xknx/io/transport/tcp_transport.py' adding 'xknx/io/transport/udp_transport.py' adding 'xknx/knxip/__init__.py' adding 'xknx/knxip/body.py' adding 'xknx/knxip/connect_request.py' adding 'xknx/knxip/connect_response.py' adding 'xknx/knxip/connectionstate_request.py' adding 'xknx/knxip/connectionstate_response.py' adding 'xknx/knxip/description_request.py' adding 'xknx/knxip/description_response.py' adding 'xknx/knxip/device_configuration_ack.py' adding 'xknx/knxip/device_configuration_request.py' adding 'xknx/knxip/dib.py' adding 'xknx/knxip/disconnect_request.py' adding 'xknx/knxip/disconnect_response.py' adding 'xknx/knxip/error_code.py' adding 'xknx/knxip/header.py' adding 'xknx/knxip/hpai.py' adding 'xknx/knxip/knxip.py' adding 'xknx/knxip/knxip_enum.py' adding 'xknx/knxip/routing_busy.py' adding 'xknx/knxip/routing_indication.py' adding 'xknx/knxip/routing_lost_message.py' adding 'xknx/knxip/search_request.py' adding 'xknx/knxip/search_request_extended.py' adding 'xknx/knxip/search_response.py' adding 'xknx/knxip/search_response_extended.py' adding 'xknx/knxip/secure_wrapper.py' adding 'xknx/knxip/session_authenticate.py' adding 'xknx/knxip/session_request.py' adding 'xknx/knxip/session_response.py' adding 'xknx/knxip/session_status.py' adding 'xknx/knxip/srp.py' adding 'xknx/knxip/timer_notify.py' adding 'xknx/knxip/tunnelling_ack.py' adding 'xknx/knxip/tunnelling_feature.py' adding 'xknx/knxip/tunnelling_request.py' adding 'xknx/management/__init__.py' adding 'xknx/management/application_layer_enum.py' adding 'xknx/management/management.py' adding 'xknx/management/procedures.py' adding 'xknx/profile/__init__.py' adding 'xknx/profile/const.py' adding 'xknx/remote_value/__init__.py' adding 'xknx/remote_value/remote_value.py' adding 'xknx/remote_value/remote_value_by_length.py' adding 'xknx/remote_value/remote_value_climate_mode.py' adding 'xknx/remote_value/remote_value_color_rgb.py' adding 'xknx/remote_value/remote_value_color_rgbw.py' adding 'xknx/remote_value/remote_value_color_xyy.py' adding 'xknx/remote_value/remote_value_datetime.py' adding 'xknx/remote_value/remote_value_dpt_value_1_ucount.py' adding 'xknx/remote_value/remote_value_raw.py' adding 'xknx/remote_value/remote_value_scaling.py' adding 'xknx/remote_value/remote_value_scene_number.py' adding 'xknx/remote_value/remote_value_sensor.py' adding 'xknx/remote_value/remote_value_setpoint_shift.py' adding 'xknx/remote_value/remote_value_step.py' adding 'xknx/remote_value/remote_value_switch.py' adding 'xknx/remote_value/remote_value_temp.py' adding 'xknx/remote_value/remote_value_updown.py' adding 'xknx/secure/__init__.py' adding 'xknx/secure/data_secure.py' adding 'xknx/secure/data_secure_asdu.py' adding 'xknx/secure/keyring.py' adding 'xknx/secure/security_primitives.py' adding 'xknx/secure/util.py' adding 'xknx/telegram/__init__.py' adding 'xknx/telegram/address.py' adding 'xknx/telegram/address_filter.py' adding 'xknx/telegram/apci.py' adding 'xknx/telegram/telegram.py' adding 'xknx/telegram/tpci.py' adding 'xknx/tools/__init__.py' adding 'xknx/tools/group_communication.py' adding 'xknx/typing/__init__.py' adding 'xknx/util/__init__.py' adding 'xknx-3.6.0.dist-info/licenses/LICENSE' adding 'xknx-3.6.0.dist-info/METADATA' adding 'xknx-3.6.0.dist-info/WHEEL' adding 'xknx-3.6.0.dist-info/top_level.txt' adding 'xknx-3.6.0.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built xknx-3.6.0-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module dh_auto_test -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest --no-cov -k "not test_scan_timeout and not test_start_secure_routing_knx_keys and not test_start_secure_routing_manual" ============================= test session starts ============================== platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0 rootdir: /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build configfile: pyproject.toml testpaths: test plugins: asyncio-1.1.0, typeguard-4.4.4, cov-5.0.0 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collected 2837 items / 3 deselected / 2834 selected test/cemi_tests/cemi_frame_test.py ............................... [ 1%] test/cemi_tests/cemi_handler_test.py E....... [ 1%] test/core_tests/connection_manager_test.py ...... [ 1%] test/core_tests/exceptions_test.py ...... [ 1%] test/core_tests/group_address_dpt_test.py ..... [ 1%] test/core_tests/state_updater_test.py ............ [ 2%] test/core_tests/task_registry_test.py ...EE [ 2%] test/core_tests/telegram_queue_test.py .................. [ 3%] test/core_tests/value_reader_test.py ..... [ 3%] test/devices_tests/binary_sensor_test.py ..E......... [ 3%] test/devices_tests/climate_test.py ..................................... [ 5%] ............................ [ 6%] test/devices_tests/cover_test.py ....................................EE. [ 7%] . [ 7%] test/devices_tests/datetime_test.py ..............EE [ 8%] test/devices_tests/device_test.py ........ [ 8%] test/devices_tests/devices_test.py ......... [ 8%] test/devices_tests/expose_sensor_test.py ............E [ 9%] test/devices_tests/fan_test.py .............. [ 9%] test/devices_tests/light_test.py ....................................... [ 11%] ...................E......... [ 12%] test/devices_tests/notification_test.py ........ [ 12%] test/devices_tests/numeric_value_test.py ..................... [ 13%] test/devices_tests/raw_value_test.py ............ [ 13%] test/devices_tests/scene_test.py ... [ 13%] test/devices_tests/sensor_expose_loop_test.py .......................... [ 14%] ........................................................................ [ 17%] ............................................. [ 18%] test/devices_tests/sensor_test.py ...................................... [ 19%] ........................................................................ [ 22%] ......................... [ 23%] test/devices_tests/switch_test.py .....EE......... [ 23%] test/devices_tests/travelcalculator_test.py ............. [ 24%] test/devices_tests/weather_test.py ................... [ 25%] test/dpt_tests/dpt_10_time_test.py ................... [ 25%] test/dpt_tests/dpt_11_date_test.py .................... [ 26%] test/dpt_tests/dpt_12_test.py ................ [ 27%] test/dpt_tests/dpt_14_float_test.py ............. [ 27%] test/dpt_tests/dpt_16_string_test.py ................ [ 28%] test/dpt_tests/dpt_17_scene_number_test.py ........ [ 28%] test/dpt_tests/dpt_18_scene_control_test.py ................. [ 28%] test/dpt_tests/dpt_19_datetime_test.py ............ [ 29%] test/dpt_tests/dpt_1_test.py ........................................... [ 30%] ........................................................................ [ 33%] ......................................... [ 34%] test/dpt_tests/dpt_20_hvac_mode_test.py ............................. [ 35%] test/dpt_tests/dpt_235_tariff_active_energy_test.py .................... [ 36%] ................. [ 37%] test/dpt_tests/dpt_29_test.py ........ [ 37%] test/dpt_tests/dpt_3_test.py ........................... [ 38%] test/dpt_tests/dpt_5_test.py ......................... [ 39%] test/dpt_tests/dpt_6_test.py ............ [ 39%] test/dpt_tests/dpt_7_test.py ......... [ 40%] test/dpt_tests/dpt_8_test.py ......... [ 40%] test/dpt_tests/dpt_9_float_test.py ............................ [ 41%] test/dpt_tests/dpt_color_test.py ....................................... [ 42%] ........................................................................ [ 45%] ................ [ 45%] test/dpt_tests/dpt_lookup_test.py ...................................... [ 47%] ........................................................................ [ 49%] ........................................................................ [ 52%] ...................... [ 53%] test/dpt_tests/dpt_test.py ............................................. [ 54%] ........................................................................ [ 57%] ........................................................................ [ 59%] ........................................................................ [ 62%] ........................................................................ [ 64%] ........................................................................ [ 67%] ... [ 67%] test/dpt_tests/payload_test.py ......... [ 67%] test/io_tests/connection_test.py .. [ 67%] test/io_tests/gateway_scanner_test.py ........EE.. [ 68%] test/io_tests/knxip_interface_test.py ................... [ 68%] test/io_tests/request_response_tests/authenticate_test.py . [ 68%] test/io_tests/request_response_tests/connect_test.py .. [ 69%] test/io_tests/request_response_tests/connectionstate_test.py .. [ 69%] test/io_tests/request_response_tests/device_configuration_test.py . [ 69%] test/io_tests/request_response_tests/disconnect_test.py .. [ 69%] test/io_tests/request_response_tests/request_response_test.py ... [ 69%] test/io_tests/request_response_tests/session_test.py . [ 69%] test/io_tests/request_response_tests/tunnelling_test.py . [ 69%] test/io_tests/routing_test.py ..EE [ 69%] test/io_tests/secure_group_test.py EEEEE.. [ 69%] test/io_tests/secure_session_test.py E.EEEE [ 69%] test/io_tests/self_description_test.py EEE [ 70%] test/io_tests/transport_tests/ip_transport_test.py . [ 70%] test/io_tests/tunnel_test.py ....EEEEEEEE [ 70%] test/knxip_tests/body_test.py .. [ 70%] test/knxip_tests/connect_request_test.py ........ [ 70%] test/knxip_tests/connect_response_test.py .......... [ 71%] test/knxip_tests/connectionstate_request_test.py .. [ 71%] test/knxip_tests/connectionstate_response_test.py .. [ 71%] test/knxip_tests/description_request_test.py . [ 71%] test/knxip_tests/description_response_test.py .. [ 71%] test/knxip_tests/device_configuration_ack_test.py ... [ 71%] test/knxip_tests/device_configuration_request_test.py ... [ 71%] test/knxip_tests/dib_test.py ....... [ 71%] test/knxip_tests/disconnect_request_test.py .. [ 72%] test/knxip_tests/disconnect_response_test.py .. [ 72%] test/knxip_tests/header_test.py ....... [ 72%] test/knxip_tests/hpai_test.py ....... [ 72%] test/knxip_tests/knxip_test.py ... [ 72%] test/knxip_tests/routing_busy_test.py ... [ 72%] test/knxip_tests/routing_indication_test.py ..... [ 72%] test/knxip_tests/routing_lost_message_test.py ... [ 73%] test/knxip_tests/search_request_extended_test.py ... [ 73%] test/knxip_tests/search_request_test.py . [ 73%] test/knxip_tests/search_response_extended_test.py .. [ 73%] test/knxip_tests/search_response_test.py .. [ 73%] test/knxip_tests/secure_wrapper_test.py . [ 73%] test/knxip_tests/session_authenticate_test.py . [ 73%] test/knxip_tests/session_request_test.py . [ 73%] test/knxip_tests/session_response_test.py . [ 73%] test/knxip_tests/session_status_test.py . [ 73%] test/knxip_tests/srp_test.py ........ [ 73%] test/knxip_tests/timer_notify_test.py . [ 73%] test/knxip_tests/tunnelling_ack_test.py ... [ 73%] test/knxip_tests/tunnelling_feature_test.py ....... [ 74%] test/knxip_tests/tunnelling_request_test.py ... [ 74%] test/management_tests/management_test.py .E.....EE [ 74%] test/management_tests/procedures_test.py ...E.EEEEEEEEEEE [ 75%] test/remote_value_tests/remote_value_by_length_test.py ........ [ 75%] test/remote_value_tests/remote_value_climate_mode_test.py .............. [ 75%] ............ [ 76%] test/remote_value_tests/remote_value_color_rgb_test.py ...... [ 76%] test/remote_value_tests/remote_value_color_rgbw_test.py ...... [ 76%] test/remote_value_tests/remote_value_color_xyy_test.py ...... [ 77%] test/remote_value_tests/remote_value_datetime_test.py ... [ 77%] test/remote_value_tests/remote_value_dpt_value_1_ucount_test.py ...... [ 77%] test/remote_value_tests/remote_value_raw_test.py ...... [ 77%] test/remote_value_tests/remote_value_scaling_test.py ...... [ 77%] test/remote_value_tests/remote_value_scene_number_test.py ...... [ 77%] test/remote_value_tests/remote_value_sensor_test.py ...... [ 78%] test/remote_value_tests/remote_value_setepoint_shift_test.py ........ [ 78%] test/remote_value_tests/remote_value_step_test.py ........ [ 78%] test/remote_value_tests/remote_value_string_test.py ...... [ 78%] test/remote_value_tests/remote_value_switch_test.py ......... [ 79%] test/remote_value_tests/remote_value_temp_test.py ..... [ 79%] test/remote_value_tests/remote_value_test.py .............. [ 79%] test/remote_value_tests/remote_value_updown_test.py ........ [ 80%] test/secure_tests/data_secure_test.py ................ [ 80%] test/secure_tests/ip_secure_test.py ...... [ 81%] test/secure_tests/keyring_test.py ........... [ 81%] test/secure_tests/util_test.py ............ [ 81%] test/str_test.py ..................................................... [ 83%] test/telegram_tests/address_filter_test.py .............. [ 84%] test/telegram_tests/address_test.py .................................... [ 85%] ........................................................................ [ 88%] ........................................................................ [ 90%] ..................................................... [ 92%] test/telegram_tests/apci_test.py ....................................... [ 93%] ........................................................................ [ 96%] ...................................................... [ 98%] test/telegram_tests/telegram_test.py .. [ 98%] test/telegram_tests/tpci_test.py ...................... [ 99%] test/tools_tests/tools_test.py ................ [ 99%] test/xknx_test.py .......... [100%] ==================================== ERRORS ==================================== _______________ ERROR at setup of test_wait_for_l2_confirmation ________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/cemi_tests/cemi_handler_test.py, line 17 async def test_wait_for_l2_confirmation(time_travel: EventLoopClockAdvancer) -> None: """Test waiting for L_DATA.con before sending another L_DATA.req.""" xknx = XKNX() xknx.knxip_interface = AsyncMock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=apci.GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram(test_telegram), ) test_cemi_confirmation = CEMIFrame( code=CEMIMessageCode.L_DATA_CON, data=CEMILData.init_from_telegram( test_telegram, ), ) task = asyncio.create_task(xknx.cemi_handler.send_telegram(test_telegram)) await time_travel(0) xknx.knxip_interface.send_cemi.assert_called_once_with(test_cemi) assert xknx.connection_manager.cemi_count_outgoing == 0 assert not task.done() xknx.cemi_handler.handle_cemi_frame(test_cemi_confirmation) await time_travel(0) assert task.done() await task assert xknx.connection_manager.cemi_count_outgoing == 1 assert xknx.connection_manager.cemi_count_outgoing_error == 0 # no L_DATA.con received -> raise ConfirmationError xknx.knxip_interface.send_cemi.reset_mock() task = asyncio.create_task(xknx.cemi_handler.send_telegram(test_telegram)) await time_travel(0) xknx.knxip_interface.send_cemi.assert_called_once_with(test_cemi) with pytest.raises(ConfirmationError): await time_travel(3) assert task.done() await task assert xknx.connection_manager.cemi_count_outgoing == 1 assert xknx.connection_manager.cemi_count_outgoing_error == 1 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestTaskRegistry.test_reconnect_handling __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/core_tests/task_registry_test.py, line 82 async def test_reconnect_handling( self, time_travel: EventLoopClockAdvancer ) -> None: """Test reconnect handling.""" xknx = XKNX() xknx.task_registry.start() assert len(xknx.connection_manager._connection_state_changed_cbs) == 1 xknx.connection_manager.connection_state_changed(XknxConnectionState.CONNECTED) # pylint: disable=attribute-defined-outside-init self.test = 0 async def callback() -> None: """Reset tasks.""" try: while True: await asyncio.sleep(100) self.test += 1 except asyncio.CancelledError: self.test -= 1 task = xknx.task_registry.register( name="test", async_func=callback, restart_after_reconnect=True ) assert len(xknx.task_registry.tasks) == 1 task.start() assert task._task is not None await time_travel(100) assert self.test == 1 xknx.connection_manager.connection_state_changed( XknxConnectionState.DISCONNECTED ) await asyncio.sleep(0) # iterate loop to cancel task assert task._task is None assert self.test == 0 xknx.connection_manager.connection_state_changed(XknxConnectionState.CONNECTED) assert task._task is not None assert self.test == 0 await time_travel(100) assert self.test == 1 assert len(xknx.task_registry.tasks) == 1 xknx.task_registry.stop() assert len(xknx.task_registry.tasks) == 0 assert task._task is None await asyncio.sleep(0) # iterate loop to cancel task assert self.test == 0 assert len(xknx.connection_manager._connection_state_changed_cbs) == 0 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestTaskRegistry.test_background ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/core_tests/task_registry_test.py, line 134 async def test_background(self, time_travel: EventLoopClockAdvancer) -> None: """Test running background task.""" test_time = 10 async def callback() -> None: """Do nothing.""" await asyncio.sleep(test_time) xknx = XKNX() xknx.task_registry.background(callback()) assert len(xknx.task_registry._background_task) == 1 task = next(iter(xknx.task_registry._background_task)) refs = sys.getrefcount(task) assert refs == 4 assert not task.done() # after task is finished it should remove itself from the background registry await time_travel(test_time) assert len(xknx.task_registry._background_task) == 0 assert task.done() refs = sys.getrefcount(task) assert refs == 2 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestBinarySensor.test_process_reset_after __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/binary_sensor_test.py, line 74 async def test_process_reset_after( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process / reading telegrams from telegram queue.""" xknx = XKNX() reset_after_sec = 1 after_update_callback = Mock() binaryinput = BinarySensor( xknx, "TestInput", "1/2/3", reset_after=reset_after_sec, device_updated_cb=after_update_callback, ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) binaryinput.process(telegram_on) assert binaryinput.state await time_travel(reset_after_sec) assert not binaryinput.state # once for 'on' and once for 'off' assert after_update_callback.call_count == 2 after_update_callback.reset_mock() # multiple telegrams during reset_after time period shall reset timer binaryinput.process(telegram_on) after_update_callback.assert_called_once() binaryinput.process(telegram_on) binaryinput.process(telegram_on) # second and third telegram resets timer but doesn't run callback after_update_callback.assert_called_once() assert binaryinput.state await time_travel(reset_after_sec) assert not binaryinput.state # once for 'on' and once for 'off' assert after_update_callback.call_count == 2 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________________ ERROR at setup of TestCover.test_auto_stop __________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/cover_test.py, line 937 async def test_auto_stop(self, time_travel: EventLoopClockAdvancer) -> None: """Test auto stop functionality.""" xknx = XKNX() cover = Cover( xknx, "TestCoverAutoStop", group_address_long="1/2/1", group_address_stop="1/2/2", travel_time_down=10, travel_time_up=10, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 # we start with state 0 - open covers (up) this is assumed immediately await cover.set_position(0) assert xknx.telegrams.qsize() == 1 _ = xknx.telegrams.get_nowait() await cover.set_position(50) await time_travel(1) mock_time.return_value = 1517000001.0 assert xknx.telegrams.qsize() == 1 telegram1 = xknx.telegrams.get_nowait() assert telegram1 == Telegram( destination_address=GroupAddress("1/2/1"), payload=GroupValueWrite(DPTBinary(True)), ) await time_travel(4) mock_time.return_value = 1517000005.0 assert xknx.telegrams.qsize() == 1 telegram1 = xknx.telegrams.get_nowait() assert telegram1 == Telegram( destination_address=GroupAddress("1/2/2"), payload=GroupValueWrite(DPTBinary(True)), ) file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______________ ERROR at setup of TestCover.test_periodic_update _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/cover_test.py, line 975 async def test_periodic_update(self, time_travel: EventLoopClockAdvancer) -> None: """Test periodic update functionality.""" xknx = XKNX() callback_mock = Mock() cover = Cover( xknx, "TestCoverPeriodicUpdate", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, device_updated_cb=callback_mock, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 # state telegram updates current position - we are not moving so this is new state - not moving telegram = Telegram( GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(0)) ) cover.process(telegram) await time_travel(0) assert callback_mock.call_count == 1 callback_mock.reset_mock() # move to 50% telegram = Telegram( GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray(125)) ) cover.process(telegram) await time_travel(0) assert callback_mock.call_count == 1 mock_time.return_value = 1517000001.0 await time_travel(1) assert callback_mock.call_count == 2 # state telegram from bus too early mock_time.return_value = 1517000001.6 await time_travel(0.6) assert callback_mock.call_count == 2 telegram = Telegram( GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(42)) ) cover.process(telegram) assert callback_mock.call_count == 3 # next update 1 second after last received state telegram mock_time.return_value = 1517000002.0 await time_travel(0.4) assert callback_mock.call_count == 3 mock_time.return_value = 1517000002.6 await time_travel(0.6) assert callback_mock.call_count == 4 # last callback - auto updater is removed mock_time.return_value = 1517000005.0 await time_travel(2.4) assert callback_mock.call_count == 5 assert cover.position_reached() assert cover._periodic_update_task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____________ ERROR at setup of TestDateTime.test_background_task ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/datetime_test.py, line 233 @patch("xknx.core.TelegramQueue.process_telegram_outgoing", new_callable=AsyncMock) async def test_background_task( self, process_telegram_outgoing_mock: AsyncMock, time_travel: EventLoopClockAdvancer, xknx_no_interface: XKNX, ) -> None: """Test if background task works.""" xknx = xknx_no_interface test_device = TimeDevice(xknx, "TestDateTime", group_address="1/2/3") xknx.devices.async_add(test_device) async with xknx: # initial time telegram await time_travel(0) process_telegram_outgoing_mock.assert_called_once() process_telegram_outgoing_mock.reset_mock() # repeated time telegram await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_called_once() process_telegram_outgoing_mock.reset_mock() # remove device - no more telegrams xknx.devices.async_remove(test_device) await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestDateTime.test_no_background_task ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/datetime_test.py, line 258 @patch("xknx.core.TelegramQueue.process_telegram_outgoing", new_callable=AsyncMock) async def test_no_background_task( self, process_telegram_outgoing_mock: AsyncMock, time_travel: EventLoopClockAdvancer, xknx_no_interface: XKNX, ) -> None: """Test if background task is not started when not using `localtime`.""" xknx = xknx_no_interface test_device = TimeDevice( xknx, "TestDateTime", group_address="1/2/3", localtime=False, ) xknx.devices.async_add(test_device) async with xknx: assert test_device._broadcast_task is None # no initial time telegram await time_travel(0) process_telegram_outgoing_mock.assert_not_called() # no repeated time telegram await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______________ ERROR at setup of TestExposeSensor.test_cooldown _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/expose_sensor_test.py, line 225 async def test_cooldown(self, time_travel: EventLoopClockAdvancer) -> None: """Test cooldown.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() await xknx.telegram_queue.start() expose_sensor_cd = ExposeSensor( xknx, "TestSensor", group_address="1/2/3", value_type="temperature", cooldown=10, ) xknx.devices.async_add(expose_sensor_cd) expose_sensor_no_cd = ExposeSensor( xknx, "TestSensor", group_address="1/2/4", value_type="temperature", ) xknx.devices.async_add(expose_sensor_no_cd) await expose_sensor_cd.set(21.0) await expose_sensor_no_cd.set(21.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # don't send telegram with same payload twice if cooldown is active await expose_sensor_cd.set(21.0) await expose_sensor_no_cd.set(21.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() await time_travel(10) assert xknx.telegrams.qsize() == 0 xknx.cemi_handler.send_telegram.assert_not_called() # different payload after cooldown await expose_sensor_cd.set(10.0) await expose_sensor_no_cd.set(10.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # different payload immediately (payload of 3.111 equals 3.11) await expose_sensor_cd.set(3.111) await expose_sensor_no_cd.set(3.111) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x01, 0x37))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() assert expose_sensor_cd._cooldown_latest_value == 3.111 assert expose_sensor_cd.sensor_value.value == 10 await time_travel(10) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x01, 0x37))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() assert expose_sensor_cd._cooldown_latest_value == 3.11 assert expose_sensor_cd.sensor_value.value == 3.11 await time_travel(10) xknx.cemi_handler.send_telegram.assert_not_called() # reading unsent value await expose_sensor_cd.set(10) # first send new value await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # in cooldown with a new value - receiving a read request await expose_sensor_cd.set(21) expose_sensor_cd.process( Telegram(GroupAddress("1/2/3"), payload=GroupValueRead()) ) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueResponse(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # after cooldown - new value not sent again (already in GroupValueResponse) await time_travel(10) xknx.cemi_handler.send_telegram.assert_not_called() await xknx.stop() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____ ERROR at setup of TestLight.test_process_individual_color_debouncer ______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/light_test.py, line 1503 async def test_process_individual_color_debouncer( self, time_travel: EventLoopClockAdvancer ) -> None: """Test the debouncer for individual color lights.""" xknx = XKNX() rgb_callback = Mock() rgbw_callback = Mock() rgb_light = Light( xknx, "TestRGBLight", group_address_switch_red="1/1/1", group_address_switch_red_state="1/1/2", group_address_brightness_red="1/1/3", group_address_brightness_red_state="1/1/4", group_address_switch_green="1/1/5", group_address_switch_green_state="1/1/6", group_address_brightness_green="1/1/7", group_address_brightness_green_state="1/1/8", group_address_switch_blue="1/1/9", group_address_switch_blue_state="1/1/10", group_address_brightness_blue="1/1/11", group_address_brightness_blue_state="1/1/12", device_updated_cb=rgb_callback, ) xknx.devices.async_add(rgb_light) rgbw_light = Light( xknx, "TestRGBWLight", group_address_switch="1/1/0", group_address_brightness_red="1/1/3", group_address_brightness_red_state="1/1/4", group_address_brightness_green="1/1/7", group_address_brightness_green_state="1/1/8", group_address_brightness_blue="1/1/11", group_address_brightness_blue_state="1/1/12", group_address_brightness_white="1/1/15", group_address_brightness_white_state="1/1/16", device_updated_cb=rgbw_callback, ) xknx.devices.async_add(rgbw_light) assert rgb_light.current_color == (None, None) assert rgbw_light.current_color == (None, None) red = Telegram( destination_address=GroupAddress("1/1/4"), payload=GroupValueWrite(DPTArray(42)), ) green = Telegram( destination_address=GroupAddress("1/1/8"), payload=GroupValueWrite(DPTArray(43)), ) blue = Telegram( destination_address=GroupAddress("1/1/12"), payload=GroupValueWrite(DPTArray(44)), ) white = Telegram( destination_address=GroupAddress("1/1/16"), payload=GroupValueWrite(DPTArray(50)), ) xknx.devices.process(red) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(green) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(blue) rgb_callback.assert_called_once() rgbw_callback.assert_not_called() xknx.devices.process(white) rgbw_callback.assert_called_once() assert rgb_light.current_color == ((42, 43, 44), None) assert rgbw_light.current_color == ((42, 43, 44), 50) rgb_callback.reset_mock() rgbw_callback.reset_mock() # second time with only 2 telegrams xknx.devices.process(red) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(green) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() await time_travel(Light.DEBOUNCE_TIMEOUT / 2) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() await time_travel(Light.DEBOUNCE_TIMEOUT / 2) rgb_callback.assert_called_once() rgbw_callback.assert_called_once() assert rgb_light.current_color == ((42, 43, 44), None) assert rgbw_light.current_color == ((42, 43, 44), 50) file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestSwitch.test_process_reset_after _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/switch_test.py, line 161 async def test_process_reset_after( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process reset_after.""" xknx = XKNX() reset_after_sec = 1 switch = Switch( xknx, "TestInput", group_address="1/2/3", reset_after=reset_after_sec ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) switch.process(telegram_on) assert switch.state assert xknx.telegrams.qsize() == 0 await time_travel(reset_after_sec) assert xknx.telegrams.qsize() == 1 switch.process(xknx.telegrams.get_nowait()) assert not switch.state file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____ ERROR at setup of TestSwitch.test_process_reset_after_cancel_existing _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/switch_test.py, line 183 async def test_process_reset_after_cancel_existing( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process reset_after cancels existing reset tasks.""" xknx = XKNX() reset_after_sec = 0.01 switch = Switch( xknx, "TestInput", group_address="1/2/3", reset_after=reset_after_sec ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueResponse(DPTBinary(1)), ) switch.process(telegram_on) assert switch.state assert xknx.telegrams.qsize() == 0 await time_travel(reset_after_sec / 2) # half way through the reset timer switch.process(telegram_on) assert switch.state await time_travel(reset_after_sec / 2) assert xknx.telegrams.qsize() == 0 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestGatewayScanner.test_async_scan_timeout _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/gateway_scanner_test.py, line 365 @patch("xknx.io.gateway_scanner.UDPTransport.connect") @patch("xknx.io.gateway_scanner.UDPTransport.send") async def test_async_scan_timeout( self, udp_transport_send_mock: Mock, udp_transport_connect_mock: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test gateway scanner timeout for async generator.""" async def test() -> bool: xknx = XKNX() async for _ in GatewayScanner(xknx).async_scan(): break else: return True # timeout with ( patch( "xknx.io.util.get_default_local_ip", return_value="10.1.1.2", ), patch( "xknx.io.gateway_scanner.UDPTransport.getsockname", return_value=("10.1.1.2", 56789), ), ): timed_out_scan_task = asyncio.create_task(test()) await time_travel(3) assert await timed_out_scan_task # no matching interface found with patch( "xknx.io.util.get_default_local_ip", return_value=None, ): timed_out_scan_task = asyncio.create_task(test()) await time_travel(3) with pytest.raises(XKNXException): await timed_out_scan_task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestGatewayScanner.test_async_scan_exit ___________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/gateway_scanner_test.py, line 406 @patch("xknx.io.gateway_scanner.UDPTransport.connect") @patch("xknx.io.gateway_scanner.UDPTransport.send") async def test_async_scan_exit( self, udp_transport_send_mock: Mock, udp_transport_connect_mock: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test gateway scanner timeout for async generator.""" xknx = XKNX() test_search_response = fake_router_search_response() udp_transport_mock = Mock() udp_transport_mock.local_addr = ("10.1.1.2", 56789) gateway_scanner = GatewayScanner(xknx, local_ip="10.1.1.2") async def test() -> bool: async for gateway in gateway_scanner.async_scan(): assert isinstance(gateway, GatewayDescriptor) return True return False with ( patch( "xknx.io.gateway_scanner.UDPTransport.getsockname", return_value=("10.1.1.2", 56789), ), patch( "xknx.io.gateway_scanner.UDPTransport.register_callback" ) as register_callback_mock, ): scan_task = asyncio.create_task(test()) await time_travel(0) _fished_response_rec_callback = register_callback_mock.call_args.args[0] _fished_response_rec_callback( test_search_response, HPAI("192.168.42.50", 0), udp_transport_mock, ) assert await scan_task await time_travel(0) # for task cleanup file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________ ERROR at setup of TestFlowControl.test_basic_throttling ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/routing_test.py, line 93 async def test_basic_throttling(self, time_travel: EventLoopClockAdvancer) -> None: """Test throttling outgoing frames.""" flow_control = _RoutingFlowControl() mock = Mock() async def test_send() -> None: async with flow_control.throttle(): mock() # first send is called immediately task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 1 assert task.done() mock.reset_mock() # second send is throttled task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 0 await time_travel(ROUTING_INDICATION_WAIT_TIME / 4) assert not task.done() await time_travel(ROUTING_INDICATION_WAIT_TIME / 4 * 3) assert task.done() assert mock.call_count == 1 mock.reset_mock() # later send is called immediately await time_travel(ROUTING_INDICATION_WAIT_TIME) task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 1 assert task.done() mock.reset_mock() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____________ ERROR at setup of TestFlowControl.test_routing_busy ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/routing_test.py, line 128 @patch("random.random") async def test_routing_busy( self, random_mock: Mock, time_travel: EventLoopClockAdvancer ) -> None: """Test throttling on received RoutingBusy frame.""" flow_control = _RoutingFlowControl() mock = Mock() test_wait_time_ms = 100 random_mock.return_value = 0.5 async def test_send() -> None: async with flow_control.throttle(): mock() test_busy = RoutingBusy(wait_time=test_wait_time_ms) flow_control.handle_routing_busy(test_busy) task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 0 await time_travel(test_wait_time_ms / 1000) assert mock.call_count == 1 assert task.done() # no slowduration for just 1 RoutingBusy assert flow_control._timer_task.done() mock.reset_mock() # multiple RoutingBusy frames flow_control.handle_routing_busy(test_busy) # after cooldown - with different wait times updating wait time for 2x time # not counting one frame due to cooldown time await time_travel(BUSY_INCREMENT_COOLDOWN) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms // 2)) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms * 2)) assert flow_control._received_busy_frames == 1 # add second busy frame after cooldown has passed await time_travel(BUSY_INCREMENT_COOLDOWN) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms // 2)) assert flow_control._received_busy_frames == 2 task = asyncio.create_task(test_send()) assert mock.call_count == 0 await time_travel(test_wait_time_ms * 2 / 1000 + 2 * 0.5) # add random time assert mock.call_count == 1 assert task.done() # slowduration assert not flow_control._timer_task.done() await time_travel(2 * BUSY_SLOWDURATION_TIME_FACTOR) # _received_busy_frames 2 await time_travel(BUSY_DECREMENT_TIME) # and decrement time assert not flow_control._timer_task.done() await time_travel(BUSY_DECREMENT_TIME) # and second decrement time assert flow_control._timer_task.done() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestSecureGroup.test_no_synchronize _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 51 async def test_no_synchronize( self, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test synchronisazion not answered.""" secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer connect_task = asyncio.create_task(secure_group.connect()) await time_travel(0) mock_super_connect.assert_called_once() self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # synchronize timed out await time_travel( secure_timer.max_delay_time_follower_update_notify + 2 * secure_timer.latency_tolerance_ms / 1000 ) assert connect_task.done() # we are timekeeper so we send TimerNotify after time_keeper_periodic assert secure_timer.timekeeper assert not secure_timer.sched_update await time_travel(secure_timer.min_delay_time_keeper_periodic_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 3 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # test response to invalid timer as timekeeper timer_invalid = KNXIPFrame.init_from_body( TimerNotify( timer_value=0, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "3195051bb981941d57e6c5b55355f341" ), ) ) secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) assert secure_timer.timekeeper assert secure_timer.sched_update await time_travel(secure_timer.min_delay_time_keeper_update_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 1 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], message_tag=bytes.fromhex("12 34"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), ) # stop secure_group.stop() assert secure_timer._notify_timer_handle is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestSecureGroup.test_synchronize ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 116 async def test_synchronize( self, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test synchronisazion.""" secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer connect_task = asyncio.create_task(secure_group.connect()) await time_travel(0) mock_super_connect.assert_called_once() _message_tag = self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # incoming timer_update = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=XKNX_SERIAL_NUMBER, message_tag=_message_tag, ) ) with patch("xknx.io.ip_secure.SecureSequenceTimer.verify_timer_notify_mac"): # TimerNotify MAC is random so we don't verify it in tests secure_group.handle_knxipframe(timer_update, HPAI(*self.mock_addr)) await time_travel(0) _leeway_for_ci = 50 # ms assert ( ONE_HOUR_MS <= secure_timer.current_timer_value() <= ONE_HOUR_MS + _leeway_for_ci ) assert connect_task.done() # nothing sent until time_follower_periodic assert not secure_timer.timekeeper await time_travel(secure_timer.min_delay_time_follower_periodic_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 10 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() secure_group.stop() assert secure_timer._notify_timer_handle is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestSecureGroup.test_received_timer_notify _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 170 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") async def test_received_timer_notify( self, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling of received TimerNotify frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer with patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule: # TimerNotify with invalid MAC shall be discarded timer_invalid_mac = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(timer_invalid_mac, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() # E1 timer_newer = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "d2fad5657a5788a36cdd8a3ef84c90ab" ), ) ) secure_group.handle_knxipframe(timer_newer, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E2 timer_exact = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "d2fad5657a5788a36cdd8a3ef84c90ab" ), ) ) secure_group.handle_knxipframe(timer_exact, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() timer_valid = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms + 1, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "7572b70b4f986d7ae68891a00c0d46d3" ), ) ) secure_group.handle_knxipframe(timer_valid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E3 timer_tolerable_1 = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "3d70cc44607ad9b4a4425de95101a54c" ), ) ) secure_group.handle_knxipframe(timer_tolerable_1, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() timer_tolerable_2 = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.latency_tolerance_ms + 1, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "66b8b2e52196bcce3dce2da7e0dc50ec" ), ) ) secure_group.handle_knxipframe(timer_tolerable_2, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() # E4 timer_invalid = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.latency_tolerance_ms, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "873d9a5a25b8508446bbd5ff1bb4b465" ), ) ) secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once_with( update=(bytes.fromhex("12 34"), bytes.fromhex("00 fa 12 34 56 78")) ) assert not secure_timer.timekeeper assert secure_timer.sched_update mock_reschedule.reset_mock() # E4 from sched_update secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ________ ERROR at setup of TestSecureGroup.test_received_secure_wrapper ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 304 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") @patch("xknx.io.transport.udp_transport.UDPTransport.handle_knxipframe") async def test_received_secure_wrapper( self, mock_super_handle_knxipframe: Mock, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling of received SecureWrapper frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer secure_timer.timer_authenticated = True with ( patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule, patch.object(secure_group, "decrypt_frame") as mock_decrypt, ): mock_decrypt.return_value = True # we are only interested in timer value # E5 wrapper_newer = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=ONE_HOUR_MS.to_bytes(6, "big"), ) ) secure_group.handle_knxipframe(wrapper_newer, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.sched_update mock_reschedule.reset_mock() # E6 wrapper_exact = KNXIPFrame.init_from_body( SecureWrapper(sequence_information=ONE_HOUR_MS.to_bytes(6, "big")) ) secure_group.handle_knxipframe(wrapper_exact, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() wrapper_valid = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms + 1 ).to_bytes(6, "big") ) ) secure_group.handle_knxipframe(wrapper_valid, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E7 wrapper_tolerable_1 = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms ).to_bytes(6, "big"), ) ) secure_group.handle_knxipframe(wrapper_tolerable_1, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_not_called() wrapper_tolerable_2 = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.latency_tolerance_ms + 1 ).to_bytes(6, "big"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(wrapper_tolerable_2, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_not_called() # E8 wrapper_invalid = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.latency_tolerance_ms ).to_bytes(6, "big"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(wrapper_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once_with( update=(bytes.fromhex("12 34"), bytes.fromhex("00 fa 12 34 56 78")) ) assert not secure_timer.timekeeper assert secure_timer.sched_update mock_reschedule.reset_mock() # E8 from sched_update secure_group.handle_knxipframe(wrapper_invalid, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_not_called() mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestSecureGroup.test_send_secure_wrapper __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 429 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") async def test_send_secure_wrapper( self, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test sending SecureWrapper frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer secure_timer.timer_authenticated = True raw_test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_IND, data=CEMILData.init_from_telegram( Telegram( destination_address=GroupAddress("1/2/3"), payload=apci.GroupValueRead(), ) ), ).to_knx() with patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule: assert not secure_timer.sched_update secure_group.send( KNXIPFrame.init_from_body(RoutingIndication(raw_cemi=raw_test_cemi)) ) mock_reschedule.assert_called_once() mock_reschedule.reset_mock() # no reschedule when sched_update is true secure_timer.reschedule(update=(bytes(2), bytes(6))) assert secure_timer.sched_update mock_reschedule.reset_mock() secure_group.send( KNXIPFrame.init_from_body(RoutingIndication(raw_cemi=raw_test_cemi)) ) mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestSecureSession.test_lifecycle ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 74 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_lifecycle( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test connection, handshake, keepalive and shutdown.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) mock_super_connect.assert_called_once() # outgoing session_request_frame = KNXIPFrame.init_from_body( SessionRequest(ecdh_client_public_key=self.mock_public_key) ) mock_super_send.assert_called_once_with( session_request_frame, None, # None for addr in TCP transport ) mock_super_send.reset_mock() # incoming session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) await time_travel(0) # outgoing encrypted_authenticate_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=self.mock_serial_number, message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex( "79 15 a4 f3 6e 6e 42 08" "d2 8b 4a 20 7d 8f 35 c0" "d1 38 c2 6a 7b 5e 71 69" ), message_authentication_code=bytes.fromhex( "52 db a8 e7 e4 bd 80 bd 7d 86 8a 3a e7 87 49 de" ), ) ) mock_super_send.assert_called_once_with( encrypted_authenticate_frame, None, # None for addr in TCP transport ) mock_super_send.reset_mock() # incoming encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized is True assert not self.session._keepalive_task.done() # handle incoming SessionStatus (unencrypted for sake of simplicity) session_status_close_frame = KNXIPFrame.init_from_body( SessionStatus(status=SecureSessionStatusCode.STATUS_CLOSE) ) with patch.object(self.session, "transport") as mock_transport: self.session.handle_knxipframe( session_status_close_frame, HPAI(*self.mock_addr) ) mock_transport.close.assert_called_once() # keepalive SessionStatus (not specific for sake of simplicity) await time_travel(SESSION_KEEPALIVE_RATE) mock_super_send.assert_called_once() mock_super_send.reset_mock() # SessionStatus CLOSE sent on graceful disconnect with ( patch.object(self.session, "send", wraps=self.session.send) as mock_send, patch.object(self.session, "transport") as mock_transport, ): self.session.stop() mock_send.assert_called_once_with(session_status_close_frame) mock_super_send.assert_called_once() mock_transport.close.assert_called_once() assert self.session._keepalive_task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________ ERROR at setup of TestSecureSession.test_invalid_frames ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 198 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_frames( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling invalid frames.""" callback_mock = Mock() self.session.register_callback(callback_mock) # setup session connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) await time_travel(0) callback_mock.reset_mock() encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized callback_mock.assert_called_once() callback_mock.reset_mock() # receive sequence_information 0 again self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await time_travel(0) callback_mock.assert_not_called() # receive invalid message_authentication_code # (which is invalid brecause the sequence_information is changed) wrong_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 01"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( wrong_session_status_frame, HPAI(*self.mock_addr) ) await time_travel(0) callback_mock.assert_not_called() # async teardown self.session.stop() assert self.session.initialized is False file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______ ERROR at setup of TestSecureSession.test_invalid_session_response _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 279 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_session_response( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling invalid session response.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" ), ) ) with pytest.raises(CommunicationError): self.session.handle_knxipframe( session_response_frame, HPAI(*self.mock_addr) ) await connect_task # only SessionRequest, no SessionAuthenticate mock_super_send.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestSecureSession.test_no_authentication __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 312 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_no_authentication( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling initializing session without verifying server authenticity.""" self.session._device_authentication_code = None connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) mock_super_send.reset_mock() invalid_session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" ), ) ) self.session.handle_knxipframe( invalid_session_response_frame, HPAI(*self.mock_addr) ) await time_travel(0) # outgoing encrypted_authenticate_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=self.mock_serial_number, message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex( "79 15 a4 f3 6e 6e 42 08" "d2 8b 4a 20 7d 8f 35 c0" "d1 38 c2 6a 7b 5e 71 69" ), message_authentication_code=bytes.fromhex( "52 db a8 e7 e4 bd 80 bd 7d 86 8a 3a e7 87 49 de" ), ) ) mock_super_send.assert_called_once_with( encrypted_authenticate_frame, None, # None for addr in TCP transport ) # incoming encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized is True # async teardown self.session.stop() assert self.session.initialized is False file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestSecureSession.test_invalid_authentication ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 386 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_authentication( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling no session status while authenticating.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) with pytest.raises(CommunicationError): await time_travel(10) await connect_task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestSelfDescription.test_description_query _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 46 async def test_description_query(self, time_travel: EventLoopClockAdvancer) -> None: """Test DescriptionQuery class.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) transport_mocked = UDPTransport(local_addr=local_addr, remote_addr=remote_addr) transport_mocked.getsockname = Mock(return_value=local_addr) transport_mocked.send = Mock() description_request = KNXIPFrame.init_from_body( DescriptionRequest(control_endpoint=HPAI(*local_addr)) ) description_query = DescriptionQuery( transport=transport_mocked, local_hpai=HPAI(*local_addr) ) task = asyncio.create_task(description_query.start()) await time_travel(0) transport_mocked.send.assert_called_once_with(description_request) transport_mocked.data_received_callback( raw=self.description_response_raw, source=remote_addr ) await task assert description_query.gateway_descriptor is not None assert description_query.gateway_descriptor.name == "KNX IP Router 752 secure" file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______ ERROR at setup of TestSelfDescription.test_request_description_v1 _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 72 async def test_request_description_v1( self, time_travel: EventLoopClockAdvancer, ) -> None: """Test request_description function with Core v1 device.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) with ( patch( "xknx.io.self_description.UDPTransport.connect" ) as transport_connect_mock, patch( "xknx.io.self_description.UDPTransport.getsockname", return_value=local_addr, ), patch("xknx.io.self_description.UDPTransport.send") as transport_send_mock, patch("xknx.io.self_description.UDPTransport.stop") as transport_stop_mock, patch( "xknx.io.self_description.DescriptionQuery", wraps=DescriptionQuery ) as description_query_mock, ): task = asyncio.create_task(request_description(remote_addr[0])) await time_travel(0) transport_connect_mock.assert_called_once_with() assert transport_send_mock.call_count == 1 assert isinstance( transport_send_mock.call_args[0][0].body, DescriptionRequest ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.description_response_v1_raw, remote_addr ) gateway = await task transport_stop_mock.assert_called_once() assert transport_send_mock.call_count == 1 assert gateway.core_version == 1 assert gateway.name == "MDT KNX IP Router" assert gateway.tunnelling_requires_secure is None assert gateway.individual_address == IndividualAddress("2.0.0") file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___ ERROR at setup of TestSelfDescription.test_request_description_extended ____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 114 async def test_request_description_extended( self, time_travel: EventLoopClockAdvancer, ) -> None: """Test request_description function with Core v2 device.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) with ( patch( "xknx.io.self_description.UDPTransport.connect" ) as transport_connect_mock, patch( "xknx.io.self_description.UDPTransport.getsockname", return_value=local_addr, ), patch("xknx.io.self_description.UDPTransport.send") as transport_send_mock, patch("xknx.io.self_description.UDPTransport.stop") as transport_stop_mock, patch( "xknx.io.self_description.DescriptionQuery", wraps=DescriptionQuery ) as description_query_mock, ): task = asyncio.create_task(request_description(remote_addr[0])) await time_travel(0) transport_connect_mock.assert_called_once_with() assert transport_send_mock.call_count == 1 assert isinstance( transport_send_mock.call_args[0][0].body, DescriptionRequest ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.description_response_raw, remote_addr ) await time_travel(0) assert transport_send_mock.call_count == 2 assert isinstance( transport_send_mock.call_args[0][0].body, SearchRequestExtended ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.search_response_extended_raw, remote_addr ) gateway = await task transport_stop_mock.assert_called_once() assert transport_send_mock.call_count == 2 assert gateway.core_version == 2 assert gateway.name == "KNX IP Router 752 secure" assert gateway.tunnelling_requires_secure is True assert gateway.individual_address == IndividualAddress("5.0.0") file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestUDPTunnel.test_repeated_tunnel_request _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 132 async def test_repeated_tunnel_request( self, time_travel: EventLoopClockAdvancer ) -> None: """Test Tunnel for receiving repeated TunnellingRequest frames.""" self.tunnel.transport.send = Mock() self.tunnel.communication_channel = 1 self.tunnel.expected_sequence_number = 10 test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_IND, data=CEMILData.init_from_telegram(test_telegram), ) test_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=1, sequence_counter=10, raw_cemi=cemi.to_knx(), ) ) test_ack = KNXIPFrame.init_from_body(TunnellingAck(sequence_counter=10)) test_frame_9 = deepcopy(test_frame) test_frame_9.body.sequence_counter = 9 # first frame - ACK and processed self.tunnel._request_received(test_frame, None, None) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(test_ack, addr=None)] self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 # same sequence number as before - ACK, not processed self.tunnel._request_received(test_frame, None, None) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(test_ack, addr=None)] self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 # wrong sequence number - no ACK, not processed # reconnect if `auto_reconnect` was True with pytest.raises(CommunicationError): self.tunnel._request_received(test_frame_9, None, None) await time_travel(0) self.tunnel.transport.send.assert_not_called() self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestUDPTunnel.test_tunnel_send_retry ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 183 async def test_tunnel_send_retry(self, time_travel: EventLoopClockAdvancer) -> None: """Test tunnel resends the telegram when no ACK was received.""" self.tunnel.transport.send = Mock() self.tunnel.communication_channel = 1 self.tunnel.sequence_number = 23 self.tunnel.expected_sequence_number = 15 test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=self.tunnel._src_address, ), ) request = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=self.tunnel.communication_channel, sequence_counter=self.tunnel.sequence_number, raw_cemi=test_cemi.to_knx(), ) ) test_ack = KNXIPFrame.init_from_body( TunnellingAck(sequence_counter=self.tunnel.sequence_number) ) confirmation_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_CON, data=CEMILData.init_from_telegram(test_telegram), ) confirmation = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=1, sequence_counter=15, raw_cemi=confirmation_cemi.to_knx(), ) ) confirmation_ack = KNXIPFrame.init_from_body(TunnellingAck(sequence_counter=15)) task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(request, addr=None)] self.tunnel.transport.send.reset_mock() # no ACK received, resend same telegram await time_travel(1) assert self.tunnel.transport.send.call_args_list == [call(request, addr=None)] self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(test_ack, HPAI()) await time_travel(0) assert task.done() await task # L_Data.con ACK for UDP tunneling self.tunnel.transport.handle_knxipframe(confirmation, HPAI()) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [ call(confirmation_ack, addr=None) ] self.tunnel.transport.send.reset_mock() # Test raise after 2 missed ACKs (reconnect if `auto_reconnect` was True) with pytest.raises(CommunicationError): task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) # no ACKs received, for 2x wait time (with advancing the loop in between) await time_travel(1) await time_travel(1) assert self.tunnel.transport.send.call_count == 2 self.tunnel.transport.send.reset_mock() await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of TestUDPTunnel.test_tunnel_connect_send_disconnect[False-data_endpoint_addr0-local_endpoint0] _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 254 @pytest.mark.parametrize( ("route_back", "data_endpoint_addr", "local_endpoint"), [ (False, ("192.168.1.2", 56789), HPAI("192.168.1.1", 12345)), (True, None, HPAI()), ], ) async def test_tunnel_connect_send_disconnect( self, time_travel: EventLoopClockAdvancer, route_back: bool, data_endpoint_addr: tuple[str, int] | None, local_endpoint: HPAI, ) -> None: """Test initiating a tunnelling connection.""" local_addr = ("192.168.1.1", 12345) remote_addr = ("192.168.1.2", 3671) self.tunnel.route_back = route_back gateway_data_endpoint = ( HPAI(*data_endpoint_addr) if data_endpoint_addr else HPAI() ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() # Connect connect_request = ConnectRequest( control_endpoint=local_endpoint, data_endpoint=local_endpoint, ) connect_frame = KNXIPFrame.init_from_body(connect_request) connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() self.tunnel.transport.send.assert_called_once_with(connect_frame) connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=gateway_data_endpoint, crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_addr) await connection_task assert self.tunnel._data_endpoint_addr == data_endpoint_addr assert self.tunnel._src_address == IndividualAddress(7) # Send - use data endpoint self.tunnel.transport.send.reset_mock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=IndividualAddress(7), ), ) test_telegram_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=23, sequence_counter=0, raw_cemi=test_cemi.to_knx(), ) ) send_task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) self.tunnel.transport.send.assert_called_once_with( test_telegram_frame, addr=data_endpoint_addr ) # skip ack and confirmation assert not send_task.done() # Disconnect self.tunnel.transport.send.reset_mock() disconnect_request = DisconnectRequest( communication_channel_id=23, control_endpoint=local_endpoint, ) disconnect_frame = KNXIPFrame.init_from_body(disconnect_request) disconnection_task = asyncio.create_task(self.tunnel.disconnect()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(disconnect_frame) disconnect_response_frame = KNXIPFrame.init_from_body( DisconnectResponse(communication_channel_id=23) ) self.tunnel.transport.handle_knxipframe(disconnect_response_frame, remote_addr) await disconnection_task assert self.tunnel._data_endpoint_addr is None self.tunnel.transport.stop.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of TestUDPTunnel.test_tunnel_connect_send_disconnect[True-None-local_endpoint1] _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 254 @pytest.mark.parametrize( ("route_back", "data_endpoint_addr", "local_endpoint"), [ (False, ("192.168.1.2", 56789), HPAI("192.168.1.1", 12345)), (True, None, HPAI()), ], ) async def test_tunnel_connect_send_disconnect( self, time_travel: EventLoopClockAdvancer, route_back: bool, data_endpoint_addr: tuple[str, int] | None, local_endpoint: HPAI, ) -> None: """Test initiating a tunnelling connection.""" local_addr = ("192.168.1.1", 12345) remote_addr = ("192.168.1.2", 3671) self.tunnel.route_back = route_back gateway_data_endpoint = ( HPAI(*data_endpoint_addr) if data_endpoint_addr else HPAI() ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() # Connect connect_request = ConnectRequest( control_endpoint=local_endpoint, data_endpoint=local_endpoint, ) connect_frame = KNXIPFrame.init_from_body(connect_request) connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() self.tunnel.transport.send.assert_called_once_with(connect_frame) connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=gateway_data_endpoint, crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_addr) await connection_task assert self.tunnel._data_endpoint_addr == data_endpoint_addr assert self.tunnel._src_address == IndividualAddress(7) # Send - use data endpoint self.tunnel.transport.send.reset_mock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=IndividualAddress(7), ), ) test_telegram_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=23, sequence_counter=0, raw_cemi=test_cemi.to_knx(), ) ) send_task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) self.tunnel.transport.send.assert_called_once_with( test_telegram_frame, addr=data_endpoint_addr ) # skip ack and confirmation assert not send_task.done() # Disconnect self.tunnel.transport.send.reset_mock() disconnect_request = DisconnectRequest( communication_channel_id=23, control_endpoint=local_endpoint, ) disconnect_frame = KNXIPFrame.init_from_body(disconnect_request) disconnection_task = asyncio.create_task(self.tunnel.disconnect()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(disconnect_frame) disconnect_response_frame = KNXIPFrame.init_from_body( DisconnectResponse(communication_channel_id=23) ) self.tunnel.transport.handle_knxipframe(disconnect_response_frame, remote_addr) await disconnection_task assert self.tunnel._data_endpoint_addr is None self.tunnel.transport.stop.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestUDPTunnel.test_tunnel_request_description ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 352 async def test_tunnel_request_description( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel requesting and returning description of connected interface.""" local_addr = ("192.168.1.1", 12345) self.tunnel.transport.send = Mock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) description_request = KNXIPFrame.init_from_body( DescriptionRequest(control_endpoint=self.tunnel.local_hpai) ) description_response = KNXIPFrame.init_from_body(DescriptionResponse()) task = asyncio.create_task(self.tunnel.request_description()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(description_request) self.tunnel.transport.handle_knxipframe(description_response, HPAI()) await time_travel(0) assert task.done() assert isinstance(task.result(), GatewayDescriptor) assert self.tunnel.transport.send.call_count == 1 await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 393 async def test_tunnel_heartbeat(self, time_travel: EventLoopClockAdvancer) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) heartbeat_response = KNXIPFrame.init_from_body( ConnectionStateResponse( communication_channel_id=23, status_code=ErrorCode.E_NO_ERROR, ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_response, remote_hpai) # test no retry-heartbeat was sent await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_not_called() # next regular heartbeat await time_travel(HEARTBEAT_RATE - CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel._tunnel_lost.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat_no_answer ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 447 async def test_tunnel_heartbeat_no_answer( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() # no answer - repeat 3 times await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) # no answer - tunnel lost self.tunnel._tunnel_lost.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat_error __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 501 async def test_tunnel_heartbeat_error( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) heartbeat_error_response = KNXIPFrame.init_from_body( ConnectionStateResponse( communication_channel_id=23, status_code=ErrorCode.E_CONNECTION_ID, ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) # repeat 3 times await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) # third retry had an error - tunnel lost self.tunnel._tunnel_lost.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________________ ERROR at setup of test_ack_timeout ______________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 76 async def test_ack_timeout(time_travel: EventLoopClockAdvancer) -> None: """Test ACK timeout handling.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() _ia = IndividualAddress("4.0.1") conn = await xknx.management.connect(_ia) xknx.cemi_handler.send_telegram.reset_mock() device_desc_read = Telegram( destination_address=_ia, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) task = asyncio.create_task( conn.request( payload=apci.DeviceDescriptorRead(descriptor=0), expected=apci.DeviceDescriptorResponse, ) ) await asyncio.sleep(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(device_desc_read), ] await time_travel(MANAGAMENT_ACK_TIMEOUT) # telegram repeated assert xknx.cemi_handler.send_telegram.call_args_list == [ call(device_desc_read), call(device_desc_read), ] await time_travel(MANAGAMENT_ACK_TIMEOUT) with pytest.raises(ManagementConnectionTimeout): # still no ACK -> timeout await task await conn.disconnect() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________________ ERROR at setup of test_p2p_rate_limit[0] ___________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 238 @pytest.mark.parametrize("rate_limit", [0, 1]) async def test_p2p_rate_limit( time_travel: EventLoopClockAdvancer, rate_limit: int ) -> None: """Test rate limit for P2P management connections.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() ia = IndividualAddress("4.0.1") def send_responses(index: int) -> None: file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________________ ERROR at setup of test_p2p_rate_limit[1] ___________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 238 @pytest.mark.parametrize("rate_limit", [0, 1]) async def test_p2p_rate_limit( time_travel: EventLoopClockAdvancer, rate_limit: int ) -> None: """Test rate limit for P2P management connections.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() ia = IndividualAddress("4.0.1") def send_responses(index: int) -> None: file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of test_nm_individual_address_read _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 124 async def test_nm_individual_address_read(time_travel: EventLoopClockAdvancer) -> None: """Test nm_individual_address_read.""" _timeout = 2 xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_1 = IndividualAddress("1.1.4") individual_address_2 = IndividualAddress("15.15.255") task = asyncio.create_task( procedures.nm_individual_address_read(xknx=xknx, timeout=_timeout) ) address_broadcast = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) address_reply_message_1 = Telegram( source_address=individual_address_1, destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressResponse(), ) address_reply_message_2 = Telegram( source_address=individual_address_2, destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressResponse(), ) await asyncio.sleep(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(address_broadcast), ] xknx.management.process(address_reply_message_1) xknx.management.process(address_reply_message_2) await time_travel(_timeout) assert await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of test_nm_individual_address_write ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 201 async def test_nm_individual_address_write(time_travel: EventLoopClockAdvancer) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), direction=TelegramDirection.OUTGOING, payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) device_desc_resp = Telegram( source_address=individual_address_new, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) ack = Telegram( source_address=individual_address_new, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack2 = Telegram( destination_address=individual_address_new, source_address=IndividualAddress(0), direction=TelegramDirection.OUTGOING, tpci=tpci.TAck(0), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) individual_address_write = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressWrite(address=individual_address_new), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) # send response to device in programming mode xknx.management.process(address_reply_message) # confirm device is up and running await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) xknx.management.process(ack) xknx.management.process(device_desc_resp) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), call(individual_address_write), call(connect), call(device_desc_read), call(ack2), ] await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_two_devices_in_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 286 async def test_nm_individual_address_write_two_devices_in_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(0) # start await time_travel(3) # first timeout await time_travel(3) # second timeout assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), ] # receive two responses from devices in programming mode xknx.management.process(address_reply_message) xknx.management.process(address_reply_message) with pytest.raises( ManagementConnectionError, match="More than one KNX device is in programming mode", ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_no_device_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 344 async def test_nm_individual_address_write_no_device_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), ] # first timeout - retransmit DeviceDescriptorRead await time_travel(3) assert xknx.cemi_handler.send_telegram.call_args_list[2:] == [ call(device_desc_read), ] # retry also timed out await time_travel(3) assert xknx.cemi_handler.send_telegram.call_args_list[3:] == [ call(disconnect), call(individual_address_read), ] # IndividualAddressRead also times out await time_travel(3) with pytest.raises( ManagementConnectionError, match="No device in programming mode" ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_write_address_found _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 398 async def test_nm_individual_address_write_address_found( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) ack_in = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack_out = Telegram( source_address=IndividualAddress(0), destination_address=individual_address, tpci=tpci.TAck(0), ) device_desc_resp = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) disconnect = Telegram( destination_address=individual_address, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address ) ) # first request (address check) succeeds await time_travel(0) xknx.management.process(ack_in) xknx.management.process(device_desc_resp) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(ack_out), ] await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list[3:] == [ call(disconnect), call(individual_address_read), ] # second request times out - no device in programming mode await time_travel(3) with pytest.raises( ManagementConnectionError, match="No device in programming mode" ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____ ERROR at setup of test_nm_individual_address_write_programming_failed _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 468 async def test_nm_individual_address_write_programming_failed( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), direction=TelegramDirection.OUTGOING, payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) individual_address_write = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressWrite(address=individual_address_new), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) # send response to device in programming mode xknx.management.process(address_reply_message) # device experienced error, so set connection request timeout await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), call(individual_address_write), call(connect), call(device_desc_read), call(device_desc_read), call(disconnect), ] with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_address_found_other_in_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 537 async def test_nm_individual_address_write_address_found_other_in_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.5") individual_address_pgm = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) ack = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack2 = Telegram( source_address=IndividualAddress(0), destination_address=individual_address, tpci=tpci.TAck(0), ) device_desc_resp = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) disconnect = Telegram( destination_address=individual_address, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) address_reply_message = Telegram( source_address=individual_address_pgm, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address ) ) # make sure first request (address check) times out await time_travel(0) xknx.management.process(ack) xknx.management.process(device_desc_resp) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) xknx.management.process(address_reply_message) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(ack2), call(disconnect), call(individual_address_read), ] with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_serial_number_read ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 610 async def test_nm_individual_address_serial_number_read( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_read.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.5") serial_number = b"aabbccddeeff" task = asyncio.create_task( procedures.nm_individual_address_serial_number_read( xknx=xknx, serial=serial_number ) ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(read_address), ] xknx.management.process(address_reply) assert await task == individual_address file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____ ERROR at setup of test_nm_individual_address_serial_number_read_fail _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 648 async def test_nm_individual_address_serial_number_read_fail( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_read.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" task = asyncio.create_task( procedures.nm_individual_address_serial_number_read( xknx=xknx, serial=serial_number ) ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(read_address), ] await time_travel(3) assert await task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_serial_number_write _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 677 async def test_nm_individual_address_serial_number_write( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address = IndividualAddress("1.1.5") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] xknx.management.process(address_reply) await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_serial_number_write_fail_no_response _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 721 async def test_nm_individual_address_serial_number_write_fail_no_response( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address = IndividualAddress("1.1.5") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] await time_travel(3) with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_serial_number_write_fail_wrong_address _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 758 async def test_nm_individual_address_serial_number_write_fail_wrong_address( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address_tx = IndividualAddress("1.1.5") individual_address_rx = IndividualAddress("1.1.6") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address_tx ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address_tx ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address_rx, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address_rx, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] xknx.management.process(address_reply) with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ============================= slowest 10 durations ============================= 0.33s setup test/secure_tests/data_secure_test.py::TestDataSecure::test_data_secure_init 0.23s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_automatic_with_keyring_and_ia 0.16s setup test/remote_value_tests/remote_value_test.py::TestRemoteValue::test_get_set_value 0.16s call test/cemi_tests/cemi_frame_test.py::test_from_knx_with_not_handleable_cemi 0.16s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_ia 0.16s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_first_interface 0.15s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_user_id 0.15s teardown test/devices_tests/climate_test.py::TestClimate::test_initialized_for_setpoint_shift_calculations 0.14s call test/dpt_tests/dpt_color_test.py::TestDPTColorRGBW::test_rgbwcolor_to_knx_limits[0-0-0--1] 0.13s call test/devices_tests/sensor_expose_loop_test.py::TestSensorExposeLoop::test_array_sensor_loop[angle_deg-test_payload9-880.5026] =========================== short test summary info ============================ ERROR test/cemi_tests/cemi_handler_test.py::test_wait_for_l2_confirmation ERROR test/core_tests/task_registry_test.py::TestTaskRegistry::test_reconnect_handling ERROR test/core_tests/task_registry_test.py::TestTaskRegistry::test_background ERROR test/devices_tests/binary_sensor_test.py::TestBinarySensor::test_process_reset_after ERROR test/devices_tests/cover_test.py::TestCover::test_auto_stop ERROR test/devices_tests/cover_test.py::TestCover::test_periodic_update ERROR test/devices_tests/datetime_test.py::TestDateTime::test_background_task ERROR test/devices_tests/datetime_test.py::TestDateTime::test_no_background_task ERROR test/devices_tests/expose_sensor_test.py::TestExposeSensor::test_cooldown ERROR test/devices_tests/light_test.py::TestLight::test_process_individual_color_debouncer ERROR test/devices_tests/switch_test.py::TestSwitch::test_process_reset_after ERROR test/devices_tests/switch_test.py::TestSwitch::test_process_reset_after_cancel_existing ERROR test/io_tests/gateway_scanner_test.py::TestGatewayScanner::test_async_scan_timeout ERROR test/io_tests/gateway_scanner_test.py::TestGatewayScanner::test_async_scan_exit ERROR test/io_tests/routing_test.py::TestFlowControl::test_basic_throttling ERROR test/io_tests/routing_test.py::TestFlowControl::test_routing_busy ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_no_synchronize ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_synchronize ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_received_timer_notify ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_received_secure_wrapper ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_send_secure_wrapper ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_lifecycle ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_frames ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_session_response ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_no_authentication ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_authentication ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_description_query ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_request_description_v1 ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_request_description_extended ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_repeated_tunnel_request ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_send_retry ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_connect_send_disconnect[False-data_endpoint_addr0-local_endpoint0] ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_connect_send_disconnect[True-None-local_endpoint1] ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_request_description ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat_no_answer ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat_error ERROR test/management_tests/management_test.py::test_ack_timeout ERROR test/management_tests/management_test.py::test_p2p_rate_limit[0] ERROR test/management_tests/management_test.py::test_p2p_rate_limit[1] ERROR test/management_tests/procedures_test.py::test_nm_individual_address_read ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_two_devices_in_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_no_device_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_address_found ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_programming_failed ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_address_found_other_in_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_read ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_read_fail ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write_fail_no_response ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write_fail_wrong_address ================ 2782 passed, 3 deselected, 52 errors in 15.55s ================ E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest --no-cov -k "not test_scan_timeout and not test_start_secure_routing_knx_keys and not test_start_secure_routing_manual" dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13 make: *** [debian/rules:8: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration E: Failed autobuilding of package I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/113504 and its subdirectories Starting cleanup. All cleanup done. Wed Sep 17 18:47:58 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-zfItQIjK, removing. /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn: total 16 drwxrwxr-x 2 jenkins jenkins 4096 Sep 17 18:47 b1 drwxrwxr-x 2 jenkins jenkins 4096 Sep 17 18:45 b2 -rw-rw-r-- 1 jenkins jenkins 2305 Mar 26 16:07 python-xknx_3.6.0-1.dsc -rw------- 1 jenkins jenkins 3433 Sep 17 18:45 rbuildlog.eUul6Fn /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/b1: total 268 -rw-r--r-- 1 jenkins jenkins 273518 Sep 17 18:47 build.log /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/b2: total 0 Wed Sep 17 18:47:59 UTC 2025 I: Deleting $TMPDIR on ionos1-amd64.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Wed Sep 17 06:45:46 -12 2025 I: pbuilder-time-stamp: 1758134746 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [python-xknx_3.6.0-1.dsc] I: copying [./python-xknx_3.6.0.orig.tar.gz] I: copying [./python-xknx_3.6.0-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./python-xknx_3.6.0-1.dsc: no acceptable signature found dpkg-source: info: extracting python-xknx in python-xknx-3.6.0 dpkg-source: info: unpacking python-xknx_3.6.0.orig.tar.gz dpkg-source: info: unpacking python-xknx_3.6.0-1.debian.tar.xz I: using fakeroot in build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/113504/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='amd64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=40 ' DISTRIBUTION='unstable' HOME='/root' HOST_ARCH='amd64' IFS=' ' INVOCATION_ID='121814075efb40bfb0ae038c6b643bd4' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='113504' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/pbuilderrc_ofDa --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.ty0vS4Tn/b1 --logfile b1/build.log python-xknx_3.6.0-1.dsc' SUDO_GID='110' SUDO_HOME='/var/lib/jenkins' SUDO_UID='105' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://46.16.76.132:3128' I: uname -a Linux ionos1-amd64 6.12.43+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.43-1 (2025-08-27) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin I: user script /srv/workspace/pbuilder/113504/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: amd64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), openstack-pkg-tools, pybuild-plugin-pyproject, python3-all, python3-setuptools, python3-cryptography, python3-freezegun, python3-ifaddr, python3-mypy, python3-pytest, python3-pytest-asyncio, python3-pytest-cov dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19917 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on openstack-pkg-tools; however: Package openstack-pkg-tools is not installed. pbuilder-satisfydepends-dummy depends on pybuild-plugin-pyproject; however: Package pybuild-plugin-pyproject is not installed. pbuilder-satisfydepends-dummy depends on python3-all; however: Package python3-all is not installed. pbuilder-satisfydepends-dummy depends on python3-setuptools; however: Package python3-setuptools is not installed. pbuilder-satisfydepends-dummy depends on python3-cryptography; however: Package python3-cryptography is not installed. pbuilder-satisfydepends-dummy depends on python3-freezegun; however: Package python3-freezegun is not installed. pbuilder-satisfydepends-dummy depends on python3-ifaddr; however: Package python3-ifaddr is not installed. pbuilder-satisfydepends-dummy depends on python3-mypy; however: Package python3-mypy is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-asyncio; however: Package python3-pytest-asyncio is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-cov; however: Package python3-pytest-cov is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} jq{a} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libffi8{a} libfile-stripnondeterminism-perl{a} libjq1{a} libjs-jquery{a} libjs-jquery-hotkeys{a} libjs-jquery-isonscreen{a} libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-jquery-throttle-debounce{a} libmagic-mgc{a} libmagic1t64{a} libonig5{a} libpipeline1{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2-16{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} openstack-pkg-tools{a} po-debconf{a} pybuild-plugin-pyproject{a} python3{a} python3-all{a} python3-async-generator{a} python3-autocommand{a} python3-bcrypt{a} python3-build{a} python3-cffi-backend{a} python3-coverage{a} python3-cryptography{a} python3-dateutil{a} python3-freezegun{a} python3-ifaddr{a} python3-inflect{a} python3-iniconfig{a} python3-installer{a} python3-jaraco.context{a} python3-jaraco.functools{a} python3-jaraco.text{a} python3-minimal{a} python3-more-itertools{a} python3-mypy{a} python3-mypy-extensions{a} python3-packaging{a} python3-pathspec{a} python3-pip{a} python3-pkg-resources{a} python3-pluggy{a} python3-psutil{a} python3-pygments{a} python3-pyproject-hooks{a} python3-pytest{a} python3-pytest-asyncio{a} python3-pytest-cov{a} python3-setuptools{a} python3-typeguard{a} python3-typing-extensions{a} python3-wheel{a} python3-zipp{a} python3.13{a} python3.13-minimal{a} readline-common{a} sensible-utils{a} tzdata{a} The following packages are RECOMMENDED but will NOT be installed: autopkgtest curl javascript-common libarchive-cpio-perl libjs-sphinxdoc libltdl-dev libmail-sendmail-perl lynx madison-lite pristine-tar python3-dev python3-lxml python3-orjson wget 0 packages upgraded, 93 newly installed, 0 to remove and 0 not upgraded. Need to get 35.8 MB of archives. After unpacking 152 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main amd64 libexpat1 amd64 2.7.2-1 [111 kB] Get: 2 http://deb.debian.org/debian unstable/main amd64 libpython3.13-minimal amd64 3.13.7-1 [864 kB] Get: 3 http://deb.debian.org/debian unstable/main amd64 python3.13-minimal amd64 3.13.7-1 [2216 kB] Get: 4 http://deb.debian.org/debian unstable/main amd64 python3-minimal amd64 3.13.7-1 [27.2 kB] Get: 5 http://deb.debian.org/debian unstable/main amd64 media-types all 13.0.0 [29.3 kB] Get: 6 http://deb.debian.org/debian unstable/main amd64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian unstable/main amd64 tzdata all 2025b-5 [260 kB] Get: 8 http://deb.debian.org/debian unstable/main amd64 libffi8 amd64 3.5.2-2 [25.5 kB] Get: 9 http://deb.debian.org/debian unstable/main amd64 readline-common all 8.3-3 [74.8 kB] Get: 10 http://deb.debian.org/debian unstable/main amd64 libreadline8t64 amd64 8.3-3 [191 kB] Get: 11 http://deb.debian.org/debian unstable/main amd64 libpython3.13-stdlib amd64 3.13.7-1 [1960 kB] Get: 12 http://deb.debian.org/debian unstable/main amd64 python3.13 amd64 3.13.7-1 [761 kB] Get: 13 http://deb.debian.org/debian unstable/main amd64 libpython3-stdlib amd64 3.13.7-1 [10.2 kB] Get: 14 http://deb.debian.org/debian unstable/main amd64 python3 amd64 3.13.7-1 [28.3 kB] Get: 15 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.26 [27.0 kB] Get: 16 http://deb.debian.org/debian unstable/main amd64 openssl amd64 3.5.2-1 [1493 kB] Get: 17 http://deb.debian.org/debian unstable/main amd64 ca-certificates all 20250419 [162 kB] Get: 18 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.46-5 [338 kB] Get: 19 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.46-5 [109 kB] Get: 20 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.46-5 [43.6 kB] Get: 21 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.23.1-2+b1 [244 kB] Get: 22 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-2 [68.5 kB] Get: 23 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-9 [1187 kB] Get: 24 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.41.1-3 [100 kB] Get: 25 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-1 [42.0 kB] Get: 26 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.13.1-1 [1469 kB] Get: 27 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.20-1 [324 kB] Get: 28 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.72-3.1 [494 kB] Get: 29 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20240727.1 [60.2 kB] Get: 30 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.17-4 [862 kB] Get: 31 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.23.1-2 [770 kB] Get: 32 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.26 [91.8 kB] Get: 33 http://deb.debian.org/debian unstable/main amd64 libtool all 2.5.4-5 [540 kB] Get: 34 http://deb.debian.org/debian unstable/main amd64 dh-autoreconf all 21 [12.2 kB] Get: 35 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 36 http://deb.debian.org/debian unstable/main amd64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Get: 37 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Get: 38 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.193-3 [192 kB] Get: 39 http://deb.debian.org/debian unstable/main amd64 dwz amd64 0.16-2 [108 kB] Get: 40 http://deb.debian.org/debian unstable/main amd64 libunistring5 amd64 1.3-2 [477 kB] Get: 41 http://deb.debian.org/debian unstable/main amd64 libxml2-16 amd64 2.14.5+dfsg-0.2 [638 kB] Get: 42 http://deb.debian.org/debian unstable/main amd64 gettext amd64 0.23.1-2+b1 [1680 kB] Get: 43 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 44 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 45 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.26 [939 kB] Get: 46 http://deb.debian.org/debian unstable/main amd64 dh-python all 6.20250414 [116 kB] Get: 47 http://deb.debian.org/debian unstable/main amd64 libonig5 amd64 6.9.10-1 [200 kB] Get: 48 http://deb.debian.org/debian unstable/main amd64 libjq1 amd64 1.8.1-3 [167 kB] Get: 49 http://deb.debian.org/debian unstable/main amd64 jq amd64 1.8.1-3 [85.3 kB] Get: 50 http://deb.debian.org/debian unstable/main amd64 libjs-jquery all 3.7.1+dfsg+~3.5.33-1 [319 kB] Get: 51 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-hotkeys all 0.2.0-1 [12.6 kB] Get: 52 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-isonscreen all 1.2.0-1.1 [3196 B] Get: 53 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-metadata all 12-4 [6532 B] Get: 54 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [184 kB] Get: 55 http://deb.debian.org/debian unstable/main amd64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.2 kB] Get: 56 http://deb.debian.org/debian unstable/main amd64 python3-packaging all 25.0-1 [56.6 kB] Get: 57 http://deb.debian.org/debian unstable/main amd64 python3-wheel all 0.46.1-2 [21.7 kB] Get: 58 http://deb.debian.org/debian unstable/main amd64 python3-pip all 25.2+dfsg-1 [1386 kB] Get: 59 http://deb.debian.org/debian unstable/main amd64 openstack-pkg-tools all 135 [98.7 kB] Get: 60 http://deb.debian.org/debian unstable/main amd64 python3-pyproject-hooks all 1.2.0-1 [11.7 kB] Get: 61 http://deb.debian.org/debian unstable/main amd64 python3-build all 1.2.2-4 [36.2 kB] Get: 62 http://deb.debian.org/debian unstable/main amd64 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Get: 63 http://deb.debian.org/debian unstable/main amd64 pybuild-plugin-pyproject all 6.20250414 [11.8 kB] Get: 64 http://deb.debian.org/debian unstable/main amd64 python3-all amd64 3.13.7-1 [1048 B] Get: 65 http://deb.debian.org/debian unstable/main amd64 python3-async-generator all 1.10-4 [17.4 kB] Get: 66 http://deb.debian.org/debian unstable/main amd64 python3-autocommand all 2.2.2-3 [13.6 kB] Get: 67 http://deb.debian.org/debian unstable/main amd64 python3-bcrypt amd64 4.3.0-1 [212 kB] Get: 68 http://deb.debian.org/debian unstable/main amd64 python3-cffi-backend amd64 2.0.0-1 [102 kB] Get: 69 http://deb.debian.org/debian unstable/main amd64 python3-coverage amd64 7.8.2+dfsg1-1 [182 kB] Get: 70 http://deb.debian.org/debian unstable/main amd64 python3-cryptography amd64 43.0.0-3 [941 kB] Get: 71 http://deb.debian.org/debian unstable/main amd64 python3-dateutil all 2.9.0-4 [79.4 kB] Get: 72 http://deb.debian.org/debian unstable/main amd64 python3-freezegun all 1.5.1-1.2 [17.2 kB] Get: 73 http://deb.debian.org/debian unstable/main amd64 python3-ifaddr all 0.2.0-2 [9916 B] Get: 74 http://deb.debian.org/debian unstable/main amd64 python3-more-itertools all 10.8.0-1 [71.7 kB] Get: 75 http://deb.debian.org/debian unstable/main amd64 python3-typing-extensions all 4.15.0-1 [92.4 kB] Get: 76 http://deb.debian.org/debian unstable/main amd64 python3-typeguard all 4.4.4-1 [37.1 kB] Get: 77 http://deb.debian.org/debian unstable/main amd64 python3-inflect all 7.5.0-1 [33.0 kB] Get: 78 http://deb.debian.org/debian unstable/main amd64 python3-iniconfig all 1.1.1-2 [6396 B] Get: 79 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Get: 80 http://deb.debian.org/debian unstable/main amd64 python3-pkg-resources all 78.1.1-0.1 [224 kB] Get: 81 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Get: 82 http://deb.debian.org/debian unstable/main amd64 python3-zipp all 3.23.0-1 [11.0 kB] Get: 83 http://deb.debian.org/debian unstable/main amd64 python3-setuptools all 78.1.1-0.1 [738 kB] Get: 84 http://deb.debian.org/debian unstable/main amd64 python3-jaraco.context all 6.0.1-1 [8276 B] Get: 85 http://deb.debian.org/debian unstable/main amd64 python3-mypy-extensions all 1.1.0-1 [6656 B] Get: 86 http://deb.debian.org/debian unstable/main amd64 python3-pathspec all 0.12.1-1 [28.1 kB] Get: 87 http://deb.debian.org/debian unstable/main amd64 python3-psutil amd64 7.0.0-2 [220 kB] Get: 88 http://deb.debian.org/debian unstable/main amd64 python3-mypy amd64 1.18.1-1 [9407 kB] Get: 89 http://deb.debian.org/debian unstable/main amd64 python3-pluggy all 1.6.0-1 [27.1 kB] Get: 90 http://deb.debian.org/debian unstable/main amd64 python3-pygments all 2.18.0+dfsg-2 [836 kB] Get: 91 http://deb.debian.org/debian unstable/main amd64 python3-pytest all 8.4.2-1 [266 kB] Get: 92 http://deb.debian.org/debian unstable/main amd64 python3-pytest-asyncio all 1.1.0-2 [13.1 kB] Get: 93 http://deb.debian.org/debian unstable/main amd64 python3-pytest-cov all 5.0.0-1 [26.8 kB] Fetched 35.8 MB in 1s (42.5 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19917 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.2-1_amd64.deb ... Unpacking libexpat1:amd64 (2.7.2-1) ... Selecting previously unselected package libpython3.13-minimal:amd64. Preparing to unpack .../libpython3.13-minimal_3.13.7-1_amd64.deb ... Unpacking libpython3.13-minimal:amd64 (3.13.7-1) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.7-1_amd64.deb ... Unpacking python3.13-minimal (3.13.7-1) ... Setting up libpython3.13-minimal:amd64 (3.13.7-1) ... Setting up libexpat1:amd64 (2.7.2-1) ... Setting up python3.13-minimal (3.13.7-1) ... Selecting previously unselected package python3-minimal. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 20251 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.7-1_amd64.deb ... Unpacking python3-minimal (3.13.7-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_13.0.0_all.deb ... Unpacking media-types (13.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-5_all.deb ... Unpacking tzdata (2025b-5) ... Selecting previously unselected package libffi8:amd64. Preparing to unpack .../4-libffi8_3.5.2-2_amd64.deb ... Unpacking libffi8:amd64 (3.5.2-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.3-3_all.deb ... Unpacking readline-common (8.3-3) ... Selecting previously unselected package libreadline8t64:amd64. Preparing to unpack .../6-libreadline8t64_8.3-3_amd64.deb ... Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8 to /lib/x86_64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libhistory.so.8.2 to /lib/x86_64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8 to /lib/x86_64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/x86_64-linux-gnu/libreadline.so.8.2 to /lib/x86_64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:amd64 (8.3-3) ... Selecting previously unselected package libpython3.13-stdlib:amd64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.7-1_amd64.deb ... Unpacking libpython3.13-stdlib:amd64 (3.13.7-1) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.7-1_amd64.deb ... Unpacking python3.13 (3.13.7-1) ... Selecting previously unselected package libpython3-stdlib:amd64. Preparing to unpack .../9-libpython3-stdlib_3.13.7-1_amd64.deb ... Unpacking libpython3-stdlib:amd64 (3.13.7-1) ... Setting up python3-minimal (3.13.7-1) ... Selecting previously unselected package python3. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 21266 files and directories currently installed.) Preparing to unpack .../00-python3_3.13.7-1_amd64.deb ... Unpacking python3 (3.13.7-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../01-sensible-utils_0.0.26_all.deb ... Unpacking sensible-utils (0.0.26) ... Selecting previously unselected package openssl. Preparing to unpack .../02-openssl_3.5.2-1_amd64.deb ... Unpacking openssl (3.5.2-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../03-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../04-libmagic-mgc_1%3a5.46-5_amd64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:amd64. Preparing to unpack .../05-libmagic1t64_1%3a5.46-5_amd64.deb ... Unpacking libmagic1t64:amd64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../06-file_1%3a5.46-5_amd64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../07-gettext-base_0.23.1-2+b1_amd64.deb ... Unpacking gettext-base (0.23.1-2+b1) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../08-libuchardet0_0.0.8-2_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.8-2) ... Selecting previously unselected package groff-base. Preparing to unpack .../09-groff-base_1.23.0-9_amd64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../10-bsdextrautils_2.41.1-3_amd64.deb ... Unpacking bsdextrautils (2.41.1-3) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../11-libpipeline1_1.5.8-1_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../12-man-db_2.13.1-1_amd64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../13-m4_1.4.20-1_amd64.deb ... Unpacking m4 (1.4.20-1) ... Selecting previously unselected package autoconf. Preparing to unpack .../14-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../15-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../16-automake_1%3a1.17-4_all.deb ... Unpacking automake (1:1.17-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../17-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../18-libdebhelper-perl_13.26_all.deb ... Unpacking libdebhelper-perl (13.26) ... Selecting previously unselected package libtool. Preparing to unpack .../19-libtool_2.5.4-5_all.deb ... Unpacking libtool (2.5.4-5) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../20-dh-autoreconf_21_all.deb ... Unpacking dh-autoreconf (21) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../21-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../22-libfile-stripnondeterminism-perl_1.15.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.15.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../23-dh-strip-nondeterminism_1.15.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.15.0-1) ... Selecting previously unselected package libelf1t64:amd64. Preparing to unpack .../24-libelf1t64_0.193-3_amd64.deb ... Unpacking libelf1t64:amd64 (0.193-3) ... Selecting previously unselected package dwz. Preparing to unpack .../25-dwz_0.16-2_amd64.deb ... Unpacking dwz (0.16-2) ... Selecting previously unselected package libunistring5:amd64. Preparing to unpack .../26-libunistring5_1.3-2_amd64.deb ... Unpacking libunistring5:amd64 (1.3-2) ... Selecting previously unselected package libxml2-16:amd64. Preparing to unpack .../27-libxml2-16_2.14.5+dfsg-0.2_amd64.deb ... Unpacking libxml2-16:amd64 (2.14.5+dfsg-0.2) ... Selecting previously unselected package gettext. Preparing to unpack .../28-gettext_0.23.1-2+b1_amd64.deb ... Unpacking gettext (0.23.1-2+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../29-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../30-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../31-debhelper_13.26_all.deb ... Unpacking debhelper (13.26) ... Selecting previously unselected package dh-python. Preparing to unpack .../32-dh-python_6.20250414_all.deb ... Unpacking dh-python (6.20250414) ... Selecting previously unselected package libonig5:amd64. Preparing to unpack .../33-libonig5_6.9.10-1_amd64.deb ... Unpacking libonig5:amd64 (6.9.10-1) ... Selecting previously unselected package libjq1:amd64. Preparing to unpack .../34-libjq1_1.8.1-3_amd64.deb ... Unpacking libjq1:amd64 (1.8.1-3) ... Selecting previously unselected package jq. Preparing to unpack .../35-jq_1.8.1-3_amd64.deb ... Unpacking jq (1.8.1-3) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../36-libjs-jquery_3.7.1+dfsg+~3.5.33-1_all.deb ... Unpacking libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Selecting previously unselected package libjs-jquery-hotkeys. Preparing to unpack .../37-libjs-jquery-hotkeys_0.2.0-1_all.deb ... Unpacking libjs-jquery-hotkeys (0.2.0-1) ... Selecting previously unselected package libjs-jquery-isonscreen. Preparing to unpack .../38-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... Selecting previously unselected package libjs-jquery-metadata. Preparing to unpack .../39-libjs-jquery-metadata_12-4_all.deb ... Unpacking libjs-jquery-metadata (12-4) ... Selecting previously unselected package libjs-jquery-tablesorter. Preparing to unpack .../40-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Selecting previously unselected package libjs-jquery-throttle-debounce. Preparing to unpack .../41-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../42-python3-packaging_25.0-1_all.deb ... Unpacking python3-packaging (25.0-1) ... Selecting previously unselected package python3-wheel. Preparing to unpack .../43-python3-wheel_0.46.1-2_all.deb ... Unpacking python3-wheel (0.46.1-2) ... Selecting previously unselected package python3-pip. Preparing to unpack .../44-python3-pip_25.2+dfsg-1_all.deb ... Unpacking python3-pip (25.2+dfsg-1) ... Selecting previously unselected package openstack-pkg-tools. Preparing to unpack .../45-openstack-pkg-tools_135_all.deb ... Unpacking openstack-pkg-tools (135) ... Selecting previously unselected package python3-pyproject-hooks. Preparing to unpack .../46-python3-pyproject-hooks_1.2.0-1_all.deb ... Unpacking python3-pyproject-hooks (1.2.0-1) ... Selecting previously unselected package python3-build. Preparing to unpack .../47-python3-build_1.2.2-4_all.deb ... Unpacking python3-build (1.2.2-4) ... Selecting previously unselected package python3-installer. Preparing to unpack .../48-python3-installer_0.7.0+dfsg1-3_all.deb ... Unpacking python3-installer (0.7.0+dfsg1-3) ... Selecting previously unselected package pybuild-plugin-pyproject. Preparing to unpack .../49-pybuild-plugin-pyproject_6.20250414_all.deb ... Unpacking pybuild-plugin-pyproject (6.20250414) ... Selecting previously unselected package python3-all. Preparing to unpack .../50-python3-all_3.13.7-1_amd64.deb ... Unpacking python3-all (3.13.7-1) ... Selecting previously unselected package python3-async-generator. Preparing to unpack .../51-python3-async-generator_1.10-4_all.deb ... Unpacking python3-async-generator (1.10-4) ... Selecting previously unselected package python3-autocommand. Preparing to unpack .../52-python3-autocommand_2.2.2-3_all.deb ... Unpacking python3-autocommand (2.2.2-3) ... Selecting previously unselected package python3-bcrypt. Preparing to unpack .../53-python3-bcrypt_4.3.0-1_amd64.deb ... Unpacking python3-bcrypt (4.3.0-1) ... Selecting previously unselected package python3-cffi-backend:amd64. Preparing to unpack .../54-python3-cffi-backend_2.0.0-1_amd64.deb ... Unpacking python3-cffi-backend:amd64 (2.0.0-1) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../55-python3-coverage_7.8.2+dfsg1-1_amd64.deb ... Unpacking python3-coverage (7.8.2+dfsg1-1) ... Selecting previously unselected package python3-cryptography. Preparing to unpack .../56-python3-cryptography_43.0.0-3_amd64.deb ... Unpacking python3-cryptography (43.0.0-3) ... Selecting previously unselected package python3-dateutil. Preparing to unpack .../57-python3-dateutil_2.9.0-4_all.deb ... Unpacking python3-dateutil (2.9.0-4) ... Selecting previously unselected package python3-freezegun. Preparing to unpack .../58-python3-freezegun_1.5.1-1.2_all.deb ... Unpacking python3-freezegun (1.5.1-1.2) ... Selecting previously unselected package python3-ifaddr. Preparing to unpack .../59-python3-ifaddr_0.2.0-2_all.deb ... Unpacking python3-ifaddr (0.2.0-2) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../60-python3-more-itertools_10.8.0-1_all.deb ... Unpacking python3-more-itertools (10.8.0-1) ... Selecting previously unselected package python3-typing-extensions. Preparing to unpack .../61-python3-typing-extensions_4.15.0-1_all.deb ... Unpacking python3-typing-extensions (4.15.0-1) ... Selecting previously unselected package python3-typeguard. Preparing to unpack .../62-python3-typeguard_4.4.4-1_all.deb ... Unpacking python3-typeguard (4.4.4-1) ... Selecting previously unselected package python3-inflect. Preparing to unpack .../63-python3-inflect_7.5.0-1_all.deb ... Unpacking python3-inflect (7.5.0-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../64-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-jaraco.functools. Preparing to unpack .../65-python3-jaraco.functools_4.1.0-1_all.deb ... Unpacking python3-jaraco.functools (4.1.0-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../66-python3-pkg-resources_78.1.1-0.1_all.deb ... Unpacking python3-pkg-resources (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.text. Preparing to unpack .../67-python3-jaraco.text_4.0.0-1_all.deb ... Unpacking python3-jaraco.text (4.0.0-1) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../68-python3-zipp_3.23.0-1_all.deb ... Unpacking python3-zipp (3.23.0-1) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../69-python3-setuptools_78.1.1-0.1_all.deb ... Unpacking python3-setuptools (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.context. Preparing to unpack .../70-python3-jaraco.context_6.0.1-1_all.deb ... Unpacking python3-jaraco.context (6.0.1-1) ... Selecting previously unselected package python3-mypy-extensions. Preparing to unpack .../71-python3-mypy-extensions_1.1.0-1_all.deb ... Unpacking python3-mypy-extensions (1.1.0-1) ... Selecting previously unselected package python3-pathspec. Preparing to unpack .../72-python3-pathspec_0.12.1-1_all.deb ... Unpacking python3-pathspec (0.12.1-1) ... Selecting previously unselected package python3-psutil. Preparing to unpack .../73-python3-psutil_7.0.0-2_amd64.deb ... Unpacking python3-psutil (7.0.0-2) ... Selecting previously unselected package python3-mypy. Preparing to unpack .../74-python3-mypy_1.18.1-1_amd64.deb ... Unpacking python3-mypy (1.18.1-1) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../75-python3-pluggy_1.6.0-1_all.deb ... Unpacking python3-pluggy (1.6.0-1) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../76-python3-pygments_2.18.0+dfsg-2_all.deb ... Unpacking python3-pygments (2.18.0+dfsg-2) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../77-python3-pytest_8.4.2-1_all.deb ... Unpacking python3-pytest (8.4.2-1) ... Selecting previously unselected package python3-pytest-asyncio. Preparing to unpack .../78-python3-pytest-asyncio_1.1.0-2_all.deb ... Unpacking python3-pytest-asyncio (1.1.0-2) ... Selecting previously unselected package python3-pytest-cov. Preparing to unpack .../79-python3-pytest-cov_5.0.0-1_all.deb ... Unpacking python3-pytest-cov (5.0.0-1) ... Setting up media-types (13.0.0) ... Setting up libpipeline1:amd64 (1.5.8-1) ... Setting up bsdextrautils (2.41.1-3) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libxml2-16:amd64 (2.14.5+dfsg-0.2) ... Setting up libdebhelper-perl (13.26) ... Setting up libmagic1t64:amd64 (1:5.46-5) ... Setting up gettext-base (0.23.1-2+b1) ... Setting up m4 (1.4.20-1) ... Setting up file (1:5.46-5) ... Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Setting up libelf1t64:amd64 (0.193-3) ... Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' Local time is now: Wed Sep 17 18:47:09 UTC 2025. Universal Time is now: Wed Sep 17 18:47:09 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20240727.1) ... Setting up libunistring5:amd64 (1.3-2) ... Setting up autopoint (0.23.1-2) ... Setting up autoconf (2.72-3.1) ... Setting up libffi8:amd64 (3.5.2-2) ... Setting up dwz (0.16-2) ... Setting up sensible-utils (0.0.26) ... Setting up libuchardet0:amd64 (0.0.8-2) ... Setting up netbase (6.5) ... Setting up libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Setting up libjs-jquery-hotkeys (0.2.0-1) ... Setting up openssl (3.5.2-1) ... Setting up readline-common (8.3-3) ... Setting up libonig5:amd64 (6.9.10-1) ... Setting up automake (1:1.17-4) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.15.0-1) ... Setting up gettext (0.23.1-2+b1) ... Setting up libtool (2.5.4-5) ... Setting up libjq1:amd64 (1.8.1-3) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (21) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up libjs-jquery-metadata (12-4) ... Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... Setting up libreadline8t64:amd64 (8.3-3) ... Setting up dh-strip-nondeterminism (1.15.0-1) ... Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Setting up groff-base (1.23.0-9) ... Setting up jq (1.8.1-3) ... Setting up libpython3.13-stdlib:amd64 (3.13.7-1) ... Setting up libpython3-stdlib:amd64 (3.13.7-1) ... Setting up python3.13 (3.13.7-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up python3 (3.13.7-1) ... Setting up python3-zipp (3.23.0-1) ... Setting up python3-autocommand (2.2.2-3) ... Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up python3-psutil (7.0.0-2) ... Setting up python3-ifaddr (0.2.0-2) ... Setting up python3-pygments (2.18.0+dfsg-2) ... Setting up python3-packaging (25.0-1) ... Setting up python3-pyproject-hooks (1.2.0-1) ... Setting up python3-typing-extensions (4.15.0-1) ... Setting up python3-installer (0.7.0+dfsg1-3) ... Setting up python3-pluggy (1.6.0-1) ... Setting up python3-dateutil (2.9.0-4) ... Setting up python3-pathspec (0.12.1-1) ... Setting up python3-freezegun (1.5.1-1.2) ... Setting up python3-cffi-backend:amd64 (2.0.0-1) ... Setting up dh-python (6.20250414) ... Setting up python3-more-itertools (10.8.0-1) ... Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-jaraco.functools (4.1.0-1) ... Setting up python3-async-generator (1.10-4) ... Setting up python3-jaraco.context (6.0.1-1) ... Setting up python3-pytest (8.4.2-1) ... Setting up python3-mypy-extensions (1.1.0-1) ... Setting up python3-bcrypt (4.3.0-1) ... Setting up python3-typeguard (4.4.4-1) ... Setting up python3-all (3.13.7-1) ... Setting up python3-coverage (7.8.2+dfsg1-1) ... Setting up debhelper (13.26) ... Setting up python3-pytest-cov (5.0.0-1) ... Setting up python3-wheel (0.46.1-2) ... Setting up python3-inflect (7.5.0-1) ... Setting up python3-jaraco.text (4.0.0-1) ... Setting up python3-cryptography (43.0.0-3) ... Setting up python3-mypy (1.18.1-1) ... Setting up python3-pip (25.2+dfsg-1) ... Setting up python3-pytest-asyncio (1.1.0-2) ... Setting up python3-build (1.2.2-4) ... Setting up python3-pkg-resources (78.1.1-0.1) ... Setting up python3-setuptools (78.1.1-0.1) ... Setting up pybuild-plugin-pyproject (6.20250414) ... Setting up openstack-pkg-tools (135) ... Processing triggers for libc-bin (2.41-12) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps Reading package lists... Building dependency tree... Reading state information... fakeroot is already the newest version (1.37.1.2-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: Running cd /build/reproducible-path/python-xknx-3.6.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../python-xknx_3.6.0-1_source.changes dpkg-buildpackage: info: source package python-xknx dpkg-buildpackage: info: source version 3.6.0-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Edward Betts dpkg-source --before-build . dpkg-buildpackage: info: host architecture amd64 dpkg-source: info: using options from python-xknx-3.6.0/debian/source/options: --extend-diff-ignore=^[^/]*[.]egg-info/ debian/rules clean make: pyversions: No such file or directory py3versions: no X-Python3-Version in control file, using supported versions dh clean --buildsystem=pybuild --with python3 dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary make: pyversions: No such file or directory py3versions: no X-Python3-Version in control file, using supported versions dh binary --buildsystem=pybuild --with python3 dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild dh_auto_build -O--buildsystem=pybuild I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13 * Building wheel... /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3/dist-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3/dist-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/xknx copying xknx/__version__.py -> build/lib/xknx copying xknx/xknx.py -> build/lib/xknx copying xknx/__init__.py -> build/lib/xknx creating build/lib/xknx/io copying xknx/io/connection.py -> build/lib/xknx/io copying xknx/io/interface.py -> build/lib/xknx/io copying xknx/io/__init__.py -> build/lib/xknx/io copying xknx/io/self_description.py -> build/lib/xknx/io copying xknx/io/tunnel.py -> build/lib/xknx/io copying xknx/io/const.py -> build/lib/xknx/io copying xknx/io/ip_secure.py -> build/lib/xknx/io copying xknx/io/knxip_interface.py -> build/lib/xknx/io copying xknx/io/util.py -> build/lib/xknx/io copying xknx/io/gateway_scanner.py -> build/lib/xknx/io copying xknx/io/routing.py -> build/lib/xknx/io creating build/lib/xknx/secure copying xknx/secure/data_secure_asdu.py -> build/lib/xknx/secure copying xknx/secure/security_primitives.py -> build/lib/xknx/secure copying xknx/secure/__init__.py -> build/lib/xknx/secure copying xknx/secure/keyring.py -> build/lib/xknx/secure copying xknx/secure/data_secure.py -> build/lib/xknx/secure copying xknx/secure/util.py -> build/lib/xknx/secure creating build/lib/xknx/knxip copying xknx/knxip/connectionstate_request.py -> build/lib/xknx/knxip copying xknx/knxip/routing_busy.py -> build/lib/xknx/knxip copying xknx/knxip/routing_lost_message.py -> build/lib/xknx/knxip copying xknx/knxip/search_request_extended.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_ack.py -> build/lib/xknx/knxip copying xknx/knxip/session_response.py -> build/lib/xknx/knxip copying xknx/knxip/connect_response.py -> build/lib/xknx/knxip copying xknx/knxip/search_response.py -> build/lib/xknx/knxip copying xknx/knxip/session_authenticate.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_feature.py -> build/lib/xknx/knxip copying xknx/knxip/session_request.py -> build/lib/xknx/knxip copying xknx/knxip/disconnect_request.py -> build/lib/xknx/knxip copying xknx/knxip/device_configuration_request.py -> build/lib/xknx/knxip copying xknx/knxip/routing_indication.py -> build/lib/xknx/knxip copying xknx/knxip/timer_notify.py -> build/lib/xknx/knxip copying xknx/knxip/search_request.py -> build/lib/xknx/knxip copying xknx/knxip/connect_request.py -> build/lib/xknx/knxip copying xknx/knxip/description_request.py -> build/lib/xknx/knxip copying xknx/knxip/body.py -> build/lib/xknx/knxip copying xknx/knxip/hpai.py -> build/lib/xknx/knxip copying xknx/knxip/srp.py -> build/lib/xknx/knxip copying xknx/knxip/tunnelling_request.py -> build/lib/xknx/knxip copying xknx/knxip/__init__.py -> build/lib/xknx/knxip copying xknx/knxip/secure_wrapper.py -> build/lib/xknx/knxip copying xknx/knxip/knxip.py -> build/lib/xknx/knxip copying xknx/knxip/search_response_extended.py -> build/lib/xknx/knxip copying xknx/knxip/dib.py -> build/lib/xknx/knxip copying xknx/knxip/session_status.py -> build/lib/xknx/knxip copying xknx/knxip/description_response.py -> build/lib/xknx/knxip copying xknx/knxip/device_configuration_ack.py -> build/lib/xknx/knxip copying xknx/knxip/connectionstate_response.py -> build/lib/xknx/knxip copying xknx/knxip/disconnect_response.py -> build/lib/xknx/knxip copying xknx/knxip/header.py -> build/lib/xknx/knxip copying xknx/knxip/knxip_enum.py -> build/lib/xknx/knxip copying xknx/knxip/error_code.py -> build/lib/xknx/knxip creating build/lib/xknx/tools copying xknx/tools/group_communication.py -> build/lib/xknx/tools copying xknx/tools/__init__.py -> build/lib/xknx/tools creating build/lib/xknx/exceptions copying xknx/exceptions/__init__.py -> build/lib/xknx/exceptions copying xknx/exceptions/exception.py -> build/lib/xknx/exceptions creating build/lib/xknx/cemi copying xknx/cemi/__init__.py -> build/lib/xknx/cemi copying xknx/cemi/const.py -> build/lib/xknx/cemi copying xknx/cemi/cemi_handler.py -> build/lib/xknx/cemi copying xknx/cemi/cemi_frame.py -> build/lib/xknx/cemi creating build/lib/xknx/remote_value copying xknx/remote_value/remote_value_by_length.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_datetime.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_dpt_value_1_ucount.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_scene_number.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_temp.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_raw.py -> build/lib/xknx/remote_value copying xknx/remote_value/__init__.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_step.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_scaling.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_climate_mode.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_rgb.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_setpoint_shift.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_updown.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_switch.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_rgbw.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_sensor.py -> build/lib/xknx/remote_value copying xknx/remote_value/remote_value_color_xyy.py -> build/lib/xknx/remote_value creating build/lib/xknx/core copying xknx/core/value_reader.py -> build/lib/xknx/core copying xknx/core/state_updater.py -> build/lib/xknx/core copying xknx/core/task_registry.py -> build/lib/xknx/core copying xknx/core/telegram_queue.py -> build/lib/xknx/core copying xknx/core/__init__.py -> build/lib/xknx/core copying xknx/core/group_address_dpt.py -> build/lib/xknx/core copying xknx/core/connection_state.py -> build/lib/xknx/core copying xknx/core/connection_manager.py -> build/lib/xknx/core creating build/lib/xknx/typing copying xknx/typing/__init__.py -> build/lib/xknx/typing creating build/lib/xknx/management copying xknx/management/management.py -> build/lib/xknx/management copying xknx/management/__init__.py -> build/lib/xknx/management copying xknx/management/procedures.py -> build/lib/xknx/management copying xknx/management/application_layer_enum.py -> build/lib/xknx/management creating build/lib/xknx/devices copying xknx/devices/notification.py -> build/lib/xknx/devices copying xknx/devices/devices.py -> build/lib/xknx/devices copying xknx/devices/travelcalculator.py -> build/lib/xknx/devices copying xknx/devices/scene.py -> build/lib/xknx/devices copying xknx/devices/sensor.py -> build/lib/xknx/devices copying xknx/devices/weather.py -> build/lib/xknx/devices copying xknx/devices/light.py -> build/lib/xknx/devices copying xknx/devices/switch.py -> build/lib/xknx/devices copying xknx/devices/datetime.py -> build/lib/xknx/devices copying xknx/devices/binary_sensor.py -> build/lib/xknx/devices copying xknx/devices/device.py -> build/lib/xknx/devices copying xknx/devices/__init__.py -> build/lib/xknx/devices copying xknx/devices/fan.py -> build/lib/xknx/devices copying xknx/devices/raw_value.py -> build/lib/xknx/devices copying xknx/devices/climate.py -> build/lib/xknx/devices copying xknx/devices/expose_sensor.py -> build/lib/xknx/devices copying xknx/devices/numeric_value.py -> build/lib/xknx/devices copying xknx/devices/cover.py -> build/lib/xknx/devices copying xknx/devices/climate_mode.py -> build/lib/xknx/devices creating build/lib/xknx/util copying xknx/util/__init__.py -> build/lib/xknx/util creating build/lib/xknx/dpt copying xknx/dpt/dpt_7.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_16.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_235.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_19.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_251.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_6.py -> build/lib/xknx/dpt copying xknx/dpt/dpt.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_5.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_1.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_11.py -> build/lib/xknx/dpt copying xknx/dpt/__init__.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_13.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_17.py -> build/lib/xknx/dpt copying xknx/dpt/payload.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_12.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_10.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_20.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_14.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_242.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_3.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_9.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_29.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_232.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_18.py -> build/lib/xknx/dpt copying xknx/dpt/dpt_8.py -> build/lib/xknx/dpt creating build/lib/xknx/telegram copying xknx/telegram/tpci.py -> build/lib/xknx/telegram copying xknx/telegram/address_filter.py -> build/lib/xknx/telegram copying xknx/telegram/address.py -> build/lib/xknx/telegram copying xknx/telegram/__init__.py -> build/lib/xknx/telegram copying xknx/telegram/telegram.py -> build/lib/xknx/telegram copying xknx/telegram/apci.py -> build/lib/xknx/telegram creating build/lib/xknx/profile copying xknx/profile/__init__.py -> build/lib/xknx/profile copying xknx/profile/const.py -> build/lib/xknx/profile creating build/lib/xknx/io/request_response copying xknx/io/request_response/session.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/authenticate.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/device_configuration.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/tunnelling.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/__init__.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/connect.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/disconnect.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/connectionstate.py -> build/lib/xknx/io/request_response copying xknx/io/request_response/request_response.py -> build/lib/xknx/io/request_response creating build/lib/xknx/io/transport copying xknx/io/transport/tcp_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/udp_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/ip_transport.py -> build/lib/xknx/io/transport copying xknx/io/transport/__init__.py -> build/lib/xknx/io/transport running egg_info creating xknx.egg-info writing xknx.egg-info/PKG-INFO writing dependency_links to xknx.egg-info/dependency_links.txt writing requirements to xknx.egg-info/requires.txt writing top-level names to xknx.egg-info/top_level.txt writing manifest file 'xknx.egg-info/SOURCES.txt' reading manifest file 'xknx.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' adding license file 'LICENSE' writing manifest file 'xknx.egg-info/SOURCES.txt' copying xknx/py.typed -> build/lib/xknx installing to build/bdist.linux-x86_64/wheel running install running install_lib creating build/bdist.linux-x86_64/wheel creating build/bdist.linux-x86_64/wheel/xknx creating build/bdist.linux-x86_64/wheel/xknx/io creating build/bdist.linux-x86_64/wheel/xknx/io/request_response copying build/lib/xknx/io/request_response/session.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/authenticate.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/device_configuration.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/tunnelling.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/connect.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/disconnect.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/connectionstate.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/request_response/request_response.py -> build/bdist.linux-x86_64/wheel/./xknx/io/request_response copying build/lib/xknx/io/connection.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/interface.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/self_description.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/tunnel.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/const.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/ip_secure.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/knxip_interface.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/util.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/gateway_scanner.py -> build/bdist.linux-x86_64/wheel/./xknx/io copying build/lib/xknx/io/routing.py -> build/bdist.linux-x86_64/wheel/./xknx/io creating build/bdist.linux-x86_64/wheel/xknx/io/transport copying build/lib/xknx/io/transport/tcp_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/udp_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/ip_transport.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport copying build/lib/xknx/io/transport/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/io/transport creating build/bdist.linux-x86_64/wheel/xknx/secure copying build/lib/xknx/secure/data_secure_asdu.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/security_primitives.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/keyring.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/data_secure.py -> build/bdist.linux-x86_64/wheel/./xknx/secure copying build/lib/xknx/secure/util.py -> build/bdist.linux-x86_64/wheel/./xknx/secure creating build/bdist.linux-x86_64/wheel/xknx/knxip copying build/lib/xknx/knxip/connectionstate_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_busy.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_lost_message.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_request_extended.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_ack.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connect_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_authenticate.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_feature.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/disconnect_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/device_configuration_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/routing_indication.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/timer_notify.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connect_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/description_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/body.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/hpai.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/srp.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/tunnelling_request.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/secure_wrapper.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/knxip.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/search_response_extended.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/dib.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/session_status.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/description_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/device_configuration_ack.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/connectionstate_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/disconnect_response.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/header.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/knxip_enum.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip copying build/lib/xknx/knxip/error_code.py -> build/bdist.linux-x86_64/wheel/./xknx/knxip creating build/bdist.linux-x86_64/wheel/xknx/tools copying build/lib/xknx/tools/group_communication.py -> build/bdist.linux-x86_64/wheel/./xknx/tools copying build/lib/xknx/tools/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/tools creating build/bdist.linux-x86_64/wheel/xknx/exceptions copying build/lib/xknx/exceptions/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/exceptions copying build/lib/xknx/exceptions/exception.py -> build/bdist.linux-x86_64/wheel/./xknx/exceptions copying build/lib/xknx/__version__.py -> build/bdist.linux-x86_64/wheel/./xknx copying build/lib/xknx/xknx.py -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/cemi copying build/lib/xknx/cemi/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/const.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/cemi_handler.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/cemi/cemi_frame.py -> build/bdist.linux-x86_64/wheel/./xknx/cemi copying build/lib/xknx/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/remote_value copying build/lib/xknx/remote_value/remote_value_by_length.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_datetime.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_dpt_value_1_ucount.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_scene_number.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_temp.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_raw.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_step.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_scaling.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_climate_mode.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_rgb.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_setpoint_shift.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_updown.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_switch.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_rgbw.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value copying build/lib/xknx/remote_value/remote_value_color_xyy.py -> build/bdist.linux-x86_64/wheel/./xknx/remote_value creating build/bdist.linux-x86_64/wheel/xknx/core copying build/lib/xknx/core/value_reader.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/state_updater.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/task_registry.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/telegram_queue.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/group_address_dpt.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/connection_state.py -> build/bdist.linux-x86_64/wheel/./xknx/core copying build/lib/xknx/core/connection_manager.py -> build/bdist.linux-x86_64/wheel/./xknx/core creating build/bdist.linux-x86_64/wheel/xknx/typing copying build/lib/xknx/typing/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/typing creating build/bdist.linux-x86_64/wheel/xknx/management copying build/lib/xknx/management/management.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/procedures.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/management/application_layer_enum.py -> build/bdist.linux-x86_64/wheel/./xknx/management copying build/lib/xknx/py.typed -> build/bdist.linux-x86_64/wheel/./xknx creating build/bdist.linux-x86_64/wheel/xknx/devices copying build/lib/xknx/devices/notification.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/devices.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/travelcalculator.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/scene.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/weather.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/light.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/switch.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/datetime.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/binary_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/device.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/fan.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/raw_value.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/climate.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/expose_sensor.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/numeric_value.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/cover.py -> build/bdist.linux-x86_64/wheel/./xknx/devices copying build/lib/xknx/devices/climate_mode.py -> build/bdist.linux-x86_64/wheel/./xknx/devices creating build/bdist.linux-x86_64/wheel/xknx/util copying build/lib/xknx/util/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/util creating build/bdist.linux-x86_64/wheel/xknx/dpt copying build/lib/xknx/dpt/dpt_7.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_16.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_235.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_19.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_251.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_6.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_5.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_1.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_11.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_13.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_17.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/payload.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_12.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_10.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_20.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_14.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_242.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_3.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_9.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_29.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_232.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_18.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt copying build/lib/xknx/dpt/dpt_8.py -> build/bdist.linux-x86_64/wheel/./xknx/dpt creating build/bdist.linux-x86_64/wheel/xknx/telegram copying build/lib/xknx/telegram/tpci.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/address_filter.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/address.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/telegram.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram copying build/lib/xknx/telegram/apci.py -> build/bdist.linux-x86_64/wheel/./xknx/telegram creating build/bdist.linux-x86_64/wheel/xknx/profile copying build/lib/xknx/profile/__init__.py -> build/bdist.linux-x86_64/wheel/./xknx/profile copying build/lib/xknx/profile/const.py -> build/bdist.linux-x86_64/wheel/./xknx/profile running install_egg_info Copying xknx.egg-info to build/bdist.linux-x86_64/wheel/./xknx-3.6.0.egg-info running install_scripts creating build/bdist.linux-x86_64/wheel/xknx-3.6.0.dist-info/WHEEL creating '/build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/.tmp-me3vaiy7/xknx-3.6.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it adding 'xknx/__init__.py' adding 'xknx/__version__.py' adding 'xknx/py.typed' adding 'xknx/xknx.py' adding 'xknx/cemi/__init__.py' adding 'xknx/cemi/cemi_frame.py' adding 'xknx/cemi/cemi_handler.py' adding 'xknx/cemi/const.py' adding 'xknx/core/__init__.py' adding 'xknx/core/connection_manager.py' adding 'xknx/core/connection_state.py' adding 'xknx/core/group_address_dpt.py' adding 'xknx/core/state_updater.py' adding 'xknx/core/task_registry.py' adding 'xknx/core/telegram_queue.py' adding 'xknx/core/value_reader.py' adding 'xknx/devices/__init__.py' adding 'xknx/devices/binary_sensor.py' adding 'xknx/devices/climate.py' adding 'xknx/devices/climate_mode.py' adding 'xknx/devices/cover.py' adding 'xknx/devices/datetime.py' adding 'xknx/devices/device.py' adding 'xknx/devices/devices.py' adding 'xknx/devices/expose_sensor.py' adding 'xknx/devices/fan.py' adding 'xknx/devices/light.py' adding 'xknx/devices/notification.py' adding 'xknx/devices/numeric_value.py' adding 'xknx/devices/raw_value.py' adding 'xknx/devices/scene.py' adding 'xknx/devices/sensor.py' adding 'xknx/devices/switch.py' adding 'xknx/devices/travelcalculator.py' adding 'xknx/devices/weather.py' adding 'xknx/dpt/__init__.py' adding 'xknx/dpt/dpt.py' adding 'xknx/dpt/dpt_1.py' adding 'xknx/dpt/dpt_10.py' adding 'xknx/dpt/dpt_11.py' adding 'xknx/dpt/dpt_12.py' adding 'xknx/dpt/dpt_13.py' adding 'xknx/dpt/dpt_14.py' adding 'xknx/dpt/dpt_16.py' adding 'xknx/dpt/dpt_17.py' adding 'xknx/dpt/dpt_18.py' adding 'xknx/dpt/dpt_19.py' adding 'xknx/dpt/dpt_20.py' adding 'xknx/dpt/dpt_232.py' adding 'xknx/dpt/dpt_235.py' adding 'xknx/dpt/dpt_242.py' adding 'xknx/dpt/dpt_251.py' adding 'xknx/dpt/dpt_29.py' adding 'xknx/dpt/dpt_3.py' adding 'xknx/dpt/dpt_5.py' adding 'xknx/dpt/dpt_6.py' adding 'xknx/dpt/dpt_7.py' adding 'xknx/dpt/dpt_8.py' adding 'xknx/dpt/dpt_9.py' adding 'xknx/dpt/payload.py' adding 'xknx/exceptions/__init__.py' adding 'xknx/exceptions/exception.py' adding 'xknx/io/__init__.py' adding 'xknx/io/connection.py' adding 'xknx/io/const.py' adding 'xknx/io/gateway_scanner.py' adding 'xknx/io/interface.py' adding 'xknx/io/ip_secure.py' adding 'xknx/io/knxip_interface.py' adding 'xknx/io/routing.py' adding 'xknx/io/self_description.py' adding 'xknx/io/tunnel.py' adding 'xknx/io/util.py' adding 'xknx/io/request_response/__init__.py' adding 'xknx/io/request_response/authenticate.py' adding 'xknx/io/request_response/connect.py' adding 'xknx/io/request_response/connectionstate.py' adding 'xknx/io/request_response/device_configuration.py' adding 'xknx/io/request_response/disconnect.py' adding 'xknx/io/request_response/request_response.py' adding 'xknx/io/request_response/session.py' adding 'xknx/io/request_response/tunnelling.py' adding 'xknx/io/transport/__init__.py' adding 'xknx/io/transport/ip_transport.py' adding 'xknx/io/transport/tcp_transport.py' adding 'xknx/io/transport/udp_transport.py' adding 'xknx/knxip/__init__.py' adding 'xknx/knxip/body.py' adding 'xknx/knxip/connect_request.py' adding 'xknx/knxip/connect_response.py' adding 'xknx/knxip/connectionstate_request.py' adding 'xknx/knxip/connectionstate_response.py' adding 'xknx/knxip/description_request.py' adding 'xknx/knxip/description_response.py' adding 'xknx/knxip/device_configuration_ack.py' adding 'xknx/knxip/device_configuration_request.py' adding 'xknx/knxip/dib.py' adding 'xknx/knxip/disconnect_request.py' adding 'xknx/knxip/disconnect_response.py' adding 'xknx/knxip/error_code.py' adding 'xknx/knxip/header.py' adding 'xknx/knxip/hpai.py' adding 'xknx/knxip/knxip.py' adding 'xknx/knxip/knxip_enum.py' adding 'xknx/knxip/routing_busy.py' adding 'xknx/knxip/routing_indication.py' adding 'xknx/knxip/routing_lost_message.py' adding 'xknx/knxip/search_request.py' adding 'xknx/knxip/search_request_extended.py' adding 'xknx/knxip/search_response.py' adding 'xknx/knxip/search_response_extended.py' adding 'xknx/knxip/secure_wrapper.py' adding 'xknx/knxip/session_authenticate.py' adding 'xknx/knxip/session_request.py' adding 'xknx/knxip/session_response.py' adding 'xknx/knxip/session_status.py' adding 'xknx/knxip/srp.py' adding 'xknx/knxip/timer_notify.py' adding 'xknx/knxip/tunnelling_ack.py' adding 'xknx/knxip/tunnelling_feature.py' adding 'xknx/knxip/tunnelling_request.py' adding 'xknx/management/__init__.py' adding 'xknx/management/application_layer_enum.py' adding 'xknx/management/management.py' adding 'xknx/management/procedures.py' adding 'xknx/profile/__init__.py' adding 'xknx/profile/const.py' adding 'xknx/remote_value/__init__.py' adding 'xknx/remote_value/remote_value.py' adding 'xknx/remote_value/remote_value_by_length.py' adding 'xknx/remote_value/remote_value_climate_mode.py' adding 'xknx/remote_value/remote_value_color_rgb.py' adding 'xknx/remote_value/remote_value_color_rgbw.py' adding 'xknx/remote_value/remote_value_color_xyy.py' adding 'xknx/remote_value/remote_value_datetime.py' adding 'xknx/remote_value/remote_value_dpt_value_1_ucount.py' adding 'xknx/remote_value/remote_value_raw.py' adding 'xknx/remote_value/remote_value_scaling.py' adding 'xknx/remote_value/remote_value_scene_number.py' adding 'xknx/remote_value/remote_value_sensor.py' adding 'xknx/remote_value/remote_value_setpoint_shift.py' adding 'xknx/remote_value/remote_value_step.py' adding 'xknx/remote_value/remote_value_switch.py' adding 'xknx/remote_value/remote_value_temp.py' adding 'xknx/remote_value/remote_value_updown.py' adding 'xknx/secure/__init__.py' adding 'xknx/secure/data_secure.py' adding 'xknx/secure/data_secure_asdu.py' adding 'xknx/secure/keyring.py' adding 'xknx/secure/security_primitives.py' adding 'xknx/secure/util.py' adding 'xknx/telegram/__init__.py' adding 'xknx/telegram/address.py' adding 'xknx/telegram/address_filter.py' adding 'xknx/telegram/apci.py' adding 'xknx/telegram/telegram.py' adding 'xknx/telegram/tpci.py' adding 'xknx/tools/__init__.py' adding 'xknx/tools/group_communication.py' adding 'xknx/typing/__init__.py' adding 'xknx/util/__init__.py' adding 'xknx-3.6.0.dist-info/licenses/LICENSE' adding 'xknx-3.6.0.dist-info/METADATA' adding 'xknx-3.6.0.dist-info/WHEEL' adding 'xknx-3.6.0.dist-info/top_level.txt' adding 'xknx-3.6.0.dist-info/RECORD' removing build/bdist.linux-x86_64/wheel Successfully built xknx-3.6.0-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module dh_auto_test -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest --no-cov -k "not test_scan_timeout and not test_start_secure_routing_knx_keys and not test_start_secure_routing_manual" ============================= test session starts ============================== platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0 rootdir: /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build configfile: pyproject.toml testpaths: test plugins: asyncio-1.1.0, typeguard-4.4.4, cov-5.0.0 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collected 2837 items / 3 deselected / 2834 selected test/cemi_tests/cemi_frame_test.py ............................... [ 1%] test/cemi_tests/cemi_handler_test.py E....... [ 1%] test/core_tests/connection_manager_test.py ...... [ 1%] test/core_tests/exceptions_test.py ...... [ 1%] test/core_tests/group_address_dpt_test.py ..... [ 1%] test/core_tests/state_updater_test.py ............ [ 2%] test/core_tests/task_registry_test.py ...EE [ 2%] test/core_tests/telegram_queue_test.py .................. [ 3%] test/core_tests/value_reader_test.py ..... [ 3%] test/devices_tests/binary_sensor_test.py ..E......... [ 3%] test/devices_tests/climate_test.py ..................................... [ 5%] ............................ [ 6%] test/devices_tests/cover_test.py ....................................EE. [ 7%] . [ 7%] test/devices_tests/datetime_test.py ..............EE [ 8%] test/devices_tests/device_test.py ........ [ 8%] test/devices_tests/devices_test.py ......... [ 8%] test/devices_tests/expose_sensor_test.py ............E [ 9%] test/devices_tests/fan_test.py .............. [ 9%] test/devices_tests/light_test.py ....................................... [ 11%] ...................E......... [ 12%] test/devices_tests/notification_test.py ........ [ 12%] test/devices_tests/numeric_value_test.py ..................... [ 13%] test/devices_tests/raw_value_test.py ............ [ 13%] test/devices_tests/scene_test.py ... [ 13%] test/devices_tests/sensor_expose_loop_test.py .......................... [ 14%] ........................................................................ [ 17%] ............................................. [ 18%] test/devices_tests/sensor_test.py ...................................... [ 19%] ........................................................................ [ 22%] ......................... [ 23%] test/devices_tests/switch_test.py .....EE......... [ 23%] test/devices_tests/travelcalculator_test.py ............. [ 24%] test/devices_tests/weather_test.py ................... [ 25%] test/dpt_tests/dpt_10_time_test.py ................... [ 25%] test/dpt_tests/dpt_11_date_test.py .................... [ 26%] test/dpt_tests/dpt_12_test.py ................ [ 27%] test/dpt_tests/dpt_14_float_test.py ............. [ 27%] test/dpt_tests/dpt_16_string_test.py ................ [ 28%] test/dpt_tests/dpt_17_scene_number_test.py ........ [ 28%] test/dpt_tests/dpt_18_scene_control_test.py ................. [ 28%] test/dpt_tests/dpt_19_datetime_test.py ............ [ 29%] test/dpt_tests/dpt_1_test.py ........................................... [ 30%] ........................................................................ [ 33%] ......................................... [ 34%] test/dpt_tests/dpt_20_hvac_mode_test.py ............................. [ 35%] test/dpt_tests/dpt_235_tariff_active_energy_test.py .................... [ 36%] ................. [ 37%] test/dpt_tests/dpt_29_test.py ........ [ 37%] test/dpt_tests/dpt_3_test.py ........................... [ 38%] test/dpt_tests/dpt_5_test.py ......................... [ 39%] test/dpt_tests/dpt_6_test.py ............ [ 39%] test/dpt_tests/dpt_7_test.py ......... [ 40%] test/dpt_tests/dpt_8_test.py ......... [ 40%] test/dpt_tests/dpt_9_float_test.py ............................ [ 41%] test/dpt_tests/dpt_color_test.py ....................................... [ 42%] ........................................................................ [ 45%] ................ [ 45%] test/dpt_tests/dpt_lookup_test.py ...................................... [ 47%] ........................................................................ [ 49%] ........................................................................ [ 52%] ...................... [ 53%] test/dpt_tests/dpt_test.py ............................................. [ 54%] ........................................................................ [ 57%] ........................................................................ [ 59%] ........................................................................ [ 62%] ........................................................................ [ 64%] ........................................................................ [ 67%] ... [ 67%] test/dpt_tests/payload_test.py ......... [ 67%] test/io_tests/connection_test.py .. [ 67%] test/io_tests/gateway_scanner_test.py ........EE.. [ 68%] test/io_tests/knxip_interface_test.py ................... [ 68%] test/io_tests/request_response_tests/authenticate_test.py . [ 68%] test/io_tests/request_response_tests/connect_test.py .. [ 69%] test/io_tests/request_response_tests/connectionstate_test.py .. [ 69%] test/io_tests/request_response_tests/device_configuration_test.py . [ 69%] test/io_tests/request_response_tests/disconnect_test.py .. [ 69%] test/io_tests/request_response_tests/request_response_test.py ... [ 69%] test/io_tests/request_response_tests/session_test.py . [ 69%] test/io_tests/request_response_tests/tunnelling_test.py . [ 69%] test/io_tests/routing_test.py ..EE [ 69%] test/io_tests/secure_group_test.py EEEEE.. [ 69%] test/io_tests/secure_session_test.py E.EEEE [ 69%] test/io_tests/self_description_test.py EEE [ 70%] test/io_tests/transport_tests/ip_transport_test.py . [ 70%] test/io_tests/tunnel_test.py ....EEEEEEEE [ 70%] test/knxip_tests/body_test.py .. [ 70%] test/knxip_tests/connect_request_test.py ........ [ 70%] test/knxip_tests/connect_response_test.py .......... [ 71%] test/knxip_tests/connectionstate_request_test.py .. [ 71%] test/knxip_tests/connectionstate_response_test.py .. [ 71%] test/knxip_tests/description_request_test.py . [ 71%] test/knxip_tests/description_response_test.py .. [ 71%] test/knxip_tests/device_configuration_ack_test.py ... [ 71%] test/knxip_tests/device_configuration_request_test.py ... [ 71%] test/knxip_tests/dib_test.py ....... [ 71%] test/knxip_tests/disconnect_request_test.py .. [ 72%] test/knxip_tests/disconnect_response_test.py .. [ 72%] test/knxip_tests/header_test.py ....... [ 72%] test/knxip_tests/hpai_test.py ....... [ 72%] test/knxip_tests/knxip_test.py ... [ 72%] test/knxip_tests/routing_busy_test.py ... [ 72%] test/knxip_tests/routing_indication_test.py ..... [ 72%] test/knxip_tests/routing_lost_message_test.py ... [ 73%] test/knxip_tests/search_request_extended_test.py ... [ 73%] test/knxip_tests/search_request_test.py . [ 73%] test/knxip_tests/search_response_extended_test.py .. [ 73%] test/knxip_tests/search_response_test.py .. [ 73%] test/knxip_tests/secure_wrapper_test.py . [ 73%] test/knxip_tests/session_authenticate_test.py . [ 73%] test/knxip_tests/session_request_test.py . [ 73%] test/knxip_tests/session_response_test.py . [ 73%] test/knxip_tests/session_status_test.py . [ 73%] test/knxip_tests/srp_test.py ........ [ 73%] test/knxip_tests/timer_notify_test.py . [ 73%] test/knxip_tests/tunnelling_ack_test.py ... [ 73%] test/knxip_tests/tunnelling_feature_test.py ....... [ 74%] test/knxip_tests/tunnelling_request_test.py ... [ 74%] test/management_tests/management_test.py .E.....EE [ 74%] test/management_tests/procedures_test.py ...E.EEEEEEEEEEE [ 75%] test/remote_value_tests/remote_value_by_length_test.py ........ [ 75%] test/remote_value_tests/remote_value_climate_mode_test.py .............. [ 75%] ............ [ 76%] test/remote_value_tests/remote_value_color_rgb_test.py ...... [ 76%] test/remote_value_tests/remote_value_color_rgbw_test.py ...... [ 76%] test/remote_value_tests/remote_value_color_xyy_test.py ...... [ 77%] test/remote_value_tests/remote_value_datetime_test.py ... [ 77%] test/remote_value_tests/remote_value_dpt_value_1_ucount_test.py ...... [ 77%] test/remote_value_tests/remote_value_raw_test.py ...... [ 77%] test/remote_value_tests/remote_value_scaling_test.py ...... [ 77%] test/remote_value_tests/remote_value_scene_number_test.py ...... [ 77%] test/remote_value_tests/remote_value_sensor_test.py ...... [ 78%] test/remote_value_tests/remote_value_setepoint_shift_test.py ........ [ 78%] test/remote_value_tests/remote_value_step_test.py ........ [ 78%] test/remote_value_tests/remote_value_string_test.py ...... [ 78%] test/remote_value_tests/remote_value_switch_test.py ......... [ 79%] test/remote_value_tests/remote_value_temp_test.py ..... [ 79%] test/remote_value_tests/remote_value_test.py .............. [ 79%] test/remote_value_tests/remote_value_updown_test.py ........ [ 80%] test/secure_tests/data_secure_test.py ................ [ 80%] test/secure_tests/ip_secure_test.py ...... [ 81%] test/secure_tests/keyring_test.py ........... [ 81%] test/secure_tests/util_test.py ............ [ 81%] test/str_test.py ..................................................... [ 83%] test/telegram_tests/address_filter_test.py .............. [ 84%] test/telegram_tests/address_test.py .................................... [ 85%] ........................................................................ [ 88%] ........................................................................ [ 90%] ..................................................... [ 92%] test/telegram_tests/apci_test.py ....................................... [ 93%] ........................................................................ [ 96%] ...................................................... [ 98%] test/telegram_tests/telegram_test.py .. [ 98%] test/telegram_tests/tpci_test.py ...................... [ 99%] test/tools_tests/tools_test.py ................ [ 99%] test/xknx_test.py .......... [100%] ==================================== ERRORS ==================================== _______________ ERROR at setup of test_wait_for_l2_confirmation ________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/cemi_tests/cemi_handler_test.py, line 17 async def test_wait_for_l2_confirmation(time_travel: EventLoopClockAdvancer) -> None: """Test waiting for L_DATA.con before sending another L_DATA.req.""" xknx = XKNX() xknx.knxip_interface = AsyncMock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=apci.GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram(test_telegram), ) test_cemi_confirmation = CEMIFrame( code=CEMIMessageCode.L_DATA_CON, data=CEMILData.init_from_telegram( test_telegram, ), ) task = asyncio.create_task(xknx.cemi_handler.send_telegram(test_telegram)) await time_travel(0) xknx.knxip_interface.send_cemi.assert_called_once_with(test_cemi) assert xknx.connection_manager.cemi_count_outgoing == 0 assert not task.done() xknx.cemi_handler.handle_cemi_frame(test_cemi_confirmation) await time_travel(0) assert task.done() await task assert xknx.connection_manager.cemi_count_outgoing == 1 assert xknx.connection_manager.cemi_count_outgoing_error == 0 # no L_DATA.con received -> raise ConfirmationError xknx.knxip_interface.send_cemi.reset_mock() task = asyncio.create_task(xknx.cemi_handler.send_telegram(test_telegram)) await time_travel(0) xknx.knxip_interface.send_cemi.assert_called_once_with(test_cemi) with pytest.raises(ConfirmationError): await time_travel(3) assert task.done() await task assert xknx.connection_manager.cemi_count_outgoing == 1 assert xknx.connection_manager.cemi_count_outgoing_error == 1 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestTaskRegistry.test_reconnect_handling __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/core_tests/task_registry_test.py, line 82 async def test_reconnect_handling( self, time_travel: EventLoopClockAdvancer ) -> None: """Test reconnect handling.""" xknx = XKNX() xknx.task_registry.start() assert len(xknx.connection_manager._connection_state_changed_cbs) == 1 xknx.connection_manager.connection_state_changed(XknxConnectionState.CONNECTED) # pylint: disable=attribute-defined-outside-init self.test = 0 async def callback() -> None: """Reset tasks.""" try: while True: await asyncio.sleep(100) self.test += 1 except asyncio.CancelledError: self.test -= 1 task = xknx.task_registry.register( name="test", async_func=callback, restart_after_reconnect=True ) assert len(xknx.task_registry.tasks) == 1 task.start() assert task._task is not None await time_travel(100) assert self.test == 1 xknx.connection_manager.connection_state_changed( XknxConnectionState.DISCONNECTED ) await asyncio.sleep(0) # iterate loop to cancel task assert task._task is None assert self.test == 0 xknx.connection_manager.connection_state_changed(XknxConnectionState.CONNECTED) assert task._task is not None assert self.test == 0 await time_travel(100) assert self.test == 1 assert len(xknx.task_registry.tasks) == 1 xknx.task_registry.stop() assert len(xknx.task_registry.tasks) == 0 assert task._task is None await asyncio.sleep(0) # iterate loop to cancel task assert self.test == 0 assert len(xknx.connection_manager._connection_state_changed_cbs) == 0 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestTaskRegistry.test_background ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/core_tests/task_registry_test.py, line 134 async def test_background(self, time_travel: EventLoopClockAdvancer) -> None: """Test running background task.""" test_time = 10 async def callback() -> None: """Do nothing.""" await asyncio.sleep(test_time) xknx = XKNX() xknx.task_registry.background(callback()) assert len(xknx.task_registry._background_task) == 1 task = next(iter(xknx.task_registry._background_task)) refs = sys.getrefcount(task) assert refs == 4 assert not task.done() # after task is finished it should remove itself from the background registry await time_travel(test_time) assert len(xknx.task_registry._background_task) == 0 assert task.done() refs = sys.getrefcount(task) assert refs == 2 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestBinarySensor.test_process_reset_after __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/binary_sensor_test.py, line 74 async def test_process_reset_after( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process / reading telegrams from telegram queue.""" xknx = XKNX() reset_after_sec = 1 after_update_callback = Mock() binaryinput = BinarySensor( xknx, "TestInput", "1/2/3", reset_after=reset_after_sec, device_updated_cb=after_update_callback, ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) binaryinput.process(telegram_on) assert binaryinput.state await time_travel(reset_after_sec) assert not binaryinput.state # once for 'on' and once for 'off' assert after_update_callback.call_count == 2 after_update_callback.reset_mock() # multiple telegrams during reset_after time period shall reset timer binaryinput.process(telegram_on) after_update_callback.assert_called_once() binaryinput.process(telegram_on) binaryinput.process(telegram_on) # second and third telegram resets timer but doesn't run callback after_update_callback.assert_called_once() assert binaryinput.state await time_travel(reset_after_sec) assert not binaryinput.state # once for 'on' and once for 'off' assert after_update_callback.call_count == 2 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________________ ERROR at setup of TestCover.test_auto_stop __________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/cover_test.py, line 937 async def test_auto_stop(self, time_travel: EventLoopClockAdvancer) -> None: """Test auto stop functionality.""" xknx = XKNX() cover = Cover( xknx, "TestCoverAutoStop", group_address_long="1/2/1", group_address_stop="1/2/2", travel_time_down=10, travel_time_up=10, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 # we start with state 0 - open covers (up) this is assumed immediately await cover.set_position(0) assert xknx.telegrams.qsize() == 1 _ = xknx.telegrams.get_nowait() await cover.set_position(50) await time_travel(1) mock_time.return_value = 1517000001.0 assert xknx.telegrams.qsize() == 1 telegram1 = xknx.telegrams.get_nowait() assert telegram1 == Telegram( destination_address=GroupAddress("1/2/1"), payload=GroupValueWrite(DPTBinary(True)), ) await time_travel(4) mock_time.return_value = 1517000005.0 assert xknx.telegrams.qsize() == 1 telegram1 = xknx.telegrams.get_nowait() assert telegram1 == Telegram( destination_address=GroupAddress("1/2/2"), payload=GroupValueWrite(DPTBinary(True)), ) file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______________ ERROR at setup of TestCover.test_periodic_update _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/cover_test.py, line 975 async def test_periodic_update(self, time_travel: EventLoopClockAdvancer) -> None: """Test periodic update functionality.""" xknx = XKNX() callback_mock = Mock() cover = Cover( xknx, "TestCoverPeriodicUpdate", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, device_updated_cb=callback_mock, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 # state telegram updates current position - we are not moving so this is new state - not moving telegram = Telegram( GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(0)) ) cover.process(telegram) await time_travel(0) assert callback_mock.call_count == 1 callback_mock.reset_mock() # move to 50% telegram = Telegram( GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray(125)) ) cover.process(telegram) await time_travel(0) assert callback_mock.call_count == 1 mock_time.return_value = 1517000001.0 await time_travel(1) assert callback_mock.call_count == 2 # state telegram from bus too early mock_time.return_value = 1517000001.6 await time_travel(0.6) assert callback_mock.call_count == 2 telegram = Telegram( GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(42)) ) cover.process(telegram) assert callback_mock.call_count == 3 # next update 1 second after last received state telegram mock_time.return_value = 1517000002.0 await time_travel(0.4) assert callback_mock.call_count == 3 mock_time.return_value = 1517000002.6 await time_travel(0.6) assert callback_mock.call_count == 4 # last callback - auto updater is removed mock_time.return_value = 1517000005.0 await time_travel(2.4) assert callback_mock.call_count == 5 assert cover.position_reached() assert cover._periodic_update_task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____________ ERROR at setup of TestDateTime.test_background_task ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/datetime_test.py, line 233 @patch("xknx.core.TelegramQueue.process_telegram_outgoing", new_callable=AsyncMock) async def test_background_task( self, process_telegram_outgoing_mock: AsyncMock, time_travel: EventLoopClockAdvancer, xknx_no_interface: XKNX, ) -> None: """Test if background task works.""" xknx = xknx_no_interface test_device = TimeDevice(xknx, "TestDateTime", group_address="1/2/3") xknx.devices.async_add(test_device) async with xknx: # initial time telegram await time_travel(0) process_telegram_outgoing_mock.assert_called_once() process_telegram_outgoing_mock.reset_mock() # repeated time telegram await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_called_once() process_telegram_outgoing_mock.reset_mock() # remove device - no more telegrams xknx.devices.async_remove(test_device) await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestDateTime.test_no_background_task ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/datetime_test.py, line 258 @patch("xknx.core.TelegramQueue.process_telegram_outgoing", new_callable=AsyncMock) async def test_no_background_task( self, process_telegram_outgoing_mock: AsyncMock, time_travel: EventLoopClockAdvancer, xknx_no_interface: XKNX, ) -> None: """Test if background task is not started when not using `localtime`.""" xknx = xknx_no_interface test_device = TimeDevice( xknx, "TestDateTime", group_address="1/2/3", localtime=False, ) xknx.devices.async_add(test_device) async with xknx: assert test_device._broadcast_task is None # no initial time telegram await time_travel(0) process_telegram_outgoing_mock.assert_not_called() # no repeated time telegram await time_travel(BROADCAST_MINUTES * 60) process_telegram_outgoing_mock.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______________ ERROR at setup of TestExposeSensor.test_cooldown _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/expose_sensor_test.py, line 225 async def test_cooldown(self, time_travel: EventLoopClockAdvancer) -> None: """Test cooldown.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() await xknx.telegram_queue.start() expose_sensor_cd = ExposeSensor( xknx, "TestSensor", group_address="1/2/3", value_type="temperature", cooldown=10, ) xknx.devices.async_add(expose_sensor_cd) expose_sensor_no_cd = ExposeSensor( xknx, "TestSensor", group_address="1/2/4", value_type="temperature", ) xknx.devices.async_add(expose_sensor_no_cd) await expose_sensor_cd.set(21.0) await expose_sensor_no_cd.set(21.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # don't send telegram with same payload twice if cooldown is active await expose_sensor_cd.set(21.0) await expose_sensor_no_cd.set(21.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() await time_travel(10) assert xknx.telegrams.qsize() == 0 xknx.cemi_handler.send_telegram.assert_not_called() # different payload after cooldown await expose_sensor_cd.set(10.0) await expose_sensor_no_cd.set(10.0) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # different payload immediately (payload of 3.111 equals 3.11) await expose_sensor_cd.set(3.111) await expose_sensor_no_cd.set(3.111) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray((0x01, 0x37))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() assert expose_sensor_cd._cooldown_latest_value == 3.111 assert expose_sensor_cd.sensor_value.value == 10 await time_travel(10) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x01, 0x37))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() assert expose_sensor_cd._cooldown_latest_value == 3.11 assert expose_sensor_cd.sensor_value.value == 3.11 await time_travel(10) xknx.cemi_handler.send_telegram.assert_not_called() # reading unsent value await expose_sensor_cd.set(10) # first send new value await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray((0x03, 0xE8))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # in cooldown with a new value - receiving a read request await expose_sensor_cd.set(21) expose_sensor_cd.process( Telegram(GroupAddress("1/2/3"), payload=GroupValueRead()) ) await time_travel(0) xknx.cemi_handler.send_telegram.assert_has_calls( [ call( Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueResponse(DPTArray((0x0C, 0x1A))), ) ), ] ) xknx.cemi_handler.send_telegram.reset_mock() # after cooldown - new value not sent again (already in GroupValueResponse) await time_travel(10) xknx.cemi_handler.send_telegram.assert_not_called() await xknx.stop() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____ ERROR at setup of TestLight.test_process_individual_color_debouncer ______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/light_test.py, line 1503 async def test_process_individual_color_debouncer( self, time_travel: EventLoopClockAdvancer ) -> None: """Test the debouncer for individual color lights.""" xknx = XKNX() rgb_callback = Mock() rgbw_callback = Mock() rgb_light = Light( xknx, "TestRGBLight", group_address_switch_red="1/1/1", group_address_switch_red_state="1/1/2", group_address_brightness_red="1/1/3", group_address_brightness_red_state="1/1/4", group_address_switch_green="1/1/5", group_address_switch_green_state="1/1/6", group_address_brightness_green="1/1/7", group_address_brightness_green_state="1/1/8", group_address_switch_blue="1/1/9", group_address_switch_blue_state="1/1/10", group_address_brightness_blue="1/1/11", group_address_brightness_blue_state="1/1/12", device_updated_cb=rgb_callback, ) xknx.devices.async_add(rgb_light) rgbw_light = Light( xknx, "TestRGBWLight", group_address_switch="1/1/0", group_address_brightness_red="1/1/3", group_address_brightness_red_state="1/1/4", group_address_brightness_green="1/1/7", group_address_brightness_green_state="1/1/8", group_address_brightness_blue="1/1/11", group_address_brightness_blue_state="1/1/12", group_address_brightness_white="1/1/15", group_address_brightness_white_state="1/1/16", device_updated_cb=rgbw_callback, ) xknx.devices.async_add(rgbw_light) assert rgb_light.current_color == (None, None) assert rgbw_light.current_color == (None, None) red = Telegram( destination_address=GroupAddress("1/1/4"), payload=GroupValueWrite(DPTArray(42)), ) green = Telegram( destination_address=GroupAddress("1/1/8"), payload=GroupValueWrite(DPTArray(43)), ) blue = Telegram( destination_address=GroupAddress("1/1/12"), payload=GroupValueWrite(DPTArray(44)), ) white = Telegram( destination_address=GroupAddress("1/1/16"), payload=GroupValueWrite(DPTArray(50)), ) xknx.devices.process(red) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(green) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(blue) rgb_callback.assert_called_once() rgbw_callback.assert_not_called() xknx.devices.process(white) rgbw_callback.assert_called_once() assert rgb_light.current_color == ((42, 43, 44), None) assert rgbw_light.current_color == ((42, 43, 44), 50) rgb_callback.reset_mock() rgbw_callback.reset_mock() # second time with only 2 telegrams xknx.devices.process(red) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() xknx.devices.process(green) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() await time_travel(Light.DEBOUNCE_TIMEOUT / 2) rgb_callback.assert_not_called() rgbw_callback.assert_not_called() await time_travel(Light.DEBOUNCE_TIMEOUT / 2) rgb_callback.assert_called_once() rgbw_callback.assert_called_once() assert rgb_light.current_color == ((42, 43, 44), None) assert rgbw_light.current_color == ((42, 43, 44), 50) file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestSwitch.test_process_reset_after _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/switch_test.py, line 161 async def test_process_reset_after( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process reset_after.""" xknx = XKNX() reset_after_sec = 1 switch = Switch( xknx, "TestInput", group_address="1/2/3", reset_after=reset_after_sec ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueWrite(DPTBinary(1)), ) switch.process(telegram_on) assert switch.state assert xknx.telegrams.qsize() == 0 await time_travel(reset_after_sec) assert xknx.telegrams.qsize() == 1 switch.process(xknx.telegrams.get_nowait()) assert not switch.state file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____ ERROR at setup of TestSwitch.test_process_reset_after_cancel_existing _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/devices_tests/switch_test.py, line 183 async def test_process_reset_after_cancel_existing( self, time_travel: EventLoopClockAdvancer ) -> None: """Test process reset_after cancels existing reset tasks.""" xknx = XKNX() reset_after_sec = 0.01 switch = Switch( xknx, "TestInput", group_address="1/2/3", reset_after=reset_after_sec ) telegram_on = Telegram( destination_address=GroupAddress("1/2/3"), payload=GroupValueResponse(DPTBinary(1)), ) switch.process(telegram_on) assert switch.state assert xknx.telegrams.qsize() == 0 await time_travel(reset_after_sec / 2) # half way through the reset timer switch.process(telegram_on) assert switch.state await time_travel(reset_after_sec / 2) assert xknx.telegrams.qsize() == 0 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestGatewayScanner.test_async_scan_timeout _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/gateway_scanner_test.py, line 365 @patch("xknx.io.gateway_scanner.UDPTransport.connect") @patch("xknx.io.gateway_scanner.UDPTransport.send") async def test_async_scan_timeout( self, udp_transport_send_mock: Mock, udp_transport_connect_mock: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test gateway scanner timeout for async generator.""" async def test() -> bool: xknx = XKNX() async for _ in GatewayScanner(xknx).async_scan(): break else: return True # timeout with ( patch( "xknx.io.util.get_default_local_ip", return_value="10.1.1.2", ), patch( "xknx.io.gateway_scanner.UDPTransport.getsockname", return_value=("10.1.1.2", 56789), ), ): timed_out_scan_task = asyncio.create_task(test()) await time_travel(3) assert await timed_out_scan_task # no matching interface found with patch( "xknx.io.util.get_default_local_ip", return_value=None, ): timed_out_scan_task = asyncio.create_task(test()) await time_travel(3) with pytest.raises(XKNXException): await timed_out_scan_task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestGatewayScanner.test_async_scan_exit ___________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/gateway_scanner_test.py, line 406 @patch("xknx.io.gateway_scanner.UDPTransport.connect") @patch("xknx.io.gateway_scanner.UDPTransport.send") async def test_async_scan_exit( self, udp_transport_send_mock: Mock, udp_transport_connect_mock: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test gateway scanner timeout for async generator.""" xknx = XKNX() test_search_response = fake_router_search_response() udp_transport_mock = Mock() udp_transport_mock.local_addr = ("10.1.1.2", 56789) gateway_scanner = GatewayScanner(xknx, local_ip="10.1.1.2") async def test() -> bool: async for gateway in gateway_scanner.async_scan(): assert isinstance(gateway, GatewayDescriptor) return True return False with ( patch( "xknx.io.gateway_scanner.UDPTransport.getsockname", return_value=("10.1.1.2", 56789), ), patch( "xknx.io.gateway_scanner.UDPTransport.register_callback" ) as register_callback_mock, ): scan_task = asyncio.create_task(test()) await time_travel(0) _fished_response_rec_callback = register_callback_mock.call_args.args[0] _fished_response_rec_callback( test_search_response, HPAI("192.168.42.50", 0), udp_transport_mock, ) assert await scan_task await time_travel(0) # for task cleanup file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________ ERROR at setup of TestFlowControl.test_basic_throttling ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/routing_test.py, line 93 async def test_basic_throttling(self, time_travel: EventLoopClockAdvancer) -> None: """Test throttling outgoing frames.""" flow_control = _RoutingFlowControl() mock = Mock() async def test_send() -> None: async with flow_control.throttle(): mock() # first send is called immediately task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 1 assert task.done() mock.reset_mock() # second send is throttled task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 0 await time_travel(ROUTING_INDICATION_WAIT_TIME / 4) assert not task.done() await time_travel(ROUTING_INDICATION_WAIT_TIME / 4 * 3) assert task.done() assert mock.call_count == 1 mock.reset_mock() # later send is called immediately await time_travel(ROUTING_INDICATION_WAIT_TIME) task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 1 assert task.done() mock.reset_mock() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____________ ERROR at setup of TestFlowControl.test_routing_busy ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/routing_test.py, line 128 @patch("random.random") async def test_routing_busy( self, random_mock: Mock, time_travel: EventLoopClockAdvancer ) -> None: """Test throttling on received RoutingBusy frame.""" flow_control = _RoutingFlowControl() mock = Mock() test_wait_time_ms = 100 random_mock.return_value = 0.5 async def test_send() -> None: async with flow_control.throttle(): mock() test_busy = RoutingBusy(wait_time=test_wait_time_ms) flow_control.handle_routing_busy(test_busy) task = asyncio.create_task(test_send()) await asyncio.sleep(0) assert mock.call_count == 0 await time_travel(test_wait_time_ms / 1000) assert mock.call_count == 1 assert task.done() # no slowduration for just 1 RoutingBusy assert flow_control._timer_task.done() mock.reset_mock() # multiple RoutingBusy frames flow_control.handle_routing_busy(test_busy) # after cooldown - with different wait times updating wait time for 2x time # not counting one frame due to cooldown time await time_travel(BUSY_INCREMENT_COOLDOWN) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms // 2)) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms * 2)) assert flow_control._received_busy_frames == 1 # add second busy frame after cooldown has passed await time_travel(BUSY_INCREMENT_COOLDOWN) flow_control.handle_routing_busy(RoutingBusy(wait_time=test_wait_time_ms // 2)) assert flow_control._received_busy_frames == 2 task = asyncio.create_task(test_send()) assert mock.call_count == 0 await time_travel(test_wait_time_ms * 2 / 1000 + 2 * 0.5) # add random time assert mock.call_count == 1 assert task.done() # slowduration assert not flow_control._timer_task.done() await time_travel(2 * BUSY_SLOWDURATION_TIME_FACTOR) # _received_busy_frames 2 await time_travel(BUSY_DECREMENT_TIME) # and decrement time assert not flow_control._timer_task.done() await time_travel(BUSY_DECREMENT_TIME) # and second decrement time assert flow_control._timer_task.done() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestSecureGroup.test_no_synchronize _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 51 async def test_no_synchronize( self, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test synchronisazion not answered.""" secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer connect_task = asyncio.create_task(secure_group.connect()) await time_travel(0) mock_super_connect.assert_called_once() self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # synchronize timed out await time_travel( secure_timer.max_delay_time_follower_update_notify + 2 * secure_timer.latency_tolerance_ms / 1000 ) assert connect_task.done() # we are timekeeper so we send TimerNotify after time_keeper_periodic assert secure_timer.timekeeper assert not secure_timer.sched_update await time_travel(secure_timer.min_delay_time_keeper_periodic_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 3 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # test response to invalid timer as timekeeper timer_invalid = KNXIPFrame.init_from_body( TimerNotify( timer_value=0, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "3195051bb981941d57e6c5b55355f341" ), ) ) secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) assert secure_timer.timekeeper assert secure_timer.sched_update await time_travel(secure_timer.min_delay_time_keeper_update_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 1 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], message_tag=bytes.fromhex("12 34"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), ) # stop secure_group.stop() assert secure_timer._notify_timer_handle is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestSecureGroup.test_synchronize ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 116 async def test_synchronize( self, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test synchronisazion.""" secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer connect_task = asyncio.create_task(secure_group.connect()) await time_travel(0) mock_super_connect.assert_called_once() _message_tag = self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() # incoming timer_update = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=XKNX_SERIAL_NUMBER, message_tag=_message_tag, ) ) with patch("xknx.io.ip_secure.SecureSequenceTimer.verify_timer_notify_mac"): # TimerNotify MAC is random so we don't verify it in tests secure_group.handle_knxipframe(timer_update, HPAI(*self.mock_addr)) await time_travel(0) _leeway_for_ci = 50 # ms assert ( ONE_HOUR_MS <= secure_timer.current_timer_value() <= ONE_HOUR_MS + _leeway_for_ci ) assert connect_task.done() # nothing sent until time_follower_periodic assert not secure_timer.timekeeper await time_travel(secure_timer.min_delay_time_follower_periodic_notify - 0.01) mock_super_send.assert_not_called() await time_travel(secure_timer.sync_latency_tolerance_ms / 1000 * 10 + 0.02) self.assert_timer_notify( mock_super_send.call_args[0][0], serial_number=XKNX_SERIAL_NUMBER, ) mock_super_send.reset_mock() secure_group.stop() assert secure_timer._notify_timer_handle is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestSecureGroup.test_received_timer_notify _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 170 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") async def test_received_timer_notify( self, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling of received TimerNotify frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer with patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule: # TimerNotify with invalid MAC shall be discarded timer_invalid_mac = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(timer_invalid_mac, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() # E1 timer_newer = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "d2fad5657a5788a36cdd8a3ef84c90ab" ), ) ) secure_group.handle_knxipframe(timer_newer, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E2 timer_exact = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "d2fad5657a5788a36cdd8a3ef84c90ab" ), ) ) secure_group.handle_knxipframe(timer_exact, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() timer_valid = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms + 1, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "7572b70b4f986d7ae68891a00c0d46d3" ), ) ) secure_group.handle_knxipframe(timer_valid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E3 timer_tolerable_1 = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "3d70cc44607ad9b4a4425de95101a54c" ), ) ) secure_group.handle_knxipframe(timer_tolerable_1, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() timer_tolerable_2 = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.latency_tolerance_ms + 1, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "66b8b2e52196bcce3dce2da7e0dc50ec" ), ) ) secure_group.handle_knxipframe(timer_tolerable_2, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() # E4 timer_invalid = KNXIPFrame.init_from_body( TimerNotify( timer_value=ONE_HOUR_MS - secure_timer.latency_tolerance_ms, serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), message_authentication_code=bytes.fromhex( "873d9a5a25b8508446bbd5ff1bb4b465" ), ) ) secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once_with( update=(bytes.fromhex("12 34"), bytes.fromhex("00 fa 12 34 56 78")) ) assert not secure_timer.timekeeper assert secure_timer.sched_update mock_reschedule.reset_mock() # E4 from sched_update secure_group.handle_knxipframe(timer_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ________ ERROR at setup of TestSecureGroup.test_received_secure_wrapper ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 304 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") @patch("xknx.io.transport.udp_transport.UDPTransport.handle_knxipframe") async def test_received_secure_wrapper( self, mock_super_handle_knxipframe: Mock, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling of received SecureWrapper frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer secure_timer.timer_authenticated = True with ( patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule, patch.object(secure_group, "decrypt_frame") as mock_decrypt, ): mock_decrypt.return_value = True # we are only interested in timer value # E5 wrapper_newer = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=ONE_HOUR_MS.to_bytes(6, "big"), ) ) secure_group.handle_knxipframe(wrapper_newer, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.sched_update mock_reschedule.reset_mock() # E6 wrapper_exact = KNXIPFrame.init_from_body( SecureWrapper(sequence_information=ONE_HOUR_MS.to_bytes(6, "big")) ) secure_group.handle_knxipframe(wrapper_exact, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() wrapper_valid = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms + 1 ).to_bytes(6, "big") ) ) secure_group.handle_knxipframe(wrapper_valid, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_called_once() assert secure_timer.current_timer_value() == ONE_HOUR_MS assert not secure_timer.timekeeper assert not secure_timer.sched_update mock_reschedule.reset_mock() # E7 wrapper_tolerable_1 = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.sync_latency_tolerance_ms ).to_bytes(6, "big"), ) ) secure_group.handle_knxipframe(wrapper_tolerable_1, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_not_called() wrapper_tolerable_2 = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.latency_tolerance_ms + 1 ).to_bytes(6, "big"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(wrapper_tolerable_2, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_called_once() mock_super_handle_knxipframe.reset_mock() mock_reschedule.assert_not_called() # E8 wrapper_invalid = KNXIPFrame.init_from_body( SecureWrapper( sequence_information=( ONE_HOUR_MS - secure_timer.latency_tolerance_ms ).to_bytes(6, "big"), serial_number=bytes.fromhex("00 fa 12 34 56 78"), message_tag=bytes.fromhex("12 34"), ) ) secure_group.handle_knxipframe(wrapper_invalid, HPAI(*self.mock_addr)) mock_reschedule.assert_called_once_with( update=(bytes.fromhex("12 34"), bytes.fromhex("00 fa 12 34 56 78")) ) assert not secure_timer.timekeeper assert secure_timer.sched_update mock_reschedule.reset_mock() # E8 from sched_update secure_group.handle_knxipframe(wrapper_invalid, HPAI(*self.mock_addr)) mock_super_handle_knxipframe.assert_not_called() mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestSecureGroup.test_send_secure_wrapper __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_group_test.py, line 429 @patch("xknx.io.ip_secure.SecureSequenceTimer._notify_timer_expired") @patch("xknx.io.ip_secure.SecureSequenceTimer._monotonic_ms") async def test_send_secure_wrapper( self, mock_monotonic_ms: Mock, _mock_notify_timer_expired: Mock, # we don't want to actually send here mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test sending SecureWrapper frames.""" mock_monotonic_ms.return_value = 0 secure_group = SecureGroup( local_addr=self.mock_addr, remote_addr=(DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT), backbone_key=self.mock_backbone_key, latency_ms=1000, ) secure_timer = secure_group.secure_timer secure_timer.timer_authenticated = True raw_test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_IND, data=CEMILData.init_from_telegram( Telegram( destination_address=GroupAddress("1/2/3"), payload=apci.GroupValueRead(), ) ), ).to_knx() with patch.object( secure_timer, "reschedule", wraps=secure_timer.reschedule ) as mock_reschedule: assert not secure_timer.sched_update secure_group.send( KNXIPFrame.init_from_body(RoutingIndication(raw_cemi=raw_test_cemi)) ) mock_reschedule.assert_called_once() mock_reschedule.reset_mock() # no reschedule when sched_update is true secure_timer.reschedule(update=(bytes(2), bytes(6))) assert secure_timer.sched_update mock_reschedule.reset_mock() secure_group.send( KNXIPFrame.init_from_body(RoutingIndication(raw_cemi=raw_test_cemi)) ) mock_reschedule.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of TestSecureSession.test_lifecycle ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 74 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_lifecycle( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test connection, handshake, keepalive and shutdown.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) mock_super_connect.assert_called_once() # outgoing session_request_frame = KNXIPFrame.init_from_body( SessionRequest(ecdh_client_public_key=self.mock_public_key) ) mock_super_send.assert_called_once_with( session_request_frame, None, # None for addr in TCP transport ) mock_super_send.reset_mock() # incoming session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) await time_travel(0) # outgoing encrypted_authenticate_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=self.mock_serial_number, message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex( "79 15 a4 f3 6e 6e 42 08" "d2 8b 4a 20 7d 8f 35 c0" "d1 38 c2 6a 7b 5e 71 69" ), message_authentication_code=bytes.fromhex( "52 db a8 e7 e4 bd 80 bd 7d 86 8a 3a e7 87 49 de" ), ) ) mock_super_send.assert_called_once_with( encrypted_authenticate_frame, None, # None for addr in TCP transport ) mock_super_send.reset_mock() # incoming encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized is True assert not self.session._keepalive_task.done() # handle incoming SessionStatus (unencrypted for sake of simplicity) session_status_close_frame = KNXIPFrame.init_from_body( SessionStatus(status=SecureSessionStatusCode.STATUS_CLOSE) ) with patch.object(self.session, "transport") as mock_transport: self.session.handle_knxipframe( session_status_close_frame, HPAI(*self.mock_addr) ) mock_transport.close.assert_called_once() # keepalive SessionStatus (not specific for sake of simplicity) await time_travel(SESSION_KEEPALIVE_RATE) mock_super_send.assert_called_once() mock_super_send.reset_mock() # SessionStatus CLOSE sent on graceful disconnect with ( patch.object(self.session, "send", wraps=self.session.send) as mock_send, patch.object(self.session, "transport") as mock_transport, ): self.session.stop() mock_send.assert_called_once_with(session_status_close_frame) mock_super_send.assert_called_once() mock_transport.close.assert_called_once() assert self.session._keepalive_task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________ ERROR at setup of TestSecureSession.test_invalid_frames ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 198 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_frames( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling invalid frames.""" callback_mock = Mock() self.session.register_callback(callback_mock) # setup session connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) await time_travel(0) callback_mock.reset_mock() encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized callback_mock.assert_called_once() callback_mock.reset_mock() # receive sequence_information 0 again self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await time_travel(0) callback_mock.assert_not_called() # receive invalid message_authentication_code # (which is invalid brecause the sequence_information is changed) wrong_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 01"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( wrong_session_status_frame, HPAI(*self.mock_addr) ) await time_travel(0) callback_mock.assert_not_called() # async teardown self.session.stop() assert self.session.initialized is False file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______ ERROR at setup of TestSecureSession.test_invalid_session_response _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 279 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_session_response( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling invalid session response.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" ), ) ) with pytest.raises(CommunicationError): self.session.handle_knxipframe( session_response_frame, HPAI(*self.mock_addr) ) await connect_task # only SessionRequest, no SessionAuthenticate mock_super_send.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 __________ ERROR at setup of TestSecureSession.test_no_authentication __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 312 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_no_authentication( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling initializing session without verifying server authenticity.""" self.session._device_authentication_code = None connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) mock_super_send.reset_mock() invalid_session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff" ), ) ) self.session.handle_knxipframe( invalid_session_response_frame, HPAI(*self.mock_addr) ) await time_travel(0) # outgoing encrypted_authenticate_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=self.mock_serial_number, message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex( "79 15 a4 f3 6e 6e 42 08" "d2 8b 4a 20 7d 8f 35 c0" "d1 38 c2 6a 7b 5e 71 69" ), message_authentication_code=bytes.fromhex( "52 db a8 e7 e4 bd 80 bd 7d 86 8a 3a e7 87 49 de" ), ) ) mock_super_send.assert_called_once_with( encrypted_authenticate_frame, None, # None for addr in TCP transport ) # incoming encrypted_session_status_frame = KNXIPFrame.init_from_body( SecureWrapper( secure_session_id=self.mock_session_id, sequence_information=bytes.fromhex("00 00 00 00 00 00"), serial_number=bytes.fromhex("00 fa aa aa aa aa"), message_tag=self.mock_message_tag, encrypted_data=bytes.fromhex("26 15 6d b5 c7 49 88 8f"), message_authentication_code=bytes.fromhex( "a3 73 c3 e0 b4 bd e4 49 7c 39 5e 4b 1c 2f 46 a1" ), ) ) self.session.handle_knxipframe( encrypted_session_status_frame, HPAI(*self.mock_addr) ) await connect_task assert self.session.initialized is True # async teardown self.session.stop() assert self.session.initialized is False file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestSecureSession.test_invalid_authentication ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/secure_session_test.py, line 386 @patch("xknx.io.transport.tcp_transport.TCPTransport.connect") @patch("xknx.io.transport.tcp_transport.TCPTransport.send") @patch( "xknx.io.ip_secure.generate_ecdh_key_pair", return_value=(mock_private_key, mock_public_key), ) async def test_invalid_authentication( self, _mock_generate: Mock, mock_super_send: Mock, mock_super_connect: Mock, time_travel: EventLoopClockAdvancer, ) -> None: """Test handling no session status while authenticating.""" connect_task = asyncio.create_task(self.session.connect()) await time_travel(0) session_response_frame = KNXIPFrame.init_from_body( SessionResponse( secure_session_id=1, ecdh_server_public_key=self.mock_server_public_key, message_authentication_code=bytes.fromhex( "a9 22 50 5a aa 43 61 63 57 0b d5 49 4c 2d f2 a3" ), ) ) self.session.handle_knxipframe(session_response_frame, HPAI(*self.mock_addr)) with pytest.raises(CommunicationError): await time_travel(10) await connect_task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestSecureSession, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestSelfDescription.test_description_query _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 46 async def test_description_query(self, time_travel: EventLoopClockAdvancer) -> None: """Test DescriptionQuery class.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) transport_mocked = UDPTransport(local_addr=local_addr, remote_addr=remote_addr) transport_mocked.getsockname = Mock(return_value=local_addr) transport_mocked.send = Mock() description_request = KNXIPFrame.init_from_body( DescriptionRequest(control_endpoint=HPAI(*local_addr)) ) description_query = DescriptionQuery( transport=transport_mocked, local_hpai=HPAI(*local_addr) ) task = asyncio.create_task(description_query.start()) await time_travel(0) transport_mocked.send.assert_called_once_with(description_request) transport_mocked.data_received_callback( raw=self.description_response_raw, source=remote_addr ) await task assert description_query.gateway_descriptor is not None assert description_query.gateway_descriptor.name == "KNX IP Router 752 secure" file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______ ERROR at setup of TestSelfDescription.test_request_description_v1 _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 72 async def test_request_description_v1( self, time_travel: EventLoopClockAdvancer, ) -> None: """Test request_description function with Core v1 device.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) with ( patch( "xknx.io.self_description.UDPTransport.connect" ) as transport_connect_mock, patch( "xknx.io.self_description.UDPTransport.getsockname", return_value=local_addr, ), patch("xknx.io.self_description.UDPTransport.send") as transport_send_mock, patch("xknx.io.self_description.UDPTransport.stop") as transport_stop_mock, patch( "xknx.io.self_description.DescriptionQuery", wraps=DescriptionQuery ) as description_query_mock, ): task = asyncio.create_task(request_description(remote_addr[0])) await time_travel(0) transport_connect_mock.assert_called_once_with() assert transport_send_mock.call_count == 1 assert isinstance( transport_send_mock.call_args[0][0].body, DescriptionRequest ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.description_response_v1_raw, remote_addr ) gateway = await task transport_stop_mock.assert_called_once() assert transport_send_mock.call_count == 1 assert gateway.core_version == 1 assert gateway.name == "MDT KNX IP Router" assert gateway.tunnelling_requires_secure is None assert gateway.individual_address == IndividualAddress("2.0.0") file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___ ERROR at setup of TestSelfDescription.test_request_description_extended ____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/self_description_test.py, line 114 async def test_request_description_extended( self, time_travel: EventLoopClockAdvancer, ) -> None: """Test request_description function with Core v2 device.""" local_addr = ("127.0.0.1", 12345) remote_addr = ("127.0.0.2", 54321) with ( patch( "xknx.io.self_description.UDPTransport.connect" ) as transport_connect_mock, patch( "xknx.io.self_description.UDPTransport.getsockname", return_value=local_addr, ), patch("xknx.io.self_description.UDPTransport.send") as transport_send_mock, patch("xknx.io.self_description.UDPTransport.stop") as transport_stop_mock, patch( "xknx.io.self_description.DescriptionQuery", wraps=DescriptionQuery ) as description_query_mock, ): task = asyncio.create_task(request_description(remote_addr[0])) await time_travel(0) transport_connect_mock.assert_called_once_with() assert transport_send_mock.call_count == 1 assert isinstance( transport_send_mock.call_args[0][0].body, DescriptionRequest ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.description_response_raw, remote_addr ) await time_travel(0) assert transport_send_mock.call_count == 2 assert isinstance( transport_send_mock.call_args[0][0].body, SearchRequestExtended ) _transport = description_query_mock.call_args.kwargs["transport"] _transport.data_received_callback( self.search_response_extended_raw, remote_addr ) gateway = await task transport_stop_mock.assert_called_once() assert transport_send_mock.call_count == 2 assert gateway.core_version == 2 assert gateway.name == "KNX IP Router 752 secure" assert gateway.tunnelling_requires_secure is True assert gateway.individual_address == IndividualAddress("5.0.0") file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestUDPTunnel.test_repeated_tunnel_request _________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 132 async def test_repeated_tunnel_request( self, time_travel: EventLoopClockAdvancer ) -> None: """Test Tunnel for receiving repeated TunnellingRequest frames.""" self.tunnel.transport.send = Mock() self.tunnel.communication_channel = 1 self.tunnel.expected_sequence_number = 10 test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_IND, data=CEMILData.init_from_telegram(test_telegram), ) test_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=1, sequence_counter=10, raw_cemi=cemi.to_knx(), ) ) test_ack = KNXIPFrame.init_from_body(TunnellingAck(sequence_counter=10)) test_frame_9 = deepcopy(test_frame) test_frame_9.body.sequence_counter = 9 # first frame - ACK and processed self.tunnel._request_received(test_frame, None, None) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(test_ack, addr=None)] self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 # same sequence number as before - ACK, not processed self.tunnel._request_received(test_frame, None, None) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(test_ack, addr=None)] self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 # wrong sequence number - no ACK, not processed # reconnect if `auto_reconnect` was True with pytest.raises(CommunicationError): self.tunnel._request_received(test_frame_9, None, None) await time_travel(0) self.tunnel.transport.send.assert_not_called() self.tunnel.transport.send.reset_mock() assert self.tunnel.expected_sequence_number == 11 assert self.cemi_received_mock.call_count == 1 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestUDPTunnel.test_tunnel_send_retry ____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 183 async def test_tunnel_send_retry(self, time_travel: EventLoopClockAdvancer) -> None: """Test tunnel resends the telegram when no ACK was received.""" self.tunnel.transport.send = Mock() self.tunnel.communication_channel = 1 self.tunnel.sequence_number = 23 self.tunnel.expected_sequence_number = 15 test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=self.tunnel._src_address, ), ) request = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=self.tunnel.communication_channel, sequence_counter=self.tunnel.sequence_number, raw_cemi=test_cemi.to_knx(), ) ) test_ack = KNXIPFrame.init_from_body( TunnellingAck(sequence_counter=self.tunnel.sequence_number) ) confirmation_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_CON, data=CEMILData.init_from_telegram(test_telegram), ) confirmation = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=1, sequence_counter=15, raw_cemi=confirmation_cemi.to_knx(), ) ) confirmation_ack = KNXIPFrame.init_from_body(TunnellingAck(sequence_counter=15)) task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [call(request, addr=None)] self.tunnel.transport.send.reset_mock() # no ACK received, resend same telegram await time_travel(1) assert self.tunnel.transport.send.call_args_list == [call(request, addr=None)] self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(test_ack, HPAI()) await time_travel(0) assert task.done() await task # L_Data.con ACK for UDP tunneling self.tunnel.transport.handle_knxipframe(confirmation, HPAI()) await time_travel(0) assert self.tunnel.transport.send.call_args_list == [ call(confirmation_ack, addr=None) ] self.tunnel.transport.send.reset_mock() # Test raise after 2 missed ACKs (reconnect if `auto_reconnect` was True) with pytest.raises(CommunicationError): task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) # no ACKs received, for 2x wait time (with advancing the loop in between) await time_travel(1) await time_travel(1) assert self.tunnel.transport.send.call_count == 2 self.tunnel.transport.send.reset_mock() await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of TestUDPTunnel.test_tunnel_connect_send_disconnect[False-data_endpoint_addr0-local_endpoint0] _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 254 @pytest.mark.parametrize( ("route_back", "data_endpoint_addr", "local_endpoint"), [ (False, ("192.168.1.2", 56789), HPAI("192.168.1.1", 12345)), (True, None, HPAI()), ], ) async def test_tunnel_connect_send_disconnect( self, time_travel: EventLoopClockAdvancer, route_back: bool, data_endpoint_addr: tuple[str, int] | None, local_endpoint: HPAI, ) -> None: """Test initiating a tunnelling connection.""" local_addr = ("192.168.1.1", 12345) remote_addr = ("192.168.1.2", 3671) self.tunnel.route_back = route_back gateway_data_endpoint = ( HPAI(*data_endpoint_addr) if data_endpoint_addr else HPAI() ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() # Connect connect_request = ConnectRequest( control_endpoint=local_endpoint, data_endpoint=local_endpoint, ) connect_frame = KNXIPFrame.init_from_body(connect_request) connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() self.tunnel.transport.send.assert_called_once_with(connect_frame) connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=gateway_data_endpoint, crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_addr) await connection_task assert self.tunnel._data_endpoint_addr == data_endpoint_addr assert self.tunnel._src_address == IndividualAddress(7) # Send - use data endpoint self.tunnel.transport.send.reset_mock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=IndividualAddress(7), ), ) test_telegram_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=23, sequence_counter=0, raw_cemi=test_cemi.to_knx(), ) ) send_task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) self.tunnel.transport.send.assert_called_once_with( test_telegram_frame, addr=data_endpoint_addr ) # skip ack and confirmation assert not send_task.done() # Disconnect self.tunnel.transport.send.reset_mock() disconnect_request = DisconnectRequest( communication_channel_id=23, control_endpoint=local_endpoint, ) disconnect_frame = KNXIPFrame.init_from_body(disconnect_request) disconnection_task = asyncio.create_task(self.tunnel.disconnect()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(disconnect_frame) disconnect_response_frame = KNXIPFrame.init_from_body( DisconnectResponse(communication_channel_id=23) ) self.tunnel.transport.handle_knxipframe(disconnect_response_frame, remote_addr) await disconnection_task assert self.tunnel._data_endpoint_addr is None self.tunnel.transport.stop.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of TestUDPTunnel.test_tunnel_connect_send_disconnect[True-None-local_endpoint1] _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 254 @pytest.mark.parametrize( ("route_back", "data_endpoint_addr", "local_endpoint"), [ (False, ("192.168.1.2", 56789), HPAI("192.168.1.1", 12345)), (True, None, HPAI()), ], ) async def test_tunnel_connect_send_disconnect( self, time_travel: EventLoopClockAdvancer, route_back: bool, data_endpoint_addr: tuple[str, int] | None, local_endpoint: HPAI, ) -> None: """Test initiating a tunnelling connection.""" local_addr = ("192.168.1.1", 12345) remote_addr = ("192.168.1.2", 3671) self.tunnel.route_back = route_back gateway_data_endpoint = ( HPAI(*data_endpoint_addr) if data_endpoint_addr else HPAI() ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() # Connect connect_request = ConnectRequest( control_endpoint=local_endpoint, data_endpoint=local_endpoint, ) connect_frame = KNXIPFrame.init_from_body(connect_request) connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() self.tunnel.transport.send.assert_called_once_with(connect_frame) connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=gateway_data_endpoint, crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_addr) await connection_task assert self.tunnel._data_endpoint_addr == data_endpoint_addr assert self.tunnel._src_address == IndividualAddress(7) # Send - use data endpoint self.tunnel.transport.send.reset_mock() test_telegram = Telegram( destination_address=GroupAddress(1), payload=GroupValueWrite(DPTArray((1,))), ) test_cemi = CEMIFrame( code=CEMIMessageCode.L_DATA_REQ, data=CEMILData.init_from_telegram( test_telegram, src_addr=IndividualAddress(7), ), ) test_telegram_frame = KNXIPFrame.init_from_body( TunnellingRequest( communication_channel_id=23, sequence_counter=0, raw_cemi=test_cemi.to_knx(), ) ) send_task = asyncio.create_task(self.tunnel.send_cemi(test_cemi)) await time_travel(0) self.tunnel.transport.send.assert_called_once_with( test_telegram_frame, addr=data_endpoint_addr ) # skip ack and confirmation assert not send_task.done() # Disconnect self.tunnel.transport.send.reset_mock() disconnect_request = DisconnectRequest( communication_channel_id=23, control_endpoint=local_endpoint, ) disconnect_frame = KNXIPFrame.init_from_body(disconnect_request) disconnection_task = asyncio.create_task(self.tunnel.disconnect()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(disconnect_frame) disconnect_response_frame = KNXIPFrame.init_from_body( DisconnectResponse(communication_channel_id=23) ) self.tunnel.transport.handle_knxipframe(disconnect_response_frame, remote_addr) await disconnection_task assert self.tunnel._data_endpoint_addr is None self.tunnel.transport.stop.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestUDPTunnel.test_tunnel_request_description ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 352 async def test_tunnel_request_description( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel requesting and returning description of connected interface.""" local_addr = ("192.168.1.1", 12345) self.tunnel.transport.send = Mock() self.tunnel.transport.getsockname = Mock(return_value=local_addr) description_request = KNXIPFrame.init_from_body( DescriptionRequest(control_endpoint=self.tunnel.local_hpai) ) description_response = KNXIPFrame.init_from_body(DescriptionResponse()) task = asyncio.create_task(self.tunnel.request_description()) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(description_request) self.tunnel.transport.handle_knxipframe(description_response, HPAI()) await time_travel(0) assert task.done() assert isinstance(task.result(), GatewayDescriptor) assert self.tunnel.transport.send.call_count == 1 await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestUDPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____________ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat _____________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 393 async def test_tunnel_heartbeat(self, time_travel: EventLoopClockAdvancer) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) heartbeat_response = KNXIPFrame.init_from_body( ConnectionStateResponse( communication_channel_id=23, status_code=ErrorCode.E_NO_ERROR, ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_response, remote_hpai) # test no retry-heartbeat was sent await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_not_called() # next regular heartbeat await time_travel(HEARTBEAT_RATE - CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel._tunnel_lost.assert_not_called() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat_no_answer ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 447 async def test_tunnel_heartbeat_no_answer( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() # no answer - repeat 3 times await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() await time_travel(CONNECTIONSTATE_REQUEST_TIMEOUT) # no answer - tunnel lost self.tunnel._tunnel_lost.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _________ ERROR at setup of TestTCPTunnel.test_tunnel_heartbeat_error __________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/io_tests/tunnel_test.py, line 501 async def test_tunnel_heartbeat_error( self, time_travel: EventLoopClockAdvancer ) -> None: """Test tunnel sends heartbeat frame.""" local_addr = ("192.168.1.1", 12345) remote_hpai = HPAI( ip_addr="192.168.1.2", port=3671, protocol=HostProtocol.IPV4_TCP ) self.tunnel.transport.connect = AsyncMock() self.tunnel.transport.getsockname = Mock(return_value=(local_addr)) self.tunnel.transport.send = Mock() self.tunnel.transport.stop = Mock() self.tunnel._tunnel_lost = Mock() # Connect connection_task = asyncio.create_task(self.tunnel.connect()) await time_travel(0) self.tunnel.transport.connect.assert_called_once() connect_response_frame = KNXIPFrame.init_from_body( ConnectResponse( communication_channel=23, data_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), crd=ConnectResponseData(individual_address=IndividualAddress(7)), ) ) self.tunnel.transport.handle_knxipframe(connect_response_frame, remote_hpai) await connection_task self.tunnel.transport.send.reset_mock() # Send heartbeat heartbeat_request = KNXIPFrame.init_from_body( ConnectionStateRequest( communication_channel_id=23, control_endpoint=HPAI(protocol=HostProtocol.IPV4_TCP), ) ) heartbeat_error_response = KNXIPFrame.init_from_body( ConnectionStateResponse( communication_channel_id=23, status_code=ErrorCode.E_CONNECTION_ID, ) ) await time_travel(HEARTBEAT_RATE) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) # repeat 3 times await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) self.tunnel.transport.send.assert_called_once_with(heartbeat_request) self.tunnel.transport.send.reset_mock() self.tunnel.transport.handle_knxipframe(heartbeat_error_response, remote_hpai) await time_travel(0) # third retry had an error - tunnel lost self.tunnel._tunnel_lost.assert_called_once() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, _xunit_setup_method_fixture_TestTCPTunnel, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________________ ERROR at setup of test_ack_timeout ______________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 76 async def test_ack_timeout(time_travel: EventLoopClockAdvancer) -> None: """Test ACK timeout handling.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() _ia = IndividualAddress("4.0.1") conn = await xknx.management.connect(_ia) xknx.cemi_handler.send_telegram.reset_mock() device_desc_read = Telegram( destination_address=_ia, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) task = asyncio.create_task( conn.request( payload=apci.DeviceDescriptorRead(descriptor=0), expected=apci.DeviceDescriptorResponse, ) ) await asyncio.sleep(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(device_desc_read), ] await time_travel(MANAGAMENT_ACK_TIMEOUT) # telegram repeated assert xknx.cemi_handler.send_telegram.call_args_list == [ call(device_desc_read), call(device_desc_read), ] await time_travel(MANAGAMENT_ACK_TIMEOUT) with pytest.raises(ManagementConnectionTimeout): # still no ACK -> timeout await task await conn.disconnect() file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________________ ERROR at setup of test_p2p_rate_limit[0] ___________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 238 @pytest.mark.parametrize("rate_limit", [0, 1]) async def test_p2p_rate_limit( time_travel: EventLoopClockAdvancer, rate_limit: int ) -> None: """Test rate limit for P2P management connections.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() ia = IndividualAddress("4.0.1") def send_responses(index: int) -> None: file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ___________________ ERROR at setup of test_p2p_rate_limit[1] ___________________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/management_test.py, line 238 @pytest.mark.parametrize("rate_limit", [0, 1]) async def test_p2p_rate_limit( time_travel: EventLoopClockAdvancer, rate_limit: int ) -> None: """Test rate limit for P2P management connections.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() ia = IndividualAddress("4.0.1") def send_responses(index: int) -> None: file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of test_nm_individual_address_read _______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 124 async def test_nm_individual_address_read(time_travel: EventLoopClockAdvancer) -> None: """Test nm_individual_address_read.""" _timeout = 2 xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_1 = IndividualAddress("1.1.4") individual_address_2 = IndividualAddress("15.15.255") task = asyncio.create_task( procedures.nm_individual_address_read(xknx=xknx, timeout=_timeout) ) address_broadcast = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) address_reply_message_1 = Telegram( source_address=individual_address_1, destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressResponse(), ) address_reply_message_2 = Telegram( source_address=individual_address_2, destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressResponse(), ) await asyncio.sleep(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(address_broadcast), ] xknx.management.process(address_reply_message_1) xknx.management.process(address_reply_message_2) await time_travel(_timeout) assert await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ______________ ERROR at setup of test_nm_individual_address_write ______________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 201 async def test_nm_individual_address_write(time_travel: EventLoopClockAdvancer) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), direction=TelegramDirection.OUTGOING, payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) device_desc_resp = Telegram( source_address=individual_address_new, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) ack = Telegram( source_address=individual_address_new, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack2 = Telegram( destination_address=individual_address_new, source_address=IndividualAddress(0), direction=TelegramDirection.OUTGOING, tpci=tpci.TAck(0), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) individual_address_write = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressWrite(address=individual_address_new), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) # send response to device in programming mode xknx.management.process(address_reply_message) # confirm device is up and running await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) xknx.management.process(ack) xknx.management.process(device_desc_resp) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), call(individual_address_write), call(connect), call(device_desc_read), call(ack2), ] await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_two_devices_in_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 286 async def test_nm_individual_address_write_two_devices_in_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(0) # start await time_travel(3) # first timeout await time_travel(3) # second timeout assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), ] # receive two responses from devices in programming mode xknx.management.process(address_reply_message) xknx.management.process(address_reply_message) with pytest.raises( ManagementConnectionError, match="More than one KNX device is in programming mode", ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_no_device_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 344 async def test_nm_individual_address_write_no_device_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), ] # first timeout - retransmit DeviceDescriptorRead await time_travel(3) assert xknx.cemi_handler.send_telegram.call_args_list[2:] == [ call(device_desc_read), ] # retry also timed out await time_travel(3) assert xknx.cemi_handler.send_telegram.call_args_list[3:] == [ call(disconnect), call(individual_address_read), ] # IndividualAddressRead also times out await time_travel(3) with pytest.raises( ManagementConnectionError, match="No device in programming mode" ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_write_address_found _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 398 async def test_nm_individual_address_write_address_found( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) ack_in = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack_out = Telegram( source_address=IndividualAddress(0), destination_address=individual_address, tpci=tpci.TAck(0), ) device_desc_resp = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) disconnect = Telegram( destination_address=individual_address, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address ) ) # first request (address check) succeeds await time_travel(0) xknx.management.process(ack_in) xknx.management.process(device_desc_resp) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(ack_out), ] await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list[3:] == [ call(disconnect), call(individual_address_read), ] # second request times out - no device in programming mode await time_travel(3) with pytest.raises( ManagementConnectionError, match="No device in programming mode" ): await task assert len(xknx.cemi_handler.send_telegram.call_args_list) == 5 file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ____ ERROR at setup of test_nm_individual_address_write_programming_failed _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 468 async def test_nm_individual_address_write_programming_failed( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address_old = IndividualAddress("15.15.255") individual_address_new = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address_new, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address_new, tpci=tpci.TDataConnected(0), direction=TelegramDirection.OUTGOING, payload=apci.DeviceDescriptorRead(descriptor=0), ) address_reply_message = Telegram( source_address=individual_address_old, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) disconnect = Telegram( destination_address=individual_address_new, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) individual_address_write = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressWrite(address=individual_address_new), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address_new ) ) # make sure first request (address check) times out await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) # send response to device in programming mode xknx.management.process(address_reply_message) # device experienced error, so set connection request timeout await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(device_desc_read), # due to retransmit call(disconnect), call(individual_address_read), call(individual_address_write), call(connect), call(device_desc_read), call(device_desc_read), call(disconnect), ] with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_write_address_found_other_in_programming_mode _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 537 async def test_nm_individual_address_write_address_found_other_in_programming_mode( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.5") individual_address_pgm = IndividualAddress("1.1.4") connect = Telegram(destination_address=individual_address, tpci=tpci.TConnect()) device_desc_read = Telegram( destination_address=individual_address, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorRead(descriptor=0), ) ack = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TAck(0), ) ack2 = Telegram( source_address=IndividualAddress(0), destination_address=individual_address, tpci=tpci.TAck(0), ) device_desc_resp = Telegram( source_address=individual_address, destination_address=IndividualAddress(0), direction=TelegramDirection.INCOMING, tpci=tpci.TDataConnected(0), payload=apci.DeviceDescriptorResponse(), ) disconnect = Telegram( destination_address=individual_address, tpci=tpci.TDisconnect(), ) individual_address_read = Telegram( GroupAddress("0/0/0"), payload=apci.IndividualAddressRead() ) address_reply_message = Telegram( source_address=individual_address_pgm, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressResponse(), ) task = asyncio.create_task( procedures.nm_individual_address_write( xknx=xknx, individual_address=individual_address ) ) # make sure first request (address check) times out await time_travel(0) xknx.management.process(ack) xknx.management.process(device_desc_resp) await time_travel(MANAGAMENT_CONNECTION_TIMEOUT) xknx.management.process(address_reply_message) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(connect), call(device_desc_read), call(ack2), call(disconnect), call(individual_address_read), ] with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_serial_number_read ________ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 610 async def test_nm_individual_address_serial_number_read( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_read.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() individual_address = IndividualAddress("1.1.5") serial_number = b"aabbccddeeff" task = asyncio.create_task( procedures.nm_individual_address_serial_number_read( xknx=xknx, serial=serial_number ) ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(read_address), ] xknx.management.process(address_reply) assert await task == individual_address file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _____ ERROR at setup of test_nm_individual_address_serial_number_read_fail _____ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 648 async def test_nm_individual_address_serial_number_read_fail( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_read.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" task = asyncio.create_task( procedures.nm_individual_address_serial_number_read( xknx=xknx, serial=serial_number ) ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(read_address), ] await time_travel(3) assert await task is None file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _______ ERROR at setup of test_nm_individual_address_serial_number_write _______ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 677 async def test_nm_individual_address_serial_number_write( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address = IndividualAddress("1.1.5") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] xknx.management.process(address_reply) await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_serial_number_write_fail_no_response _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 721 async def test_nm_individual_address_serial_number_write_fail_no_response( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address = IndividualAddress("1.1.5") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] await time_travel(3) with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 _ ERROR at setup of test_nm_individual_address_serial_number_write_fail_wrong_address _ file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/management_tests/procedures_test.py, line 758 async def test_nm_individual_address_serial_number_write_fail_wrong_address( time_travel: EventLoopClockAdvancer, ) -> None: """Test nm_individual_address_serial_number_write.""" xknx = XKNX() xknx.cemi_handler = AsyncMock() serial_number = b"aabbccddeeff" individual_address_tx = IndividualAddress("1.1.5") individual_address_rx = IndividualAddress("1.1.6") task = asyncio.create_task( procedures.nm_individual_address_serial_number_write( xknx=xknx, serial=serial_number, individual_address=individual_address_tx ) ) write_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialWrite( serial=serial_number, address=individual_address_tx ), ) read_address = Telegram( destination_address=GroupAddress("0/0/0"), payload=apci.IndividualAddressSerialRead(serial=serial_number), ) address_reply = Telegram( source_address=individual_address_rx, destination_address=GroupAddress("0/0/0"), direction=TelegramDirection.INCOMING, payload=apci.IndividualAddressSerialResponse( address=individual_address_rx, serial=serial_number ), ) await time_travel(0) assert xknx.cemi_handler.send_telegram.call_args_list == [ call(write_address), call(read_address), ] xknx.management.process(address_reply) with pytest.raises(ManagementConnectionError): await task file /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py, line 51 @pytest.fixture def time_travel(event_loop: asyncio.AbstractEventLoop) -> EventLoopClockAdvancer: E fixture 'event_loop' not found > available fixtures: _class_scoped_runner, _function_scoped_runner, _module_scoped_runner, _package_scoped_runner, _session_scoped_runner, cache, capfd, capfdbinary, caplog, capsys, capsysbinary, capteesys, cov, doctest_namespace, event_loop_policy, monkeypatch, no_cover, pytestconfig, record_property, record_testsuite_property, record_xml_attribute, recwarn, time_travel, tmp_path, tmp_path_factory, tmpdir, tmpdir_factory, unused_tcp_port, unused_tcp_port_factory, unused_udp_port, unused_udp_port_factory, xknx_no_interface > use 'pytest --fixtures [testpath]' for help on them. /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build/test/conftest.py:51 ============================= slowest 10 durations ============================= 0.33s setup test/secure_tests/data_secure_test.py::TestDataSecure::test_data_secure_init 0.23s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_automatic_with_keyring_and_ia 0.16s setup test/remote_value_tests/remote_value_test.py::TestRemoteValue::test_get_set_value 0.16s call test/cemi_tests/cemi_frame_test.py::test_from_knx_with_not_handleable_cemi 0.16s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_ia 0.16s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_first_interface 0.15s call test/io_tests/knxip_interface_test.py::TestKNXIPInterface::test_start_secure_connection_knx_keys_user_id 0.15s teardown test/devices_tests/climate_test.py::TestClimate::test_initialized_for_setpoint_shift_calculations 0.14s call test/dpt_tests/dpt_color_test.py::TestDPTColorRGBW::test_rgbwcolor_to_knx_limits[0-0-0--1] 0.13s call test/devices_tests/sensor_expose_loop_test.py::TestSensorExposeLoop::test_array_sensor_loop[angle_deg-test_payload9-880.5026] =========================== short test summary info ============================ ERROR test/cemi_tests/cemi_handler_test.py::test_wait_for_l2_confirmation ERROR test/core_tests/task_registry_test.py::TestTaskRegistry::test_reconnect_handling ERROR test/core_tests/task_registry_test.py::TestTaskRegistry::test_background ERROR test/devices_tests/binary_sensor_test.py::TestBinarySensor::test_process_reset_after ERROR test/devices_tests/cover_test.py::TestCover::test_auto_stop ERROR test/devices_tests/cover_test.py::TestCover::test_periodic_update ERROR test/devices_tests/datetime_test.py::TestDateTime::test_background_task ERROR test/devices_tests/datetime_test.py::TestDateTime::test_no_background_task ERROR test/devices_tests/expose_sensor_test.py::TestExposeSensor::test_cooldown ERROR test/devices_tests/light_test.py::TestLight::test_process_individual_color_debouncer ERROR test/devices_tests/switch_test.py::TestSwitch::test_process_reset_after ERROR test/devices_tests/switch_test.py::TestSwitch::test_process_reset_after_cancel_existing ERROR test/io_tests/gateway_scanner_test.py::TestGatewayScanner::test_async_scan_timeout ERROR test/io_tests/gateway_scanner_test.py::TestGatewayScanner::test_async_scan_exit ERROR test/io_tests/routing_test.py::TestFlowControl::test_basic_throttling ERROR test/io_tests/routing_test.py::TestFlowControl::test_routing_busy ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_no_synchronize ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_synchronize ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_received_timer_notify ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_received_secure_wrapper ERROR test/io_tests/secure_group_test.py::TestSecureGroup::test_send_secure_wrapper ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_lifecycle ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_frames ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_session_response ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_no_authentication ERROR test/io_tests/secure_session_test.py::TestSecureSession::test_invalid_authentication ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_description_query ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_request_description_v1 ERROR test/io_tests/self_description_test.py::TestSelfDescription::test_request_description_extended ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_repeated_tunnel_request ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_send_retry ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_connect_send_disconnect[False-data_endpoint_addr0-local_endpoint0] ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_connect_send_disconnect[True-None-local_endpoint1] ERROR test/io_tests/tunnel_test.py::TestUDPTunnel::test_tunnel_request_description ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat_no_answer ERROR test/io_tests/tunnel_test.py::TestTCPTunnel::test_tunnel_heartbeat_error ERROR test/management_tests/management_test.py::test_ack_timeout ERROR test/management_tests/management_test.py::test_p2p_rate_limit[0] ERROR test/management_tests/management_test.py::test_p2p_rate_limit[1] ERROR test/management_tests/procedures_test.py::test_nm_individual_address_read ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_two_devices_in_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_no_device_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_address_found ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_programming_failed ERROR test/management_tests/procedures_test.py::test_nm_individual_address_write_address_found_other_in_programming_mode ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_read ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_read_fail ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write_fail_no_response ERROR test/management_tests/procedures_test.py::test_nm_individual_address_serial_number_write_fail_wrong_address ================ 2782 passed, 3 deselected, 52 errors in 15.55s ================ E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/python-xknx-3.6.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest --no-cov -k "not test_scan_timeout and not test_start_secure_routing_knx_keys and not test_start_secure_routing_manual" dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13 make: *** [debian/rules:8: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration E: Failed autobuilding of package I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/113504 and its subdirectories python-xknx failed to build from source. removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/amd64/python-xknx_3.6.0-1.rbuild.log' removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/amd64/python-xknx_3.6.0-1.rbuild.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/unstable/amd64/python-xknx_3.6.0-1.build1.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/unstable/amd64/python-xknx_3.6.0-1.build2.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/buildinfo/unstable/amd64/python-xknx_3.6.0-1_amd64.buildinfo' removed '/var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/amd64/python-xknx_3.6.0-1.diff.gz' Wed Sep 17 18:48:00 UTC 2025 W: No second build log, what happened? Compressing the 1st log... b1/build.log: 89.6% -- replaced with stdout Wed Sep 17 18:48:00 UTC 2025 I: https://tests.reproducible-builds.org/debian/unstable/amd64/python-xknx : reproducible ➤ FTBFS INSERT 0 1 INSERT 0 1 DELETE 1 [2025-09-17 18:48:00] INFO: Starting at 2025-09-17 18:48:00.738871 [2025-09-17 18:48:00] INFO: Generating the pages of 1 package(s) [2025-09-17 18:48:00] CRITICAL: https://tests.reproducible-builds.org/debian/unstable/amd64/python-xknx didn't produce a buildlog, even though it has been built. [2025-09-17 18:48:00] INFO: Finished at 2025-09-17 18:48:00.919789, took: 0:00:00.180920 Wed Sep 17 18:48:00 UTC 2025 - successfully updated the database and updated https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/python-xknx.html [2025-09-17 18:48:01] INFO: Starting at 2025-09-17 18:48:01.215634 [2025-09-17 18:48:01] INFO: Scheduling packages in amd64/unstable [2025-09-17 18:48:01] INFO: jenkins scheduled in unstable/amd64, reason: 'reproducible ➤ FTBFS': python-xknx [2025-09-17 18:48:01] INFO: Finished at 2025-09-17 18:48:01.600568, took: 0:00:00.384937 Starting cleanup. /var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/amd64/python-xknx_3.6.0-1.rbuild.log: 89.1% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/amd64/python-xknx_3.6.0-1.rbuild.log.gz [2025-09-17 18:48:01] INFO: Starting at 2025-09-17 18:48:01.922804 [2025-09-17 18:48:02] INFO: Generating the pages of 1 package(s) [2025-09-17 18:48:02] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/unstable/amd64/python-xknx_3.6.0-1.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/amd64/python-xknx_3.6.0-1.diff.gz is missing [2025-09-17 18:48:02] INFO: Finished at 2025-09-17 18:48:02.104162, took: 0:00:00.181361 All cleanup done. Wed Sep 17 18:48:02 UTC 2025 - total duration: 0h 2m 19s. Wed Sep 17 18:48:02 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-cbM69Yr6, removing. Finished with result: success Main processes terminated with: code=exited, status=0/SUCCESS Service runtime: 2min 20.640s CPU time consumed: 3.120s Memory peak: 60.1M (swap: 0B)