Fri Apr 5 13:23:00 UTC 2024 I: starting to build python-urllib3/experimental/i386 on jenkins on '2024-04-05 13:22' Fri Apr 5 13:23:00 UTC 2024 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/i386_11/5637/console.log Fri Apr 5 13:23:00 UTC 2024 I: Downloading source for experimental/python-urllib3=2.0.7-1 --2024-04-05 13:23:01-- http://cdn-fastly.deb.debian.org/debian/pool/main/p/python-urllib3/python-urllib3_2.0.7-1.dsc Connecting to 78.137.99.97:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2646 (2.6K) [text/prs.lines.tag] Saving to: ‘python-urllib3_2.0.7-1.dsc’ 0K .. 100% 344M=0s 2024-04-05 13:23:01 (344 MB/s) - ‘python-urllib3_2.0.7-1.dsc’ saved [2646/2646] Fri Apr 5 13:23:01 UTC 2024 I: python-urllib3_2.0.7-1.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: python-urllib3 Binary: python3-urllib3 Architecture: all Version: 2.0.7-1 Maintainer: Debian Python Team Uploaders: Daniele Tricoli Homepage: https://urllib3.readthedocs.org Standards-Version: 4.6.2 Vcs-Browser: https://salsa.debian.org/python-team/packages/python-urllib3 Vcs-Git: https://salsa.debian.org/python-team/packages/python-urllib3.git Testsuite: autopkgtest Testsuite-Triggers: python3-all, python3-brotli, python3-coverage, python3-cryptography, python3-idna, python3-mock, python3-openssl, python3-pytest, python3-pytest-timeout, python3-six, python3-socks, python3-tornado, python3-trustme Build-Depends: debhelper-compat (= 13), dh-python, pybuild-plugin-pyproject, python3-all, python3-brotli , python3-coverage , python3-cryptography , python3-hatchling, python3-idna , python3-mock , python3-openssl , python3-pytest , python3-pytest-timeout , python3-socks , python3-tornado , python3-trustme Package-List: python3-urllib3 deb python optional arch=all Checksums-Sha1: f462f7171c35b6206ade5a301a49f94d4a439edf 282546 python-urllib3_2.0.7.orig.tar.gz bbc3004985ea3fe06d38e357acdf27834a86ff51 10248 python-urllib3_2.0.7-1.debian.tar.xz Checksums-Sha256: c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 282546 python-urllib3_2.0.7.orig.tar.gz 1c2995964691587349d3c0cc6416aa14b87fd91d0a128c3bc0176254c86d1dab 10248 python-urllib3_2.0.7-1.debian.tar.xz Files: 5a264ef3ae827e5842bbc80536a343dd 282546 python-urllib3_2.0.7.orig.tar.gz 23fd9f079fe300bfaa58e913859deb54 10248 python-urllib3_2.0.7-1.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQJFBAEBCgAvFiEExlrvn+W/jMvW7bAZi69SLA1szt0FAmVRW+wRHGVyaW9sQGRl Ymlhbi5vcmcACgkQi69SLA1szt0wShAAvqa3EtifH/1t437leppW9pl2WRrYvWhl 9+TnIU7uVaWGUXC4tGW1hg0YMC2/sRzklZEX3pOlcwIxqLvovjXFE5GC1mwVSlnF 0YGPred48mWuAfxyNGfLxq2izVc32J4VnCMo1th6q8P0+c6OX/0qHx1rij4JXRFd Gg1+mgmRHH/o3Yid1cXJBhlJ3EWsYfCnhUEqWeNDQpMLN4RKvczBcpsNzfYgMycK bRS4FYVgHRqY80WTiAM75sGXpYx0JUZutf81hlngSwE3WyBqEB5uvx96g5sXzeBC BgASM1iihEvlwF/p/3+JO5MtLr8YuzZH+SP29cyGZJcwhN9PC5VR+h9elQd78aK7 Q92WZn8Doc+FhI1niQGOLivI4LEz7tf3Ngq9Hzv7hHarda6XyqOnVh9aPVswLlWh AYSHdwUtP3oi23Zl0KD0IS8t0ig0L6N5yNP7eGpBzxwQSd2EPKlpyARYOY+tlcOd cps6a4WI5owIXO7pV8y8G/vwYBSpbtO1bfG2jM36ceq/S8jJ9vlgmgaBxzEr14b1 6mov2fcEHQtsRmls7jxpVcrW/h8Dp3n6vQOY/6+6GOSlhFwwzgPiiojXUxRAoFj4 xO02oim1oCt/Kip/3VxyK71svr1uzqKe4a7nRqhwH5ul6Lx5IUptDPlXJH3WuAgN gm6PpixkYoU= =+2Cf -----END PGP SIGNATURE----- Fri Apr 5 13:23:01 UTC 2024 I: Checking whether the package is not for us Fri Apr 5 13:23:01 UTC 2024 I: Starting 1st build on remote node ionos6-i386.debian.net. Fri Apr 5 13:23:01 UTC 2024 I: Preparing to do remote build '1' on ionos6-i386.debian.net. Fri Apr 5 13:42:07 UTC 2024 I: Deleting $TMPDIR on ionos6-i386.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Thu May 8 07:46:02 -12 2025 I: pbuilder-time-stamp: 1746733562 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/experimental-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: using eatmydata during job I: Copying source file I: copying [python-urllib3_2.0.7-1.dsc] I: copying [./python-urllib3_2.0.7.orig.tar.gz] I: copying [./python-urllib3_2.0.7-1.debian.tar.xz] I: Extracting source gpgv: Signature made Sun Nov 12 23:12:44 2023 gpgv: using RSA key C65AEF9FE5BF8CCBD6EDB0198BAF522C0D6CCEDD gpgv: issuer "eriol@debian.org" gpgv: Can't check signature: No public key dpkg-source: warning: cannot verify inline signature for ./python-urllib3_2.0.7-1.dsc: no acceptable signature found dpkg-source: info: extracting python-urllib3 in python-urllib3-2.0.7 dpkg-source: info: unpacking python-urllib3_2.0.7.orig.tar.gz dpkg-source: info: unpacking python-urllib3_2.0.7-1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying tests-requires-network dpkg-source: info: applying tests-mark-requires-network dpkg-source: info: applying dont-hit-evilcom dpkg-source: info: applying integration-tests-flag I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/65696/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='i386' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=22 ' DISTRIBUTION='experimental' HOME='/root' HOST_ARCH='i386' IFS=' ' INVOCATION_ID='b05ae2e64f5c4e2fa634bed6fe1ee06b' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' LD_LIBRARY_PATH='/usr/lib/libeatmydata' LD_PRELOAD='libeatmydata.so' 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='65696' 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.eLCcG9NW/pbuilderrc_K4v0 --distribution experimental --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/experimental-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.eLCcG9NW/b1 --logfile b1/build.log python-urllib3_2.0.7-1.dsc' SUDO_GID='112' SUDO_UID='107' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://85.184.249.68:3128' I: uname -a Linux ionos6-i386 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Apr 30 13:57 /bin -> usr/bin I: user script /srv/workspace/pbuilder/65696/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: i386 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), dh-python, pybuild-plugin-pyproject, python3-all, python3-brotli, python3-coverage, python3-cryptography, python3-hatchling, python3-idna, python3-mock, python3-openssl, python3-pytest, python3-pytest-timeout, python3-socks, python3-tornado, python3-trustme dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19702 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 dh-python; however: Package dh-python 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-brotli; however: Package python3-brotli is not installed. pbuilder-satisfydepends-dummy depends on python3-coverage; however: Package python3-coverage is not installed. pbuilder-satisfydepends-dummy depends on python3-cryptography; however: Package python3-cryptography is not installed. pbuilder-satisfydepends-dummy depends on python3-hatchling; however: Package python3-hatchling is not installed. pbuilder-satisfydepends-dummy depends on python3-idna; however: Package python3-idna is not installed. pbuilder-satisfydepends-dummy depends on python3-mock; however: Package python3-mock is not installed. pbuilder-satisfydepends-dummy depends on python3-openssl; however: Package python3-openssl is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-timeout; however: Package python3-pytest-timeout is not installed. pbuilder-satisfydepends-dummy depends on python3-socks; however: Package python3-socks is not installed. pbuilder-satisfydepends-dummy depends on python3-tornado; however: Package python3-tornado is not installed. pbuilder-satisfydepends-dummy depends on python3-trustme; however: Package python3-trustme 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} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libfile-stripnondeterminism-perl{a} libicu72{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libpython3-stdlib{a} libpython3.11-minimal{a} libpython3.11-stdlib{a} libpython3.12-minimal{a} libpython3.12-stdlib{a} libreadline8t64{a} libsub-override-perl{a} libtool{a} libuchardet0{a} libxml2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} po-debconf{a} pybuild-plugin-pyproject{a} python3{a} python3-all{a} python3-brotli{a} python3-build{a} python3-cffi-backend{a} python3-coverage{a} python3-cryptography{a} python3-distutils{a} python3-hatchling{a} python3-idna{a} python3-iniconfig{a} python3-installer{a} python3-lib2to3{a} python3-minimal{a} python3-mock{a} python3-openssl{a} python3-packaging{a} python3-pathspec{a} python3-pkg-resources{a} python3-pluggy{a} python3-pyproject-hooks{a} python3-pytest{a} python3-pytest-timeout{a} python3-setuptools{a} python3-socks{a} python3-toml{a} python3-tornado{a} python3-trove-classifiers{a} python3-trustme{a} python3-wheel{a} python3.11{a} python3.11-minimal{a} python3.12{a} python3.12-minimal{a} readline-common{a} sensible-utils{a} tzdata{a} The following packages are RECOMMENDED but will NOT be installed: curl libarchive-cpio-perl libltdl-dev libmail-sendmail-perl lynx python3-pygments wget 0 packages upgraded, 79 newly installed, 0 to remove and 0 not upgraded. Need to get 36.3 MB of archives. After unpacking 143 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main i386 libpython3.11-minimal i386 3.11.8-3+b2 [817 kB] Get: 2 http://deb.debian.org/debian unstable/main i386 libexpat1 i386 2.6.2-1 [107 kB] Get: 3 http://deb.debian.org/debian unstable/main i386 python3.11-minimal i386 3.11.8-3+b2 [1917 kB] Get: 4 http://deb.debian.org/debian unstable/main i386 python3-minimal i386 3.11.8-1 [26.3 kB] Get: 5 http://deb.debian.org/debian unstable/main i386 media-types all 10.1.0 [26.9 kB] Get: 6 http://deb.debian.org/debian unstable/main i386 netbase all 6.4 [12.8 kB] Get: 7 http://deb.debian.org/debian unstable/main i386 tzdata all 2024a-1 [255 kB] Get: 8 http://deb.debian.org/debian unstable/main i386 readline-common all 8.2-4 [69.3 kB] Get: 9 http://deb.debian.org/debian unstable/main i386 libreadline8t64 i386 8.2-4 [171 kB] Get: 10 http://deb.debian.org/debian unstable/main i386 libpython3.11-stdlib i386 3.11.8-3+b2 [1794 kB] Get: 11 http://deb.debian.org/debian unstable/main i386 python3.11 i386 3.11.8-3+b2 [597 kB] Get: 12 http://deb.debian.org/debian unstable/main i386 libpython3-stdlib i386 3.11.8-1 [9336 B] Get: 13 http://deb.debian.org/debian unstable/main i386 python3 i386 3.11.8-1 [27.4 kB] Get: 14 http://deb.debian.org/debian unstable/main i386 libpython3.12-minimal i386 3.12.2-5 [809 kB] Get: 15 http://deb.debian.org/debian unstable/main i386 python3.12-minimal i386 3.12.2-5 [2221 kB] Get: 16 http://deb.debian.org/debian unstable/main i386 sensible-utils all 0.0.22 [22.4 kB] Get: 17 http://deb.debian.org/debian unstable/main i386 openssl i386 3.2.1-3 [1364 kB] Get: 18 http://deb.debian.org/debian unstable/main i386 ca-certificates all 20240203 [158 kB] Get: 19 http://deb.debian.org/debian unstable/main i386 libmagic-mgc i386 1:5.45-3 [314 kB] Get: 20 http://deb.debian.org/debian unstable/main i386 libmagic1t64 i386 1:5.45-3 [114 kB] Get: 21 http://deb.debian.org/debian unstable/main i386 file i386 1:5.45-3 [42.9 kB] Get: 22 http://deb.debian.org/debian unstable/main i386 gettext-base i386 0.21-14+b1 [162 kB] Get: 23 http://deb.debian.org/debian unstable/main i386 libuchardet0 i386 0.0.8-1+b1 [69.1 kB] Get: 24 http://deb.debian.org/debian unstable/main i386 groff-base i386 1.23.0-3+b1 [1195 kB] Get: 25 http://deb.debian.org/debian unstable/main i386 bsdextrautils i386 2.39.3-11 [93.7 kB] Get: 26 http://deb.debian.org/debian unstable/main i386 libpipeline1 i386 1.5.7-2 [39.7 kB] Get: 27 http://deb.debian.org/debian unstable/main i386 man-db i386 2.12.0-4 [1418 kB] Get: 28 http://deb.debian.org/debian unstable/main i386 m4 i386 1.4.19-4 [293 kB] Get: 29 http://deb.debian.org/debian unstable/main i386 autoconf all 2.71-3 [332 kB] Get: 30 http://deb.debian.org/debian unstable/main i386 autotools-dev all 20220109.1 [51.6 kB] Get: 31 http://deb.debian.org/debian unstable/main i386 automake all 1:1.16.5-1.3 [823 kB] Get: 32 http://deb.debian.org/debian unstable/main i386 autopoint all 0.21-14 [496 kB] Get: 33 http://deb.debian.org/debian unstable/main i386 libdebhelper-perl all 13.15.3 [88.0 kB] Get: 34 http://deb.debian.org/debian unstable/main i386 libtool all 2.4.7-7 [517 kB] Get: 35 http://deb.debian.org/debian unstable/main i386 dh-autoreconf all 20 [17.1 kB] Get: 36 http://deb.debian.org/debian unstable/main i386 libarchive-zip-perl all 1.68-1 [104 kB] Get: 37 http://deb.debian.org/debian unstable/main i386 libsub-override-perl all 0.10-1 [10.6 kB] Get: 38 http://deb.debian.org/debian unstable/main i386 libfile-stripnondeterminism-perl all 1.13.1-1 [19.4 kB] Get: 39 http://deb.debian.org/debian unstable/main i386 dh-strip-nondeterminism all 1.13.1-1 [8620 B] Get: 40 http://deb.debian.org/debian unstable/main i386 libelf1t64 i386 0.191-1 [194 kB] Get: 41 http://deb.debian.org/debian unstable/main i386 dwz i386 0.15-1+b1 [116 kB] Get: 42 http://deb.debian.org/debian unstable/main i386 libicu72 i386 72.1-4+b1 [9549 kB] Get: 43 http://deb.debian.org/debian unstable/main i386 libxml2 i386 2.9.14+dfsg-1.3+b2 [727 kB] Get: 44 http://deb.debian.org/debian unstable/main i386 gettext i386 0.21-14+b1 [1311 kB] Get: 45 http://deb.debian.org/debian unstable/main i386 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 46 http://deb.debian.org/debian unstable/main i386 po-debconf all 1.0.21+nmu1 [248 kB] Get: 47 http://deb.debian.org/debian unstable/main i386 debhelper all 13.15.3 [901 kB] Get: 48 http://deb.debian.org/debian unstable/main i386 python3-pkg-resources all 68.1.2-2 [241 kB] Get: 49 http://deb.debian.org/debian unstable/main i386 python3-lib2to3 all 3.12.2-3 [77.6 kB] Get: 50 http://deb.debian.org/debian unstable/main i386 python3-distutils all 3.12.2-3 [131 kB] Get: 51 http://deb.debian.org/debian unstable/main i386 python3-setuptools all 68.1.2-2 [468 kB] Get: 52 http://deb.debian.org/debian unstable/main i386 dh-python all 6.20240401 [107 kB] Get: 53 http://deb.debian.org/debian unstable/main i386 libpython3.12-stdlib i386 3.12.2-5 [1944 kB] Get: 54 http://deb.debian.org/debian unstable/main i386 python3-packaging all 24.0-1 [45.5 kB] Get: 55 http://deb.debian.org/debian unstable/main i386 python3-pyproject-hooks all 1.0.0-2 [10.6 kB] Get: 56 http://deb.debian.org/debian unstable/main i386 python3-toml all 0.10.2-1 [16.2 kB] Get: 57 http://deb.debian.org/debian unstable/main i386 python3-wheel all 0.43.0-1 [52.5 kB] Get: 58 http://deb.debian.org/debian unstable/main i386 python3-build all 1.1.1-1 [32.5 kB] Get: 59 http://deb.debian.org/debian unstable/main i386 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Get: 60 http://deb.debian.org/debian unstable/main i386 pybuild-plugin-pyproject all 6.20240401 [11.0 kB] Get: 61 http://deb.debian.org/debian unstable/main i386 python3.12 i386 3.12.2-5 [653 kB] Get: 62 http://deb.debian.org/debian unstable/main i386 python3-all i386 3.11.8-1 [1056 B] Get: 63 http://deb.debian.org/debian unstable/main i386 python3-brotli i386 1.1.0-2+b3 [323 kB] Get: 64 http://deb.debian.org/debian unstable/main i386 python3-cffi-backend i386 1.16.0-2+b1 [114 kB] Get: 65 http://deb.debian.org/debian unstable/main i386 python3-coverage i386 7.2.7+dfsg1-1+b1 [170 kB] Get: 66 http://deb.debian.org/debian unstable/main i386 python3-cryptography i386 42.0.5-2 [1272 kB] Get: 67 http://deb.debian.org/debian unstable/main i386 python3-pathspec all 0.12.1-1 [28.1 kB] Get: 68 http://deb.debian.org/debian unstable/main i386 python3-pluggy all 1.4.0-1 [26.2 kB] Get: 69 http://deb.debian.org/debian unstable/main i386 python3-trove-classifiers all 2024.1.31-1 [9968 B] Get: 70 http://deb.debian.org/debian unstable/main i386 python3-hatchling all 1.22.4-1 [52.4 kB] Get: 71 http://deb.debian.org/debian unstable/main i386 python3-idna all 3.6-2 [37.0 kB] Get: 72 http://deb.debian.org/debian unstable/main i386 python3-iniconfig all 1.1.1-2 [6396 B] Get: 73 http://deb.debian.org/debian unstable/main i386 python3-mock all 5.1.0-1 [70.2 kB] Get: 74 http://deb.debian.org/debian unstable/main i386 python3-openssl all 24.1.0-1 [51.9 kB] Get: 75 http://deb.debian.org/debian unstable/main i386 python3-pytest all 8.1.1-1 [245 kB] Get: 76 http://deb.debian.org/debian unstable/main i386 python3-pytest-timeout all 2.3.1-1 [21.9 kB] Get: 77 http://deb.debian.org/debian unstable/main i386 python3-socks all 1.7.1+dfsg-1 [23.3 kB] Get: 78 http://deb.debian.org/debian unstable/main i386 python3-tornado i386 6.4.0-1 [347 kB] Get: 79 http://deb.debian.org/debian unstable/main i386 python3-trustme all 0.9.0-1.1 [12.1 kB] Fetched 36.3 MB in 0s (85.4 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:i386. (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 ... 19702 files and directories currently installed.) Preparing to unpack .../libpython3.11-minimal_3.11.8-3+b2_i386.deb ... Unpacking libpython3.11-minimal:i386 (3.11.8-3+b2) ... Selecting previously unselected package libexpat1:i386. Preparing to unpack .../libexpat1_2.6.2-1_i386.deb ... Unpacking libexpat1:i386 (2.6.2-1) ... Selecting previously unselected package python3.11-minimal. Preparing to unpack .../python3.11-minimal_3.11.8-3+b2_i386.deb ... Unpacking python3.11-minimal (3.11.8-3+b2) ... Setting up libpython3.11-minimal:i386 (3.11.8-3+b2) ... Setting up libexpat1:i386 (2.6.2-1) ... Setting up python3.11-minimal (3.11.8-3+b2) ... 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 ... 20020 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.11.8-1_i386.deb ... Unpacking python3-minimal (3.11.8-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_10.1.0_all.deb ... Unpacking media-types (10.1.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.4_all.deb ... Unpacking netbase (6.4) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2024a-1_all.deb ... Unpacking tzdata (2024a-1) ... Selecting previously unselected package readline-common. Preparing to unpack .../4-readline-common_8.2-4_all.deb ... Unpacking readline-common (8.2-4) ... Selecting previously unselected package libreadline8t64:i386. Preparing to unpack .../5-libreadline8t64_8.2-4_i386.deb ... Adding 'diversion of /lib/i386-linux-gnu/libhistory.so.8 to /lib/i386-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/i386-linux-gnu/libhistory.so.8.2 to /lib/i386-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/i386-linux-gnu/libreadline.so.8 to /lib/i386-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/i386-linux-gnu/libreadline.so.8.2 to /lib/i386-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:i386 (8.2-4) ... Selecting previously unselected package libpython3.11-stdlib:i386. Preparing to unpack .../6-libpython3.11-stdlib_3.11.8-3+b2_i386.deb ... Unpacking libpython3.11-stdlib:i386 (3.11.8-3+b2) ... Selecting previously unselected package python3.11. Preparing to unpack .../7-python3.11_3.11.8-3+b2_i386.deb ... Unpacking python3.11 (3.11.8-3+b2) ... Selecting previously unselected package libpython3-stdlib:i386. Preparing to unpack .../8-libpython3-stdlib_3.11.8-1_i386.deb ... Unpacking libpython3-stdlib:i386 (3.11.8-1) ... Setting up python3-minimal (3.11.8-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 ... 21014 files and directories currently installed.) Preparing to unpack .../00-python3_3.11.8-1_i386.deb ... Unpacking python3 (3.11.8-1) ... Selecting previously unselected package libpython3.12-minimal:i386. Preparing to unpack .../01-libpython3.12-minimal_3.12.2-5_i386.deb ... Unpacking libpython3.12-minimal:i386 (3.12.2-5) ... Selecting previously unselected package python3.12-minimal. Preparing to unpack .../02-python3.12-minimal_3.12.2-5_i386.deb ... Unpacking python3.12-minimal (3.12.2-5) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../03-sensible-utils_0.0.22_all.deb ... Unpacking sensible-utils (0.0.22) ... Selecting previously unselected package openssl. Preparing to unpack .../04-openssl_3.2.1-3_i386.deb ... Unpacking openssl (3.2.1-3) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../05-ca-certificates_20240203_all.deb ... Unpacking ca-certificates (20240203) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../06-libmagic-mgc_1%3a5.45-3_i386.deb ... Unpacking libmagic-mgc (1:5.45-3) ... Selecting previously unselected package libmagic1t64:i386. Preparing to unpack .../07-libmagic1t64_1%3a5.45-3_i386.deb ... Unpacking libmagic1t64:i386 (1:5.45-3) ... Selecting previously unselected package file. Preparing to unpack .../08-file_1%3a5.45-3_i386.deb ... Unpacking file (1:5.45-3) ... Selecting previously unselected package gettext-base. Preparing to unpack .../09-gettext-base_0.21-14+b1_i386.deb ... Unpacking gettext-base (0.21-14+b1) ... Selecting previously unselected package libuchardet0:i386. Preparing to unpack .../10-libuchardet0_0.0.8-1+b1_i386.deb ... Unpacking libuchardet0:i386 (0.0.8-1+b1) ... Selecting previously unselected package groff-base. Preparing to unpack .../11-groff-base_1.23.0-3+b1_i386.deb ... Unpacking groff-base (1.23.0-3+b1) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../12-bsdextrautils_2.39.3-11_i386.deb ... Unpacking bsdextrautils (2.39.3-11) ... Selecting previously unselected package libpipeline1:i386. Preparing to unpack .../13-libpipeline1_1.5.7-2_i386.deb ... Unpacking libpipeline1:i386 (1.5.7-2) ... Selecting previously unselected package man-db. Preparing to unpack .../14-man-db_2.12.0-4_i386.deb ... Unpacking man-db (2.12.0-4) ... Selecting previously unselected package m4. Preparing to unpack .../15-m4_1.4.19-4_i386.deb ... Unpacking m4 (1.4.19-4) ... Selecting previously unselected package autoconf. Preparing to unpack .../16-autoconf_2.71-3_all.deb ... Unpacking autoconf (2.71-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../17-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../18-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package autopoint. Preparing to unpack .../19-autopoint_0.21-14_all.deb ... Unpacking autopoint (0.21-14) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../20-libdebhelper-perl_13.15.3_all.deb ... Unpacking libdebhelper-perl (13.15.3) ... Selecting previously unselected package libtool. Preparing to unpack .../21-libtool_2.4.7-7_all.deb ... Unpacking libtool (2.4.7-7) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../22-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../23-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libsub-override-perl. Preparing to unpack .../24-libsub-override-perl_0.10-1_all.deb ... Unpacking libsub-override-perl (0.10-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../25-libfile-stripnondeterminism-perl_1.13.1-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.13.1-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../26-dh-strip-nondeterminism_1.13.1-1_all.deb ... Unpacking dh-strip-nondeterminism (1.13.1-1) ... Selecting previously unselected package libelf1t64:i386. Preparing to unpack .../27-libelf1t64_0.191-1_i386.deb ... Unpacking libelf1t64:i386 (0.191-1) ... Selecting previously unselected package dwz. Preparing to unpack .../28-dwz_0.15-1+b1_i386.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libicu72:i386. Preparing to unpack .../29-libicu72_72.1-4+b1_i386.deb ... Unpacking libicu72:i386 (72.1-4+b1) ... Selecting previously unselected package libxml2:i386. Preparing to unpack .../30-libxml2_2.9.14+dfsg-1.3+b2_i386.deb ... Unpacking libxml2:i386 (2.9.14+dfsg-1.3+b2) ... Selecting previously unselected package gettext. Preparing to unpack .../31-gettext_0.21-14+b1_i386.deb ... Unpacking gettext (0.21-14+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../32-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 .../33-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../34-debhelper_13.15.3_all.deb ... Unpacking debhelper (13.15.3) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../35-python3-pkg-resources_68.1.2-2_all.deb ... Unpacking python3-pkg-resources (68.1.2-2) ... Selecting previously unselected package python3-lib2to3. Preparing to unpack .../36-python3-lib2to3_3.12.2-3_all.deb ... Unpacking python3-lib2to3 (3.12.2-3) ... Selecting previously unselected package python3-distutils. Preparing to unpack .../37-python3-distutils_3.12.2-3_all.deb ... Unpacking python3-distutils (3.12.2-3) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../38-python3-setuptools_68.1.2-2_all.deb ... Unpacking python3-setuptools (68.1.2-2) ... Selecting previously unselected package dh-python. Preparing to unpack .../39-dh-python_6.20240401_all.deb ... Unpacking dh-python (6.20240401) ... Selecting previously unselected package libpython3.12-stdlib:i386. Preparing to unpack .../40-libpython3.12-stdlib_3.12.2-5_i386.deb ... Unpacking libpython3.12-stdlib:i386 (3.12.2-5) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../41-python3-packaging_24.0-1_all.deb ... Unpacking python3-packaging (24.0-1) ... Selecting previously unselected package python3-pyproject-hooks. Preparing to unpack .../42-python3-pyproject-hooks_1.0.0-2_all.deb ... Unpacking python3-pyproject-hooks (1.0.0-2) ... Selecting previously unselected package python3-toml. Preparing to unpack .../43-python3-toml_0.10.2-1_all.deb ... Unpacking python3-toml (0.10.2-1) ... Selecting previously unselected package python3-wheel. Preparing to unpack .../44-python3-wheel_0.43.0-1_all.deb ... Unpacking python3-wheel (0.43.0-1) ... Selecting previously unselected package python3-build. Preparing to unpack .../45-python3-build_1.1.1-1_all.deb ... Unpacking python3-build (1.1.1-1) ... Selecting previously unselected package python3-installer. Preparing to unpack .../46-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 .../47-pybuild-plugin-pyproject_6.20240401_all.deb ... Unpacking pybuild-plugin-pyproject (6.20240401) ... Selecting previously unselected package python3.12. Preparing to unpack .../48-python3.12_3.12.2-5_i386.deb ... Unpacking python3.12 (3.12.2-5) ... Selecting previously unselected package python3-all. Preparing to unpack .../49-python3-all_3.11.8-1_i386.deb ... Unpacking python3-all (3.11.8-1) ... Selecting previously unselected package python3-brotli. Preparing to unpack .../50-python3-brotli_1.1.0-2+b3_i386.deb ... Unpacking python3-brotli (1.1.0-2+b3) ... Selecting previously unselected package python3-cffi-backend:i386. Preparing to unpack .../51-python3-cffi-backend_1.16.0-2+b1_i386.deb ... Unpacking python3-cffi-backend:i386 (1.16.0-2+b1) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../52-python3-coverage_7.2.7+dfsg1-1+b1_i386.deb ... Unpacking python3-coverage (7.2.7+dfsg1-1+b1) ... Selecting previously unselected package python3-cryptography. Preparing to unpack .../53-python3-cryptography_42.0.5-2_i386.deb ... Unpacking python3-cryptography (42.0.5-2) ... Selecting previously unselected package python3-pathspec. Preparing to unpack .../54-python3-pathspec_0.12.1-1_all.deb ... Unpacking python3-pathspec (0.12.1-1) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../55-python3-pluggy_1.4.0-1_all.deb ... Unpacking python3-pluggy (1.4.0-1) ... Selecting previously unselected package python3-trove-classifiers. Preparing to unpack .../56-python3-trove-classifiers_2024.1.31-1_all.deb ... Unpacking python3-trove-classifiers (2024.1.31-1) ... Selecting previously unselected package python3-hatchling. Preparing to unpack .../57-python3-hatchling_1.22.4-1_all.deb ... Unpacking python3-hatchling (1.22.4-1) ... Selecting previously unselected package python3-idna. Preparing to unpack .../58-python3-idna_3.6-2_all.deb ... Unpacking python3-idna (3.6-2) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../59-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-mock. Preparing to unpack .../60-python3-mock_5.1.0-1_all.deb ... Unpacking python3-mock (5.1.0-1) ... Selecting previously unselected package python3-openssl. Preparing to unpack .../61-python3-openssl_24.1.0-1_all.deb ... Unpacking python3-openssl (24.1.0-1) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../62-python3-pytest_8.1.1-1_all.deb ... Unpacking python3-pytest (8.1.1-1) ... Selecting previously unselected package python3-pytest-timeout. Preparing to unpack .../63-python3-pytest-timeout_2.3.1-1_all.deb ... Unpacking python3-pytest-timeout (2.3.1-1) ... Selecting previously unselected package python3-socks. Preparing to unpack .../64-python3-socks_1.7.1+dfsg-1_all.deb ... Unpacking python3-socks (1.7.1+dfsg-1) ... Selecting previously unselected package python3-tornado. Preparing to unpack .../65-python3-tornado_6.4.0-1_i386.deb ... Unpacking python3-tornado (6.4.0-1) ... Selecting previously unselected package python3-trustme. Preparing to unpack .../66-python3-trustme_0.9.0-1.1_all.deb ... Unpacking python3-trustme (0.9.0-1.1) ... Setting up media-types (10.1.0) ... Setting up libpipeline1:i386 (1.5.7-2) ... Setting up libicu72:i386 (72.1-4+b1) ... Setting up bsdextrautils (2.39.3-11) ... Setting up libmagic-mgc (1:5.45-3) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libdebhelper-perl (13.15.3) ... Setting up libmagic1t64:i386 (1:5.45-3) ... Setting up libpython3.12-minimal:i386 (3.12.2-5) ... Setting up gettext-base (0.21-14+b1) ... Setting up m4 (1.4.19-4) ... Setting up file (1:5.45-3) ... Setting up libelf1t64:i386 (0.191-1) ... Setting up tzdata (2024a-1) ... Current default time zone: 'Etc/UTC' Local time is now: Thu May 8 19:46:25 UTC 2025. Universal Time is now: Thu May 8 19:46:25 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... Setting up autopoint (0.21-14) ... Setting up autoconf (2.71-3) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.22) ... Setting up libuchardet0:i386 (0.0.8-1+b1) ... Setting up libsub-override-perl (0.10-1) ... Setting up netbase (6.4) ... Setting up openssl (3.2.1-3) ... Setting up readline-common (8.2-4) ... Setting up libxml2:i386 (2.9.14+dfsg-1.3+b2) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.13.1-1) ... Setting up python3.12-minimal (3.12.2-5) ... Setting up gettext (0.21-14+b1) ... Setting up libtool (2.4.7-7) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up ca-certificates (20240203) ... Updating certificates in /etc/ssl/certs... 146 added, 0 removed; done. Setting up libreadline8t64:i386 (8.2-4) ... Setting up dh-strip-nondeterminism (1.13.1-1) ... Setting up groff-base (1.23.0-3+b1) ... Setting up libpython3.12-stdlib:i386 (3.12.2-5) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpython3.11-stdlib:i386 (3.11.8-3+b2) ... Setting up python3.12 (3.12.2-5) ... Setting up man-db (2.12.0-4) ... Not building database; man-db/auto-update is not 'true'. Setting up libpython3-stdlib:i386 (3.11.8-1) ... Setting up python3.11 (3.11.8-3+b2) ... Setting up debhelper (13.15.3) ... Setting up python3 (3.11.8-1) ... Setting up python3-wheel (0.43.0-1) ... Setting up python3-mock (5.1.0-1) ... Setting up python3-packaging (24.0-1) ... Setting up python3-pyproject-hooks (1.0.0-2) ... Setting up python3-brotli (1.1.0-2+b3) ... Setting up python3-idna (3.6-2) ... Setting up python3-toml (0.10.2-1) ... Setting up python3-installer (0.7.0+dfsg1-3) ... Setting up python3-pluggy (1.4.0-1) ... Setting up python3-trove-classifiers (2024.1.31-1) ... Setting up python3-build (1.1.1-1) ... Setting up python3-pathspec (0.12.1-1) ... Setting up python3-lib2to3 (3.12.2-3) ... Setting up python3-cffi-backend:i386 (1.16.0-2+b1) ... Setting up python3-pkg-resources (68.1.2-2) ... Setting up python3-distutils (3.12.2-3) ... python3.12: can't get files for byte-compilation Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-tornado (6.4.0-1) ... Setting up python3-setuptools (68.1.2-2) ... Setting up python3-socks (1.7.1+dfsg-1) ... Setting up python3-pytest (8.1.1-1) ... Setting up python3-all (3.11.8-1) ... Setting up python3-coverage (7.2.7+dfsg1-1+b1) ... Setting up python3-cryptography (42.0.5-2) ... Setting up python3-hatchling (1.22.4-1) ... Setting up dh-python (6.20240401) ... Setting up python3-pytest-timeout (2.3.1-1) ... Setting up pybuild-plugin-pyproject (6.20240401) ... Setting up python3-openssl (24.1.0-1) ... Setting up python3-trustme (0.9.0-1.1) ... Processing triggers for libc-bin (2.37-15.1) ... Processing triggers for ca-certificates (20240203) ... 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 I: Building the package I: Running cd /build/reproducible-path/python-urllib3-2.0.7/ && 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-urllib3_2.0.7-1_source.changes dpkg-buildpackage: info: source package python-urllib3 dpkg-buildpackage: info: source version 2.0.7-1 dpkg-buildpackage: info: source distribution experimental dpkg-buildpackage: info: source changed by Daniele Tricoli dpkg-source --before-build . dpkg-buildpackage: info: host architecture i386 debian/rules clean dh clean --with python3 --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild debian/rules override_dh_clean make[1]: Entering directory '/build/reproducible-path/python-urllib3-2.0.7' dh_clean find . -type d -name .pytest_cache -exec rm -rf {} + make[1]: Leaving directory '/build/reproducible-path/python-urllib3-2.0.7' debian/rules binary dh binary --with python3 --buildsystem=pybuild 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.12 with "build" module I: pybuild base:311: python3.12 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3 * Building wheel... Successfully built urllib3-2.0.7-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.12 with "installer" module I: pybuild plugin_pyproject:129: Building wheel for python3.11 with "build" module I: pybuild base:311: python3.11 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3 * Building wheel... Successfully built urllib3-2.0.7-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.11 with "installer" module dh_auto_test -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build; python3.12 -m pytest -k "not requires_network" ============================= test session starts ============================== platform linux -- Python 3.12.2, pytest-8.1.1, pluggy-1.4.0 rootdir: /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build configfile: pyproject.toml plugins: timeout-2.3.1 collected 2307 items / 44 deselected / 2263 selected test/contrib/test_pyopenssl.py ......................................... [ 1%] .................ssssssssssssss.sssssssss..ssssss...sssssssssss.s.ssssss [ 4%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 8%] ssssssssssssssssssss.s........................................s......s.. [ 11%] ................................s.....s....s.........................F.. [ 14%] .....sss.... [ 15%] test/contrib/test_pyopenssl_dependencies.py .. [ 15%] test/contrib/test_securetransport.py sssssssssssssssssssssssssssssssssss [ 16%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 19%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 23%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 26%] sss [ 26%] test/contrib/test_socks.py ................... [ 27%] test/test_collections.py ............................................. [ 29%] test/test_compatibility.py . [ 29%] test/test_connection.py .....................F....... [ 30%] test/test_connectionpool.py ............................................ [ 32%] .............................. [ 33%] test/test_exceptions.py .............. [ 34%] test/test_fields.py .................... [ 35%] test/test_filepost.py ......... [ 35%] test/test_no_ssl.py .. [ 35%] test/test_poolmanager.py s.................................... [ 37%] test/test_proxymanager.py ...... [ 37%] test/test_queue_monkeypatch.py . [ 37%] test/test_response.py ..........................sssssss................. [ 39%] .......................................... [ 41%] test/test_retry.py ..................................................... [ 44%] ........ [ 44%] test/test_ssl.py .................................. [ 46%] test/test_ssltransport.py ................. [ 46%] test/test_util.py ...................................................... [ 49%] ........................................................................ [ 52%] ........................................................................ [ 55%] .........................................s.ss..s.ss..................... [ 58%] .................................................................. [ 61%] test/test_wait.py ............. [ 62%] test/with_dummyserver/test_chunked_transfer.py ................. [ 62%] test/with_dummyserver/test_connection.py ........ [ 63%] test/with_dummyserver/test_connectionpool.py ........................... [ 64%] ........................................................................ [ 67%] ........................................................................ [ 70%] ........................................................................ [ 74%] ........................................................................ [ 77%] .................................................... [ 79%] test/with_dummyserver/test_https.py ssssssssssssss.sssssssss..ssssss...s [ 81%] ssssssssss.sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 84%] ssssssssssssssssssssssssssssssssssss.s.................................. [ 87%] .............s..................................s..........s..s..s.....s [ 90%] s...ss [ 90%] test/with_dummyserver/test_no_ssl.py .. [ 90%] test/with_dummyserver/test_poolmanager.py .............................. [ 92%] ................s [ 93%] test/with_dummyserver/test_proxy_poolmanager.py ....s................... [ 94%] ..s....s..s...... [ 94%] test/with_dummyserver/test_socketlevel.py .............................. [ 96%] ..FFF.......sss......s......................................s.s.s....... [ 99%] ....F......... [100%] =================================== FAILURES =================================== ______________ TestSocketSSL.test_ssl_failure_midway_through_conn ______________ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: > return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] urllib3/contrib/pyopenssl.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/OpenSSL/SSL.py:2099: in recv_into self._raise_ssl_error(self._ssl, result) /usr/lib/python3/dist-packages/OpenSSL/SSL.py:1834: in _raise_ssl_error _openssl_assert( /usr/lib/python3/dist-packages/OpenSSL/_util.py:71: in openssl_assert exception_from_error_queue(error) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ exception_type = def exception_from_error_queue(exception_type: Type[Exception]) -> NoReturn: """ Convert an OpenSSL library failure into a Python exception. When a call to the native OpenSSL library fails, this is usually signalled by the return value, and an error code is stored in an error queue associated with the current thread. The err library provides functions to obtain these error codes and textual error messages. """ errors = [] while True: error = lib.ERR_get_error() if error == 0: break errors.append( ( text(lib.ERR_lib_error_string(error)), text(lib.ERR_func_error_string(error)), text(lib.ERR_reason_error_string(error)), ) ) > raise exception_type(errors) E OpenSSL.SSL.Error: [('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')] /usr/lib/python3/dist-packages/OpenSSL/_util.py:57: Error The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None, headers = {} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = True, assert_same_host = True, timeout = <_TYPE_DEFAULT.token: -1> pool_timeout = None, release_conn = True, chunked = False, body_pos = None preload_content = True, decode_content = True, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) urllib3/connectionpool.py:791: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.12/http/client.py:1428: in getresponse response.begin() /usr/lib/python3.12/http/client.py:331: in begin version, status, reason = self._read_status() /usr/lib/python3.12/http/client.py:292: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.12/socket.py:707: in readinto return self._sock.recv_into(b) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] except OpenSSL.SSL.SysCallError as e: if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): return 0 else: raise OSError(e.args[0], str(e)) from e except OpenSSL.SSL.ZeroReturnError: if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: return 0 else: raise except OpenSSL.SSL.WantReadError as e: if not util.wait_for_read(self.socket, self.socket.gettimeout()): raise timeout("The read operation timed out") from e else: return self.recv_into(*args, **kwargs) # TLS 1.3 post-handshake authentication except OpenSSL.SSL.Error as e: > raise ssl.SSLError(f"read error: {e!r}") from e E ssl.SSLError: ("read error: Error([('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')])",) urllib3/contrib/pyopenssl.py:345: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): > pool.request("GET", "/", retries=False) test/with_dummyserver/test_socketlevel.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/_request_methods.py:110: in request return self.request_encode_url( urllib3/_request_methods.py:143: in request_encode_url return self.urlopen(method, url, **extra_kw) urllib3/connectionpool.py:845: in urlopen retries = retries.increment( urllib3/util/retry.py:445: in increment raise reraise(type(error), error, _stacktrace) urllib3/util/util.py:38: in reraise raise value.with_traceback(tb) urllib3/connectionpool.py:791: in urlopen response = self._make_request( urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.12/http/client.py:1428: in getresponse response.begin() /usr/lib/python3.12/http/client.py:331: in begin version, status, reason = self._read_status() /usr/lib/python3.12/http/client.py:292: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.12/socket.py:707: in readinto return self._sock.recv_into(b) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] except OpenSSL.SSL.SysCallError as e: if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): return 0 else: raise OSError(e.args[0], str(e)) from e except OpenSSL.SSL.ZeroReturnError: if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: return 0 else: raise except OpenSSL.SSL.WantReadError as e: if not util.wait_for_read(self.socket, self.socket.gettimeout()): raise timeout("The read operation timed out") from e else: return self.recv_into(*args, **kwargs) # TLS 1.3 post-handshake authentication except OpenSSL.SSL.Error as e: > raise ssl.SSLError(f"read error: {e!r}") from e E urllib3.exceptions.SSLError: ("read error: Error([('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')])",) urllib3/contrib/pyopenssl.py:345: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: > with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): E AssertionError: Regex pattern did not match. E Regex: '(wrong version number|record overflow)' E Input: '("read error: Error([(\'SSL routines\', \'\', \'packet length too long\'), (\'SSL routines\', \'\', \'record layer failure\')])",)' test/with_dummyserver/test_socketlevel.py:1313: AssertionError ------------------------------ Captured log call ------------------------------- DEBUG urllib3.util.retry:retry.py:282 Converted retries value: False -> Retry(total=False, connect=None, read=None, redirect=0, status=None) DEBUG urllib3.connectionpool:connectionpool.py:1053 Starting new HTTPS connection (1): localhost:40525 _______________________ TestConnection.test_recent_date ________________________ self = def test_recent_date(self) -> None: # This test is to make sure that the RECENT_DATE value # doesn't get too far behind what the current date is. # When this test fails update urllib3.connection.RECENT_DATE # according to the rules defined in that file. two_years = datetime.timedelta(days=365 * 2) > assert RECENT_DATE > (datetime.datetime.today() - two_years).date() E AssertionError: assert datetime.date(2022, 1, 1) > datetime.date(2023, 5, 9) E + where datetime.date(2023, 5, 9) = () E + where = (datetime.datetime(2025, 5, 8, 7, 47, 18, 72250) - datetime.timedelta(days=730)).date E + where datetime.datetime(2025, 5, 8, 7, 47, 18, 72250) = () E + where = .today E + where = datetime.datetime test/test_connection.py:206: AssertionError ____ TestProxyManager.test_https_proxymanager_connected_to_http_proxy[http] ____ self = target_scheme = 'http' @pytest.mark.parametrize("target_scheme", ["http", "https"]) def test_https_proxymanager_connected_to_http_proxy( self, target_scheme: str ) -> None: errored = Event() def http_socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock.send(b"HTTP/1.0 501 Not Implemented\r\nConnection: close\r\n\r\n") errored.wait() sock.close() self._start_server(http_socket_handler) base_url = f"https://{self.host}:{self.port}" with ProxyManager(base_url, cert_reqs="NONE") as proxy: with pytest.raises(MaxRetryError) as e: proxy.request("GET", f"{target_scheme}://example.com", retries=0) errored.set() # Avoid a ConnectionAbortedError on Windows. assert type(e.value.reason) == ProxyError > assert "Your proxy appears to only use HTTP and not HTTPS" in str( e.value.reason ) E assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" E + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))) E + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))) = MaxRetryError("HTTPSConnectionPool(host='localhost', port=37541): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))").reason E + where MaxRetryError("HTTPSConnectionPool(host='localhost', port=37541): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))") = .value test/with_dummyserver/test_socketlevel.py:1278: AssertionError ___ TestProxyManager.test_https_proxymanager_connected_to_http_proxy[https] ____ self = target_scheme = 'https' @pytest.mark.parametrize("target_scheme", ["http", "https"]) def test_https_proxymanager_connected_to_http_proxy( self, target_scheme: str ) -> None: errored = Event() def http_socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock.send(b"HTTP/1.0 501 Not Implemented\r\nConnection: close\r\n\r\n") errored.wait() sock.close() self._start_server(http_socket_handler) base_url = f"https://{self.host}:{self.port}" with ProxyManager(base_url, cert_reqs="NONE") as proxy: with pytest.raises(MaxRetryError) as e: proxy.request("GET", f"{target_scheme}://example.com", retries=0) errored.set() # Avoid a ConnectionAbortedError on Windows. assert type(e.value.reason) == ProxyError > assert "Your proxy appears to only use HTTP and not HTTPS" in str( e.value.reason ) E assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" E + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))) E + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))) = MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))").reason E + where MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))") = .value test/with_dummyserver/test_socketlevel.py:1278: AssertionError _________________ TestSSL.test_ssl_failure_midway_through_conn _________________ self = method = 'GET', url = '/', body = None, headers = {} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = True, assert_same_host = True, timeout = <_TYPE_DEFAULT.token: -1> pool_timeout = None, release_conn = True, chunked = False, body_pos = None preload_content = True, decode_content = True, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) urllib3/connectionpool.py:791: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.12/http/client.py:1428: in getresponse response.begin() /usr/lib/python3.12/http/client.py:331: in begin version, status, reason = self._read_status() /usr/lib/python3.12/http/client.py:292: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.12/socket.py:707: in readinto return self._sock.recv_into(b) /usr/lib/python3.12/ssl.py:1252: in recv_into return self.read(nbytes, buffer) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , len = 8192 buffer = def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" self._checkClosed() if self._sslobj is None: raise ValueError("Read on closed or unwrapped SSL socket.") try: if buffer is not None: > return self._sslobj.read(len, buffer) E ssl.SSLError: [SSL] record layer failure (_ssl.c:2559) /usr/lib/python3.12/ssl.py:1104: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): > pool.request("GET", "/", retries=False) test/with_dummyserver/test_socketlevel.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/_request_methods.py:110: in request return self.request_encode_url( urllib3/_request_methods.py:143: in request_encode_url return self.urlopen(method, url, **extra_kw) urllib3/connectionpool.py:845: in urlopen retries = retries.increment( urllib3/util/retry.py:445: in increment raise reraise(type(error), error, _stacktrace) urllib3/util/util.py:38: in reraise raise value.with_traceback(tb) urllib3/connectionpool.py:791: in urlopen response = self._make_request( urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.12/http/client.py:1428: in getresponse response.begin() /usr/lib/python3.12/http/client.py:331: in begin version, status, reason = self._read_status() /usr/lib/python3.12/http/client.py:292: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.12/socket.py:707: in readinto return self._sock.recv_into(b) /usr/lib/python3.12/ssl.py:1252: in recv_into return self.read(nbytes, buffer) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , len = 8192 buffer = def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" self._checkClosed() if self._sslobj is None: raise ValueError("Read on closed or unwrapped SSL socket.") try: if buffer is not None: > return self._sslobj.read(len, buffer) E urllib3.exceptions.SSLError: [SSL] record layer failure (_ssl.c:2559) /usr/lib/python3.12/ssl.py:1104: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: > with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): E AssertionError: Regex pattern did not match. E Regex: '(wrong version number|record overflow)' E Input: '[SSL] record layer failure (_ssl.c:2559)' test/with_dummyserver/test_socketlevel.py:1313: AssertionError ________ TestContentFraming.test_chunked_not_specified[bytearray-PATCH] ________ self = method = 'PATCH', body_type = 'bytearray' @pytest.mark.parametrize("method", ["POST", "PUT", "PATCH"]) @pytest.mark.parametrize( "body_type", ["file", "generator", "bytes", "bytearray", "file_text"] ) def test_chunked_not_specified(self, method: str, body_type: str) -> None: buffer = bytearray() def socket_handler(listener: socket.socket) -> None: nonlocal buffer sock = listener.accept()[0] sock.settimeout(0) start = time.time() while time.time() - start < (LONG_TIMEOUT / 2): try: buffer += sock.recv(65536) except OSError: continue sock.sendall( b"HTTP/1.1 200 OK\r\n" b"Server: example.com\r\n" b"Content-Length: 0\r\n\r\n" ) sock.close() self._start_server(socket_handler) body: typing.Any if body_type == "generator": def body_generator() -> typing.Generator[bytes, None, None]: yield b"x" * 10 body = body_generator() should_be_chunked = True elif body_type == "file": body = io.BytesIO(b"x" * 10) body.seek(0, 0) should_be_chunked = True elif body_type == "file_text": body = io.StringIO("x" * 10) body.seek(0, 0) should_be_chunked = True elif body_type == "bytearray": body = bytearray(b"x" * 10) should_be_chunked = False else: body = b"x" * 10 should_be_chunked = False with HTTPConnectionPool( self.host, self.port, timeout=LONG_TIMEOUT, retries=False ) as pool: resp = pool.request(method, "/", body=body) assert resp.status == 200 sent_bytes = bytes(buffer) assert sent_bytes.count(b":") == 5 assert b"Host: localhost:" in sent_bytes assert b"Accept-Encoding: identity\r\n" in sent_bytes assert b"User-Agent: python-urllib3/" in sent_bytes if should_be_chunked: assert b"content-length" not in sent_bytes.lower() assert b"Transfer-Encoding: chunked\r\n" in sent_bytes assert b"\r\n\r\na\r\nxxxxxxxxxx\r\n0\r\n\r\n" in sent_bytes else: assert b"Content-Length: 10\r\n" in sent_bytes assert b"transfer-encoding" not in sent_bytes.lower() > assert sent_bytes.endswith(b"\r\n\r\nxxxxxxxxxx") E AssertionError: assert False E + where False = (b'\r\n\r\nxxxxxxxxxx') E + where = b'PATCH / HTTP/1.1\r\nHost: localhost:42221\r\nAccept-Encoding: identity\r\nContent-Length: 10\r\nUser-Agent: python-urllib3/2.0.7\r\n\r\n'.endswith test/with_dummyserver/test_socketlevel.py:2389: AssertionError =============================== warnings summary =============================== test/contrib/test_pyopenssl.py: 4 warnings test/with_dummyserver/test_https.py: 14 warnings test/with_dummyserver/test_no_ssl.py: 1 warning test/with_dummyserver/test_proxy_poolmanager.py: 13 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS::test_alpn_default test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_alpn_default test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_3::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_3::test_alpn_default test/with_dummyserver/test_socketlevel.py::TestALPN::test_alpn_protocol_in_first_request_packet /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/__init__.py:97: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ctx = ctx_cls(protocol=ssl_.PROTOCOL_TLS) # type: ignore[misc, attr-defined] test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_1::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_1::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1_1 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1_2 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_3::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/contrib/test_pyopenssl.py: 29 warnings test/contrib/test_socks.py: 17 warnings test/test_ssltransport.py: 12 warnings test/with_dummyserver/test_chunked_transfer.py: 17 warnings test/with_dummyserver/test_connectionpool.py: 5 warnings test/with_dummyserver/test_socketlevel.py: 108 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:133: NoIPv6Warning: No IPv6 support. Falling back to IPv4. warnings.warn("No IPv6 support. Falling back to IPv4.", NoIPv6Warning) test/contrib/test_pyopenssl.py: 14 warnings test/with_dummyserver/test_socketlevel.py: 16 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_socketlevel.py:160: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl.SSLContext(ssl_version) test/contrib/test_socks.py::TestSOCKSWithTLS::test_basic_request /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/contrib/test_socks.py:747: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = better_ssl.SSLContext(ssl.PROTOCOL_SSLv23) # type: ignore[misc] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs0] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs1] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs2] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/urllib3/util/ssl_.py:290: DeprecationWarning: ssl.TLSVersion.TLSv1 is deprecated context.minimum_version = ssl_minimum_version test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs0] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs1] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs2] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/urllib3/util/ssl_.py:295: DeprecationWarning: ssl.TLSVersion.TLSv1 is deprecated context.maximum_version = ssl_maximum_version test/test_ssltransport.py::SingleTLSLayerTestCase::test_unwrap_existing_socket /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/dummyserver/server.py:146: ResourceWarning: unclosed self.socket_handler(sock) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/test_ssltransport.py::SingleTLSLayerTestCase::test_unwrap_existing_socket /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/test_ssltransport.py::SingleTLSLayerTestCase::test_ssl_object_attributes /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/urllib3/util/ssltransport.py:198: DeprecationWarning: ssl NPN is deprecated, use ALPN instead return self.sslobj.selected_npn_protocol() test/with_dummyserver/test_connection.py::test_returns_urllib3_HTTPResponse /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connection.py::test_does_not_release_conn /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connection.py::test_double_getresponse /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPoolTimeouts::test_timeout_float /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/urllib3/util/retry.py:238: ResourceWarning: unclosed self.remove_headers_on_redirect = frozenset( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_source_address /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_connectionpool.py:784: NoIPv6Warning: No IPv6 support: skipping. warnings.warn("No IPv6 support: skipping.", NoIPv6Warning) test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-True] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-True] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-False] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-False] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-True] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-True] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-False] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-False] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_request_chunked_is_deprecated /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_3::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_client_cert_with_string_password test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_client_cert_with_bytes_password /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_socketlevel.py:370: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ssl_context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_load_keyfile_with_invalid_password /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_socketlevel.py:390: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_load_invalid_cert_file /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build/test/with_dummyserver/test_socketlevel.py:403: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) test/with_dummyserver/test_socketlevel.py::TestSSL::test_ssl_dont_load_default_certs_when_given /usr/lib/python3.12/unittest/mock.py:2188: ResourceWarning: unclosed def __init__(self, name, parent): Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED test/contrib/test_pyopenssl.py::TestSocketSSL::test_ssl_failure_midway_through_conn - AssertionError: Regex pattern did not match. Regex: '(wrong version number|record overflow)' Input: '("read error: Error([(\'SSL routines\', \'\', \'packet length too long\'), (\'SSL routines\', \'\', \'record layer failure\')])",)' FAILED test/test_connection.py::TestConnection::test_recent_date - AssertionError: assert datetime.date(2022, 1, 1) > datetime.date(2023, 5, 9) + where datetime.date(2023, 5, 9) = () + where = (datetime.datetime(2025, 5, 8, 7, 47, 18, 72250) - datetime.timedelta(days=730)).date + where datetime.datetime(2025, 5, 8, 7, 47, 18, 72250) = () + where = .today + where = datetime.datetime FAILED test/with_dummyserver/test_socketlevel.py::TestProxyManager::test_https_proxymanager_connected_to_http_proxy[http] - assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))) + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))) = MaxRetryError("HTTPSConnectionPool(host='localhost', port=37541): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))").reason + where MaxRetryError("HTTPSConnectionPool(host='localhost', port=37541): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))") = .value FAILED test/with_dummyserver/test_socketlevel.py::TestProxyManager::test_https_proxymanager_connected_to_http_proxy[https] - assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)')))) + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))) = MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))").reason + where MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1000)'))))") = .value FAILED test/with_dummyserver/test_socketlevel.py::TestSSL::test_ssl_failure_midway_through_conn - AssertionError: Regex pattern did not match. Regex: '(wrong version number|record overflow)' Input: '[SSL] record layer failure (_ssl.c:2559)' FAILED test/with_dummyserver/test_socketlevel.py::TestContentFraming::test_chunked_not_specified[bytearray-PATCH] - AssertionError: assert False + where False = (b'\r\n\r\nxxxxxxxxxx') + where = b'PATCH / HTTP/1.1\r\nHost: localhost:42221\r\nAccept-Encoding: identity\r\nContent-Length: 10\r\nUser-Agent: python-urllib3/2.0.7\r\n\r\n'.endswith = 6 failed, 1682 passed, 575 skipped, 44 deselected, 296 warnings in 321.98s (0:05:21) = sys:1: ResourceWarning: unclosed ResourceWarning: Enable tracemalloc to get the object allocation traceback sys:1: ResourceWarning: unclosed ResourceWarning: Enable tracemalloc to get the object allocation traceback sys:1: ResourceWarning: unclosed ResourceWarning: Enable tracemalloc to get the object allocation traceback sys:1: ResourceWarning: unclosed ResourceWarning: Enable tracemalloc to get the object allocation traceback E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.12_urllib3/build; python3.12 -m pytest -k "not requires_network" I: pybuild base:311: cd /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build; python3.11 -m pytest -k "not requires_network" ============================= test session starts ============================== platform linux -- Python 3.11.8, pytest-8.1.1, pluggy-1.4.0 rootdir: /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build configfile: pyproject.toml plugins: timeout-2.3.1 collected 2307 items / 44 deselected / 2263 selected test/contrib/test_pyopenssl.py ......................................... [ 1%] .................ssssssssssssss.sssssssss..ssssss...sssssssssss.s.ssssss [ 4%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 8%] ssssssssssssssssssss.s........................................s......s.. [ 11%] ................................s.....s....s.........................F.. [ 14%] .....sss.... [ 15%] test/contrib/test_pyopenssl_dependencies.py .. [ 15%] test/contrib/test_securetransport.py sssssssssssssssssssssssssssssssssss [ 16%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 19%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 23%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 26%] sss [ 26%] test/contrib/test_socks.py ................... [ 27%] test/test_collections.py ............................................. [ 29%] test/test_compatibility.py . [ 29%] test/test_connection.py .....................F....... [ 30%] test/test_connectionpool.py ............................................ [ 32%] .............................. [ 33%] test/test_exceptions.py .............. [ 34%] test/test_fields.py .................... [ 35%] test/test_filepost.py ......... [ 35%] test/test_no_ssl.py .. [ 35%] test/test_poolmanager.py s.................................... [ 37%] test/test_proxymanager.py ...... [ 37%] test/test_queue_monkeypatch.py . [ 37%] test/test_response.py ..........................sssssss................. [ 39%] .......................................... [ 41%] test/test_retry.py ..................................................... [ 44%] ........ [ 44%] test/test_ssl.py .................................. [ 46%] test/test_ssltransport.py ................. [ 46%] test/test_util.py ...................................................... [ 49%] ........................................................................ [ 52%] ........................................................................ [ 55%] .........................................s.ss..s.ss..................... [ 58%] .................................................................. [ 61%] test/test_wait.py ............. [ 62%] test/with_dummyserver/test_chunked_transfer.py ................. [ 62%] test/with_dummyserver/test_connection.py ........ [ 63%] test/with_dummyserver/test_connectionpool.py ........................... [ 64%] ........................................................................ [ 67%] ........................................................................ [ 70%] ........................................................................ [ 74%] ........................................................................ [ 77%] .................................................... [ 79%] test/with_dummyserver/test_https.py ssssssssssssss.sssssssss..ssssss...s [ 81%] ssssssssss.sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 84%] ssssssssssssssssssssssssssssssssssss.s.................................. [ 87%] .............s..................................s..........s..s..s.....s [ 90%] s...ss [ 90%] test/with_dummyserver/test_no_ssl.py .. [ 90%] test/with_dummyserver/test_poolmanager.py .............................. [ 92%] ................s [ 93%] test/with_dummyserver/test_proxy_poolmanager.py ....s................... [ 94%] ..s....s..s...... [ 94%] test/with_dummyserver/test_socketlevel.py .............................. [ 96%] ..FFF.......sss......s..F...................................s.s.s....... [ 99%] .............. [100%] =================================== FAILURES =================================== ______________ TestSocketSSL.test_ssl_failure_midway_through_conn ______________ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: > return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] urllib3/contrib/pyopenssl.py:326: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3/dist-packages/OpenSSL/SSL.py:2099: in recv_into self._raise_ssl_error(self._ssl, result) /usr/lib/python3/dist-packages/OpenSSL/SSL.py:1834: in _raise_ssl_error _openssl_assert( /usr/lib/python3/dist-packages/OpenSSL/_util.py:71: in openssl_assert exception_from_error_queue(error) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ exception_type = def exception_from_error_queue(exception_type: Type[Exception]) -> NoReturn: """ Convert an OpenSSL library failure into a Python exception. When a call to the native OpenSSL library fails, this is usually signalled by the return value, and an error code is stored in an error queue associated with the current thread. The err library provides functions to obtain these error codes and textual error messages. """ errors = [] while True: error = lib.ERR_get_error() if error == 0: break errors.append( ( text(lib.ERR_lib_error_string(error)), text(lib.ERR_func_error_string(error)), text(lib.ERR_reason_error_string(error)), ) ) > raise exception_type(errors) E OpenSSL.SSL.Error: [('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')] /usr/lib/python3/dist-packages/OpenSSL/_util.py:57: Error The above exception was the direct cause of the following exception: self = method = 'GET', url = '/', body = None, headers = {} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = True, assert_same_host = True, timeout = <_TYPE_DEFAULT.token: -1> pool_timeout = None, release_conn = True, chunked = False, body_pos = None preload_content = True, decode_content = True, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) urllib3/connectionpool.py:791: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.11/http/client.py:1390: in getresponse response.begin() /usr/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() /usr/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.11/socket.py:706: in readinto return self._sock.recv_into(b) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] except OpenSSL.SSL.SysCallError as e: if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): return 0 else: raise OSError(e.args[0], str(e)) from e except OpenSSL.SSL.ZeroReturnError: if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: return 0 else: raise except OpenSSL.SSL.WantReadError as e: if not util.wait_for_read(self.socket, self.socket.gettimeout()): raise timeout("The read operation timed out") from e else: return self.recv_into(*args, **kwargs) # TLS 1.3 post-handshake authentication except OpenSSL.SSL.Error as e: > raise ssl.SSLError(f"read error: {e!r}") from e E ssl.SSLError: ("read error: Error([('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')])",) urllib3/contrib/pyopenssl.py:345: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): > pool.request("GET", "/", retries=False) test/with_dummyserver/test_socketlevel.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/_request_methods.py:110: in request return self.request_encode_url( urllib3/_request_methods.py:143: in request_encode_url return self.urlopen(method, url, **extra_kw) urllib3/connectionpool.py:845: in urlopen retries = retries.increment( urllib3/util/retry.py:445: in increment raise reraise(type(error), error, _stacktrace) urllib3/util/util.py:38: in reraise raise value.with_traceback(tb) urllib3/connectionpool.py:791: in urlopen response = self._make_request( urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.11/http/client.py:1390: in getresponse response.begin() /usr/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() /usr/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.11/socket.py:706: in readinto return self._sock.recv_into(b) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = (,), kwargs = {} def recv_into(self, *args: typing.Any, **kwargs: typing.Any) -> int: try: return self.connection.recv_into(*args, **kwargs) # type: ignore[no-any-return] except OpenSSL.SSL.SysCallError as e: if self.suppress_ragged_eofs and e.args == (-1, "Unexpected EOF"): return 0 else: raise OSError(e.args[0], str(e)) from e except OpenSSL.SSL.ZeroReturnError: if self.connection.get_shutdown() == OpenSSL.SSL.RECEIVED_SHUTDOWN: return 0 else: raise except OpenSSL.SSL.WantReadError as e: if not util.wait_for_read(self.socket, self.socket.gettimeout()): raise timeout("The read operation timed out") from e else: return self.recv_into(*args, **kwargs) # TLS 1.3 post-handshake authentication except OpenSSL.SSL.Error as e: > raise ssl.SSLError(f"read error: {e!r}") from e E urllib3.exceptions.SSLError: ("read error: Error([('SSL routines', '', 'packet length too long'), ('SSL routines', '', 'record layer failure')])",) urllib3/contrib/pyopenssl.py:345: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: > with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): E AssertionError: Regex pattern did not match. E Regex: '(wrong version number|record overflow)' E Input: '("read error: Error([(\'SSL routines\', \'\', \'packet length too long\'), (\'SSL routines\', \'\', \'record layer failure\')])",)' test/with_dummyserver/test_socketlevel.py:1313: AssertionError ------------------------------ Captured log call ------------------------------- DEBUG urllib3.util.retry:retry.py:282 Converted retries value: False -> Retry(total=False, connect=None, read=None, redirect=0, status=None) DEBUG urllib3.connectionpool:connectionpool.py:1053 Starting new HTTPS connection (1): localhost:40151 _______________________ TestConnection.test_recent_date ________________________ self = def test_recent_date(self) -> None: # This test is to make sure that the RECENT_DATE value # doesn't get too far behind what the current date is. # When this test fails update urllib3.connection.RECENT_DATE # according to the rules defined in that file. two_years = datetime.timedelta(days=365 * 2) > assert RECENT_DATE > (datetime.datetime.today() - two_years).date() E AssertionError: assert datetime.date(2022, 1, 1) > datetime.date(2023, 5, 9) E + where datetime.date(2023, 5, 9) = () E + where = (datetime.datetime(2025, 5, 8, 7, 53, 44, 838982) - datetime.timedelta(days=730)).date E + where datetime.datetime(2025, 5, 8, 7, 53, 44, 838982) = () E + where = .today E + where = datetime.datetime test/test_connection.py:206: AssertionError ____ TestProxyManager.test_https_proxymanager_connected_to_http_proxy[http] ____ self = target_scheme = 'http' @pytest.mark.parametrize("target_scheme", ["http", "https"]) def test_https_proxymanager_connected_to_http_proxy( self, target_scheme: str ) -> None: errored = Event() def http_socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock.send(b"HTTP/1.0 501 Not Implemented\r\nConnection: close\r\n\r\n") errored.wait() sock.close() self._start_server(http_socket_handler) base_url = f"https://{self.host}:{self.port}" with ProxyManager(base_url, cert_reqs="NONE") as proxy: with pytest.raises(MaxRetryError) as e: proxy.request("GET", f"{target_scheme}://example.com", retries=0) errored.set() # Avoid a ConnectionAbortedError on Windows. assert type(e.value.reason) == ProxyError > assert "Your proxy appears to only use HTTP and not HTTPS" in str( e.value.reason ) E assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" E + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))) E + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))) = MaxRetryError("HTTPSConnectionPool(host='localhost', port=43337): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))").reason E + where MaxRetryError("HTTPSConnectionPool(host='localhost', port=43337): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))") = .value test/with_dummyserver/test_socketlevel.py:1278: AssertionError ___ TestProxyManager.test_https_proxymanager_connected_to_http_proxy[https] ____ self = target_scheme = 'https' @pytest.mark.parametrize("target_scheme", ["http", "https"]) def test_https_proxymanager_connected_to_http_proxy( self, target_scheme: str ) -> None: errored = Event() def http_socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock.send(b"HTTP/1.0 501 Not Implemented\r\nConnection: close\r\n\r\n") errored.wait() sock.close() self._start_server(http_socket_handler) base_url = f"https://{self.host}:{self.port}" with ProxyManager(base_url, cert_reqs="NONE") as proxy: with pytest.raises(MaxRetryError) as e: proxy.request("GET", f"{target_scheme}://example.com", retries=0) errored.set() # Avoid a ConnectionAbortedError on Windows. assert type(e.value.reason) == ProxyError > assert "Your proxy appears to only use HTTP and not HTTPS" in str( e.value.reason ) E assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" E + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))) E + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))) = MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))").reason E + where MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))") = .value test/with_dummyserver/test_socketlevel.py:1278: AssertionError _________________ TestSSL.test_ssl_failure_midway_through_conn _________________ self = method = 'GET', url = '/', body = None, headers = {} retries = Retry(total=False, connect=None, read=None, redirect=0, status=None) redirect = True, assert_same_host = True, timeout = <_TYPE_DEFAULT.token: -1> pool_timeout = None, release_conn = True, chunked = False, body_pos = None preload_content = True, decode_content = True, response_kw = {} parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None) destination_scheme = None, conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( # type: ignore[override] self, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | bool | int | None = None, redirect: bool = True, assert_same_host: bool = True, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, pool_timeout: int | None = None, release_conn: bool | None = None, chunked: bool = False, body_pos: _TYPE_BODY_POSITION | None = None, preload_content: bool = True, decode_content: bool = True, **response_kw: typing.Any, ) -> BaseHTTPResponse: """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param bool preload_content: If True, the response's body will be preloaded into memory. :param bool decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``preload_content`` which defaults to ``True``. :param bool chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = preload_content # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = to_str(_encode_target(url)) else: url = to_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() # type: ignore[attr-defined] headers.update(self.proxy_headers) # type: ignore[union-attr] # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout # type: ignore[assignment] # Is this a closed/new connection that requires CONNECT tunnelling? if self.proxy is not None and http_tunnel_required and conn.is_closed: try: self._prepare_proxy(conn) except (BaseSSLError, OSError, SocketTimeout) as e: self._raise_timeout( err=e, url=self.proxy.url, timeout_value=conn.timeout ) raise # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Make the request on the HTTPConnection object > response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, retries=retries, response_conn=response_conn, preload_content=preload_content, decode_content=decode_content, **response_kw, ) urllib3/connectionpool.py:791: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.11/http/client.py:1390: in getresponse response.begin() /usr/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() /usr/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.11/socket.py:706: in readinto return self._sock.recv_into(b) /usr/lib/python3.11/ssl.py:1314: in recv_into return self.read(nbytes, buffer) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , len = 8192 buffer = def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" self._checkClosed() if self._sslobj is None: raise ValueError("Read on closed or unwrapped SSL socket.") try: if buffer is not None: > return self._sslobj.read(len, buffer) E ssl.SSLError: [SSL] record layer failure (_ssl.c:2580) /usr/lib/python3.11/ssl.py:1166: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): > pool.request("GET", "/", retries=False) test/with_dummyserver/test_socketlevel.py:1316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ urllib3/_request_methods.py:110: in request return self.request_encode_url( urllib3/_request_methods.py:143: in request_encode_url return self.urlopen(method, url, **extra_kw) urllib3/connectionpool.py:845: in urlopen retries = retries.increment( urllib3/util/retry.py:445: in increment raise reraise(type(error), error, _stacktrace) urllib3/util/util.py:38: in reraise raise value.with_traceback(tb) urllib3/connectionpool.py:791: in urlopen response = self._make_request( urllib3/connectionpool.py:537: in _make_request response = conn.getresponse() urllib3/connection.py:461: in getresponse httplib_response = super().getresponse() /usr/lib/python3.11/http/client.py:1390: in getresponse response.begin() /usr/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() /usr/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") /usr/lib/python3.11/socket.py:706: in readinto return self._sock.recv_into(b) /usr/lib/python3.11/ssl.py:1314: in recv_into return self.read(nbytes, buffer) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , len = 8192 buffer = def read(self, len=1024, buffer=None): """Read up to LEN bytes and return them. Return zero-length string on EOF.""" self._checkClosed() if self._sslobj is None: raise ValueError("Read on closed or unwrapped SSL socket.") try: if buffer is not None: > return self._sslobj.read(len, buffer) E urllib3.exceptions.SSLError: [SSL] record layer failure (_ssl.c:2580) /usr/lib/python3.11/ssl.py:1166: SSLError During handling of the above exception, another exception occurred: self = def test_ssl_failure_midway_through_conn(self) -> None: def socket_handler(listener: socket.socket) -> None: sock = listener.accept()[0] sock2 = sock.dup() ssl_sock = original_ssl_wrap_socket( sock, server_side=True, keyfile=DEFAULT_CERTS["keyfile"], certfile=DEFAULT_CERTS["certfile"], ca_certs=DEFAULT_CA, ) buf = b"" while not buf.endswith(b"\r\n\r\n"): buf += ssl_sock.recv(65536) # Deliberately send from the non-SSL socket. sock2.send( b"HTTP/1.1 200 OK\r\n" b"Content-Type: text/plain\r\n" b"Content-Length: 2\r\n" b"\r\n" b"Hi" ) sock2.close() ssl_sock.close() self._start_server(socket_handler) with HTTPSConnectionPool(self.host, self.port, ca_certs=DEFAULT_CA) as pool: > with pytest.raises( SSLError, match=r"(wrong version number|record overflow)" ): E AssertionError: Regex pattern did not match. E Regex: '(wrong version number|record overflow)' E Input: '[SSL] record layer failure (_ssl.c:2580)' test/with_dummyserver/test_socketlevel.py:1313: AssertionError ______________ TestHeaders.test_headers_sent_with_add[POST-None] _______________ self = method_type = 'POST', body_type = None @pytest.mark.parametrize( "method_type, body_type", [ ("GET", None), ("POST", None), ("POST", "bytes"), ("POST", "bytes-io"), ], ) def test_headers_sent_with_add( self, method_type: str, body_type: str | None ) -> None: """ Confirm that when adding headers with combine=True that we simply append to the most recent value, rather than create a new header line. """ body: None | bytes | io.BytesIO if body_type is None: body = None elif body_type == "bytes": body = b"my-body" elif body_type == "bytes-io": body = io.BytesIO(b"bytes-io-body") body.seek(0, 0) else: raise ValueError("Unknonw body type") buffer: bytes = b"" def socket_handler(listener: socket.socket) -> None: nonlocal buffer sock = listener.accept()[0] sock.settimeout(0) start = time.time() while time.time() - start < (LONG_TIMEOUT / 2): try: buffer += sock.recv(65536) except OSError: continue sock.sendall( b"HTTP/1.1 200 OK\r\n" b"Server: example.com\r\n" b"Content-Length: 0\r\n\r\n" ) sock.close() self._start_server(socket_handler) headers = HTTPHeaderDict() headers.add("A", "1") headers.add("C", "3") headers.add("B", "2") headers.add("B", "3") headers.add("A", "4", combine=False) headers.add("C", "5", combine=True) headers.add("C", "6") with HTTPConnectionPool(self.host, self.port, retries=False) as pool: r = pool.request( method_type, "/", body=body, headers=headers, ) assert r.status == 200 > assert b"A: 1\r\nA: 4\r\nC: 3, 5\r\nC: 6\r\nB: 2\r\nB: 3" in buffer E AssertionError: assert b'A: 1\r\nA: 4\r\nC: 3, 5\r\nC: 6\r\nB: 2\r\nB: 3' in b'' test/with_dummyserver/test_socketlevel.py:1877: AssertionError =============================== warnings summary =============================== test/contrib/test_pyopenssl.py: 4 warnings test/with_dummyserver/test_https.py: 14 warnings test/with_dummyserver/test_no_ssl.py: 1 warning test/with_dummyserver/test_proxy_poolmanager.py: 13 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS::test_alpn_default test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_alpn_default test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_3::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_alpn_default test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_3::test_alpn_default test/with_dummyserver/test_socketlevel.py::TestALPN::test_alpn_protocol_in_first_request_packet /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/__init__.py:97: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ctx = ctx_cls(protocol=ssl_.PROTOCOL_TLS) # type: ignore[misc, attr-defined] test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_1::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_1::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1_1 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_simple test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_simple /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:173: DeprecationWarning: ssl.PROTOCOL_TLSv1_2 is deprecated ctx = ssl.SSLContext(ssl_version) test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_2::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/contrib/test_pyopenssl.py::TestHTTPS_TLSv1_3::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/contrib/test_pyopenssl.py: 29 warnings test/contrib/test_socks.py: 17 warnings test/test_ssltransport.py: 12 warnings test/with_dummyserver/test_chunked_transfer.py: 17 warnings test/with_dummyserver/test_connectionpool.py: 5 warnings test/with_dummyserver/test_socketlevel.py: 108 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:133: NoIPv6Warning: No IPv6 support. Falling back to IPv4. warnings.warn("No IPv6 support. Falling back to IPv4.", NoIPv6Warning) test/contrib/test_pyopenssl.py: 14 warnings test/with_dummyserver/test_socketlevel.py: 16 warnings /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_socketlevel.py:160: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl.SSLContext(ssl_version) test/contrib/test_socks.py::TestSOCKSWithTLS::test_basic_request /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/contrib/test_socks.py:747: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = better_ssl.SSLContext(ssl.PROTOCOL_SSLv23) # type: ignore[misc] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs0] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs1] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs2] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/urllib3/util/ssl_.py:290: DeprecationWarning: ssl.TLSVersion.TLSv1 is deprecated context.minimum_version = ssl_minimum_version test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs0] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs1] test/test_ssl.py::TestSSL::test_create_urllib3_context_ssl_version_and_ssl_min_max_version_no_error[kwargs2] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/urllib3/util/ssl_.py:295: DeprecationWarning: ssl.TLSVersion.TLSv1 is deprecated context.maximum_version = ssl_maximum_version test/test_ssltransport.py::SingleTLSLayerTestCase::test_unwrap_existing_socket /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/dummyserver/server.py:146: ResourceWarning: unclosed self.socket_handler(sock) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/test_ssltransport.py::SingleTLSLayerTestCase::test_unwrap_existing_socket /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/test_ssltransport.py::SingleTLSLayerTestCase::test_ssl_object_attributes /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/urllib3/util/ssltransport.py:198: DeprecationWarning: ssl NPN is deprecated, use ALPN instead return self.sslobj.selected_npn_protocol() test/with_dummyserver/test_connection.py::test_returns_urllib3_HTTPResponse /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connection.py::test_does_not_release_conn /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connection.py::test_double_getresponse /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_source_address /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_connectionpool.py:784: NoIPv6Warning: No IPv6 support: skipping. warnings.warn("No IPv6 support: skipping.", NoIPv6Warning) test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_skip_header[True-User-Agent0-host0-Accept-Encoding1] /usr/lib/python3.11/asyncio/base_events.py:782: ResourceWarning: unclosed handle = events.Handle(callback, args, self, context) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-True] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-True] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-False] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[dict-False-False] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-True] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-True] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-False] /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_connectionpool.py:1072: ResourceWarning: unclosed conn = pool._get_conn() Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_headers_not_modified_by_request[HTTPHeaderDict-False-False] /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_connectionpool.py::TestConnectionPool::test_request_chunked_is_deprecated /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_2::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_https.py::TestHTTPS_TLSv1_3::test_server_hostname /usr/lib/python3/dist-packages/_pytest/python.py:195: ResourceWarning: unclosed result = testfunction(**testargs) Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_client_cert_with_string_password test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_client_cert_with_bytes_password /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_socketlevel.py:370: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated ssl_context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_load_keyfile_with_invalid_password /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_socketlevel.py:390: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) test/with_dummyserver/test_socketlevel.py::TestClientCerts::test_load_invalid_cert_file /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build/test/with_dummyserver/test_socketlevel.py:403: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated context = ssl_.SSLContext(ssl_.PROTOCOL_SSLv23) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED test/contrib/test_pyopenssl.py::TestSocketSSL::test_ssl_failure_midway_through_conn - AssertionError: Regex pattern did not match. Regex: '(wrong version number|record overflow)' Input: '("read error: Error([(\'SSL routines\', \'\', \'packet length too long\'), (\'SSL routines\', \'\', \'record layer failure\')])",)' FAILED test/test_connection.py::TestConnection::test_recent_date - AssertionError: assert datetime.date(2022, 1, 1) > datetime.date(2023, 5, 9) + where datetime.date(2023, 5, 9) = () + where = (datetime.datetime(2025, 5, 8, 7, 53, 44, 838982) - datetime.timedelta(days=730)).date + where datetime.datetime(2025, 5, 8, 7, 53, 44, 838982) = () + where = .today + where = datetime.datetime FAILED test/with_dummyserver/test_socketlevel.py::TestProxyManager::test_https_proxymanager_connected_to_http_proxy[http] - assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))) + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))) = MaxRetryError("HTTPSConnectionPool(host='localhost', port=43337): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))").reason + where MaxRetryError("HTTPSConnectionPool(host='localhost', port=43337): Max retries exceeded with url: http://example.com (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))") = .value FAILED test/with_dummyserver/test_socketlevel.py::TestProxyManager::test_https_proxymanager_connected_to_http_proxy[https] - assert 'Your proxy appears to only use HTTP and not HTTPS' in "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" + where "('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))" = str(ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)')))) + where ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))) = MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))").reason + where MaxRetryError("HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Unable to connect to proxy', SSLError(SSLError(1, '[SSL] record layer failure (_ssl.c:1006)'))))") = .value FAILED test/with_dummyserver/test_socketlevel.py::TestSSL::test_ssl_failure_midway_through_conn - AssertionError: Regex pattern did not match. Regex: '(wrong version number|record overflow)' Input: '[SSL] record layer failure (_ssl.c:2580)' FAILED test/with_dummyserver/test_socketlevel.py::TestHeaders::test_headers_sent_with_add[POST-None] - AssertionError: assert b'A: 1\r\nA: 4\r\nC: 3, 5\r\nC: 6\r\nB: 2\r\nB: 3' in b'' = 6 failed, 1682 passed, 575 skipped, 44 deselected, 295 warnings in 774.20s (0:12:54) = sys:1: ResourceWarning: unclosed ResourceWarning: Enable tracemalloc to get the object allocation traceback E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/python-urllib3-2.0.7/.pybuild/cpython3_3.11_urllib3/build; python3.11 -m pytest -k "not requires_network" dh_auto_test: error: pybuild --test -i python{version} -p "3.12 3.11" returned exit code 13 make: *** [debian/rules:11: 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/65696 and its subdirectories Fri Apr 5 13:42:07 UTC 2024 W: No second build log, what happened?