>>> mitmproxy: Building community/mitmproxy 11.0.0-r0 (using abuild 3.16.0_rc4-r0) started Tue, 18 Nov 2025 23:15:05 +0000 >>> mitmproxy: Validating /home/buildozer/aports/community/mitmproxy/APKBUILD... >>> mitmproxy: Analyzing dependencies... >>> mitmproxy: Installing for build: build-base py3-aioquic py3-asgiref py3-brotli py3-certifi py3-cryptography py3-flask py3-h11 py3-h2 py3-hyperframe py3-kaitaistruct py3-ldap3 py3-mitmproxy-rs py3-msgpack py3-passlib py3-protobuf py3-openssl py3-parsing py3-pyperclip py3-ruamel.yaml py3-sortedcontainers py3-tornado py3-urwid py3-wsproto py3-publicsuffix2 py3-zstandard py3-gpep517 py3-installer py3-setuptools py3-wheel py3-hypothesis py3-parver py3-pytest py3-pytest-asyncio py3-requests ( 1/134) Installing libbz2 (1.0.8-r6) ( 2/134) Installing libffi (3.5.2-r0) ( 3/134) Installing gdbm (1.26-r0) ( 4/134) Installing xz-libs (5.8.1-r0) ( 5/134) Installing mpdecimal (4.0.1-r0) ( 6/134) Installing libpanelw (6.5_p20251115-r0) ( 7/134) Installing sqlite-libs (3.51.0-r0) ( 8/134) Installing python3 (3.12.12-r0) ( 9/134) Installing python3-pycache-pyc0 (3.12.12-r0) ( 10/134) Installing pyc (3.12.12-r0) ( 11/134) Installing py3-certifi-pyc (2025.11.12-r0) ( 12/134) Installing py3-aioquic-pyc (1.3.0-r0) ( 13/134) Installing python3-pyc (3.12.12-r0) ( 14/134) Installing py3-certifi (2025.11.12-r0) ( 15/134) Installing py3-cparser (2.22-r1) ( 16/134) Installing py3-cparser-pyc (2.22-r1) ( 17/134) Installing py3-cffi (1.17.1-r1) ( 18/134) Installing py3-cffi-pyc (1.17.1-r1) ( 19/134) Installing py3-cryptography (46.0.2-r0) ( 20/134) Installing py3-cryptography-pyc (46.0.2-r0) ( 21/134) Installing py3-typing-extensions (4.15.0-r0) ( 22/134) Installing py3-typing-extensions-pyc (4.15.0-r0) ( 23/134) Installing py3-openssl (25.3.0-r0) ( 24/134) Installing py3-openssl-pyc (25.3.0-r0) ( 25/134) Installing py3-pylsqpack (0.3.23-r0) ( 26/134) Installing py3-pylsqpack-pyc (0.3.23-r0) ( 27/134) Installing py3-asn1 (0.6.1-r0) ( 28/134) Installing py3-asn1-pyc (0.6.1-r0) ( 29/134) Installing py3-asn1-modules (0.4.2-r0) ( 30/134) Installing py3-asn1-modules-pyc (0.4.2-r0) ( 31/134) Installing py3-attrs (25.3.0-r0) ( 32/134) Installing py3-attrs-pyc (25.3.0-r0) ( 33/134) Installing py3-service_identity (24.2.0-r0) ( 34/134) Installing py3-service_identity-pyc (24.2.0-r0) ( 35/134) Installing py3-aioquic (1.3.0-r0) ( 36/134) Installing py3-asgiref (3.9.1-r0) ( 37/134) Installing py3-asgiref-pyc (3.9.1-r0) ( 38/134) Installing py3-brotli (1.1.0-r2) ( 39/134) Installing py3-brotli-pyc (1.1.0-r2) ( 40/134) Installing py3-blinker (1.9.0-r0) ( 41/134) Installing py3-blinker-pyc (1.9.0-r0) ( 42/134) Installing py3-click (8.1.8-r1) ( 43/134) Installing py3-click-pyc (8.1.8-r1) ( 44/134) Installing py3-dotenv (1.0.1-r1) ( 45/134) Installing py3-dotenv-pyc (1.0.1-r1) ( 46/134) Installing py3-itsdangerous (2.2.0-r0) ( 47/134) Installing py3-itsdangerous-pyc (2.2.0-r0) ( 48/134) Installing py3-markupsafe (3.0.2-r0) ( 49/134) Installing py3-markupsafe-pyc (3.0.2-r0) ( 50/134) Installing py3-jinja2 (3.1.6-r0) ( 51/134) Installing py3-jinja2-pyc (3.1.6-r0) ( 52/134) Installing py3-werkzeug (3.1.3-r0) ( 53/134) Installing py3-werkzeug-pyc (3.1.3-r0) ( 54/134) Installing py3-flask (3.1.2-r0) ( 55/134) Installing py3-flask-pyc (3.1.2-r0) ( 56/134) Installing py3-h11 (0.16.0-r0) ( 57/134) Installing py3-h11-pyc (0.16.0-r0) ( 58/134) Installing py3-hyperframe (6.1.0-r0) ( 59/134) Installing py3-hyperframe-pyc (6.1.0-r0) ( 60/134) Installing py3-hpack (4.1.0-r0) ( 61/134) Installing py3-hpack-pyc (4.1.0-r0) ( 62/134) Installing py3-h2 (4.1.0-r3) ( 63/134) Installing py3-h2-pyc (4.1.0-r3) ( 64/134) Installing py3-kaitaistruct (0.10-r4) ( 65/134) Installing py3-kaitaistruct-pyc (0.10-r4) ( 66/134) Installing py3-ldap3 (2.9.1-r3) ( 67/134) Installing py3-ldap3-pyc (2.9.1-r3) ( 68/134) Installing py3-mitmproxy-rs (0.9.3-r0) ( 69/134) Installing py3-mitmproxy-rs-pyc (0.9.3-r0) ( 70/134) Installing py3-msgpack (1.0.8-r1) ( 71/134) Installing py3-msgpack-pyc (1.0.8-r1) ( 72/134) Installing py3-passlib (1.7.4-r7) ( 73/134) Installing py3-passlib-pyc (1.7.4-r7) ( 74/134) Installing tzdata (2025b-r0) ( 75/134) Installing py3-protobuf (6.31.1-r1) ( 76/134) Installing py3-protobuf-pyc (6.31.1-r1) ( 77/134) Installing py3-parsing (3.2.3-r0) ( 78/134) Installing py3-parsing-pyc (3.2.3-r0) ( 79/134) Installing py3-pyperclip (1.11.0-r0) ( 80/134) Installing py3-pyperclip-pyc (1.11.0-r0) ( 81/134) Installing py3-ruamel.yaml.clib (0.2.8-r2) ( 82/134) Installing py3-ruamel.yaml (0.18.16-r0) ( 83/134) Installing py3-ruamel.yaml-pyc (0.18.16-r0) ( 84/134) Installing py3-sortedcontainers (2.4.0-r5) ( 85/134) Installing py3-sortedcontainers-pyc (2.4.0-r5) ( 86/134) Installing py3-tornado (6.5.2-r0) ( 87/134) Installing py3-tornado-pyc (6.5.2-r0) ( 88/134) Installing py3-wcwidth (0.2.13-r1) ( 89/134) Installing py3-wcwidth-pyc (0.2.13-r1) ( 90/134) Installing py3-urwid (2.6.13-r0) ( 91/134) Installing py3-urwid-pyc (2.6.13-r0) ( 92/134) Installing py3-wsproto (1.2.0-r3) ( 93/134) Installing py3-wsproto-pyc (1.2.0-r3) ( 94/134) Installing py3-charset-normalizer (3.4.4-r0) ( 95/134) Installing py3-charset-normalizer-pyc (3.4.4-r0) ( 96/134) Installing py3-idna (3.10-r0) ( 97/134) Installing py3-idna-pyc (3.10-r0) ( 98/134) Installing py3-urllib3 (1.26.20-r0) ( 99/134) Installing py3-urllib3-pyc (1.26.20-r0) (100/134) Installing py3-requests (2.32.5-r0) (101/134) Installing py3-requests-pyc (2.32.5-r0) (102/134) Installing py3-publicsuffix2 (2.20191221-r6) (103/134) Installing py3-publicsuffix2-pyc (2.20191221-r6) (104/134) Installing py3-zstandard (0.23.0-r2) (105/134) Installing py3-zstandard-pyc (0.23.0-r2) (106/134) Installing py3-installer (0.7.0-r2) (107/134) Installing py3-installer-pyc (0.7.0-r2) (108/134) Installing py3-gpep517 (19-r1) (109/134) Installing py3-gpep517-pyc (19-r1) (110/134) Installing py3-packaging (25.0-r0) (111/134) Installing py3-packaging-pyc (25.0-r0) (112/134) Installing py3-setuptools (80.9.0-r2) (113/134) Installing py3-setuptools-pyc (80.9.0-r2) (114/134) Installing py3-wheel (0.46.1-r0) (115/134) Installing py3-wheel-pyc (0.46.1-r0) (116/134) Installing py3-hypothesis (6.146.0-r0) (117/134) Installing py3-hypothesis-pyc (6.146.0-r0) (118/134) Installing py3-arpeggio (2.0.2-r2) (119/134) Installing py3-arpeggio-pyc (2.0.2-r2) (120/134) Installing py3-parver (0.5-r1) (121/134) Installing py3-parver-pyc (0.5-r1) (122/134) Installing py3-iniconfig (2.3.0-r0) (123/134) Installing py3-iniconfig-pyc (2.3.0-r0) (124/134) Installing py3-pluggy (1.6.0-r0) (125/134) Installing py3-pluggy-pyc (1.6.0-r0) (126/134) Installing py3-py (1.11.0-r4) (127/134) Installing py3-py-pyc (1.11.0-r4) (128/134) Installing py3-pygments (2.19.2-r0) (129/134) Installing py3-pygments-pyc (2.19.2-r0) (130/134) Installing py3-pytest (8.4.2-r1) (131/134) Installing py3-pytest-pyc (8.4.2-r1) (132/134) Installing py3-pytest-asyncio (0.25.0-r1) (133/134) Installing py3-pytest-asyncio-pyc (0.25.0-r1) (134/134) Installing .makedepends-mitmproxy (20251118.231526) busybox-1.37.0-r25.trigger: Executing script... OK: 527 MiB in 239 packages >>> mitmproxy: Cleaning up srcdir >>> mitmproxy: Cleaning up pkgdir >>> mitmproxy: Cleaning up tmpdir >>> mitmproxy: Fetching https://distfiles.alpinelinux.org/distfiles/v3.23/mitmproxy-11.0.0.tar.gz /var/cache/distfiles/v3.23/mitmproxy-11.0.0.tar.gz: OK /home/buildozer/aports/community/mitmproxy/skip-test-optmanager-x86.patch: OK >>> mitmproxy: Fetching https://distfiles.alpinelinux.org/distfiles/v3.23/mitmproxy-11.0.0.tar.gz /var/cache/distfiles/v3.23/mitmproxy-11.0.0.tar.gz: OK /home/buildozer/aports/community/mitmproxy/skip-test-optmanager-x86.patch: OK >>> mitmproxy: Unpacking /var/cache/distfiles/v3.23/mitmproxy-11.0.0.tar.gz... >>> mitmproxy: skip-test-optmanager-x86.patch patching file test/mitmproxy/test_optmanager.py Hunk #1 succeeded at 196 (offset 10 lines). 2025-11-18 23:15:29,127 gpep517 INFO Building wheel via backend setuptools.build_meta /usr/lib/python3.12/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2026-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.12/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.12/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: MIT License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() 2025-11-18 23:15:29,240 root INFO running bdist_wheel 2025-11-18 23:15:29,281 root INFO running build 2025-11-18 23:15:29,281 root INFO running build_py 2025-11-18 23:15:29,290 root INFO creating build/lib/mitmproxy 2025-11-18 23:15:29,291 root INFO copying mitmproxy/hooks.py -> build/lib/mitmproxy 2025-11-18 23:15:29,291 root INFO copying mitmproxy/exceptions.py -> build/lib/mitmproxy 2025-11-18 23:15:29,291 root INFO copying mitmproxy/certs.py -> build/lib/mitmproxy 2025-11-18 23:15:29,292 root INFO copying mitmproxy/flowfilter.py -> build/lib/mitmproxy 2025-11-18 23:15:29,292 root INFO copying mitmproxy/udp.py -> build/lib/mitmproxy 2025-11-18 23:15:29,293 root INFO copying mitmproxy/command_lexer.py -> build/lib/mitmproxy 2025-11-18 23:15:29,293 root INFO copying mitmproxy/connection.py -> build/lib/mitmproxy 2025-11-18 23:15:29,293 root INFO copying mitmproxy/version.py -> build/lib/mitmproxy 2025-11-18 23:15:29,294 root INFO copying mitmproxy/__init__.py -> build/lib/mitmproxy 2025-11-18 23:15:29,294 root INFO copying mitmproxy/ctx.py -> build/lib/mitmproxy 2025-11-18 23:15:29,294 root INFO copying mitmproxy/tcp.py -> build/lib/mitmproxy 2025-11-18 23:15:29,294 root INFO copying mitmproxy/websocket.py -> build/lib/mitmproxy 2025-11-18 23:15:29,295 root INFO copying mitmproxy/command.py -> build/lib/mitmproxy 2025-11-18 23:15:29,295 root INFO copying mitmproxy/log.py -> build/lib/mitmproxy 2025-11-18 23:15:29,295 root INFO copying mitmproxy/addonmanager.py -> build/lib/mitmproxy 2025-11-18 23:15:29,296 root INFO copying mitmproxy/optmanager.py -> build/lib/mitmproxy 2025-11-18 23:15:29,296 root INFO copying mitmproxy/types.py -> build/lib/mitmproxy 2025-11-18 23:15:29,296 root INFO copying mitmproxy/dns.py -> build/lib/mitmproxy 2025-11-18 23:15:29,297 root INFO copying mitmproxy/flow.py -> build/lib/mitmproxy 2025-11-18 23:15:29,297 root INFO copying mitmproxy/master.py -> build/lib/mitmproxy 2025-11-18 23:15:29,297 root INFO copying mitmproxy/http.py -> build/lib/mitmproxy 2025-11-18 23:15:29,298 root INFO copying mitmproxy/options.py -> build/lib/mitmproxy 2025-11-18 23:15:29,298 root INFO copying mitmproxy/eventsequence.py -> build/lib/mitmproxy 2025-11-18 23:15:29,299 root INFO copying mitmproxy/tls.py -> build/lib/mitmproxy 2025-11-18 23:15:29,299 root INFO creating build/lib/mitmproxy/addons 2025-11-18 23:15:29,300 root INFO copying mitmproxy/addons/eventstore.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,300 root INFO copying mitmproxy/addons/view.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,300 root INFO copying mitmproxy/addons/command_history.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,301 root INFO copying mitmproxy/addons/serverplayback.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,301 root INFO copying mitmproxy/addons/server_side_events.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,301 root INFO copying mitmproxy/addons/next_layer.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,302 root INFO copying mitmproxy/addons/asgiapp.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,302 root INFO copying mitmproxy/addons/keepserving.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,302 root INFO copying mitmproxy/addons/strip_dns_https_records.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,303 root INFO copying mitmproxy/addons/proxyauth.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,303 root INFO copying mitmproxy/addons/mapremote.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,303 root INFO copying mitmproxy/addons/proxyserver.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,304 root INFO copying mitmproxy/addons/blocklist.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,304 root INFO copying mitmproxy/addons/__init__.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,304 root INFO copying mitmproxy/addons/errorcheck.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,304 root INFO copying mitmproxy/addons/onboarding.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,305 root INFO copying mitmproxy/addons/dumper.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,305 root INFO copying mitmproxy/addons/stickycookie.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,305 root INFO copying mitmproxy/addons/maplocal.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,306 root INFO copying mitmproxy/addons/export.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,306 root INFO copying mitmproxy/addons/save.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,306 root INFO copying mitmproxy/addons/anticache.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,307 root INFO copying mitmproxy/addons/savehar.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,307 root INFO copying mitmproxy/addons/browser.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,307 root INFO copying mitmproxy/addons/comment.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,308 root INFO copying mitmproxy/addons/modifyheaders.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,308 root INFO copying mitmproxy/addons/core.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,308 root INFO copying mitmproxy/addons/stickyauth.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,308 root INFO copying mitmproxy/addons/modifybody.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,309 root INFO copying mitmproxy/addons/termlog.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,309 root INFO copying mitmproxy/addons/intercept.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,309 root INFO copying mitmproxy/addons/upstream_auth.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,310 root INFO copying mitmproxy/addons/cut.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,310 root INFO copying mitmproxy/addons/block.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,310 root INFO copying mitmproxy/addons/dns_resolver.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,311 root INFO copying mitmproxy/addons/clientplayback.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,311 root INFO copying mitmproxy/addons/update_alt_svc.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,311 root INFO copying mitmproxy/addons/tlsconfig.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,311 root INFO copying mitmproxy/addons/anticomp.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,312 root INFO copying mitmproxy/addons/disable_h2c.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,312 root INFO copying mitmproxy/addons/readfile.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,312 root INFO copying mitmproxy/addons/script.py -> build/lib/mitmproxy/addons 2025-11-18 23:15:29,313 root INFO creating build/lib/mitmproxy/platform 2025-11-18 23:15:29,313 root INFO copying mitmproxy/platform/openbsd.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,313 root INFO copying mitmproxy/platform/__init__.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,314 root INFO copying mitmproxy/platform/pf.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,314 root INFO copying mitmproxy/platform/linux.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,314 root INFO copying mitmproxy/platform/windows.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,314 root INFO copying mitmproxy/platform/osx.py -> build/lib/mitmproxy/platform 2025-11-18 23:15:29,315 root INFO creating build/lib/mitmproxy/utils 2025-11-18 23:15:29,315 root INFO copying mitmproxy/utils/magisk.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,315 root INFO copying mitmproxy/utils/emoji.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,316 root INFO copying mitmproxy/utils/asyncio_utils.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,316 root INFO copying mitmproxy/utils/vt_codes.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,316 root INFO copying mitmproxy/utils/__init__.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,317 root INFO copying mitmproxy/utils/signals.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,317 root INFO copying mitmproxy/utils/sliding_window.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,317 root INFO copying mitmproxy/utils/strutils.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,318 root INFO copying mitmproxy/utils/data.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,318 root INFO copying mitmproxy/utils/bits.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,318 root INFO copying mitmproxy/utils/human.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,318 root INFO copying mitmproxy/utils/debug.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,319 root INFO copying mitmproxy/utils/spec.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,319 root INFO copying mitmproxy/utils/typecheck.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,319 root INFO copying mitmproxy/utils/arg_check.py -> build/lib/mitmproxy/utils 2025-11-18 23:15:29,320 root INFO creating build/lib/mitmproxy/io 2025-11-18 23:15:29,320 root INFO copying mitmproxy/io/tnetstring.py -> build/lib/mitmproxy/io 2025-11-18 23:15:29,320 root INFO copying mitmproxy/io/__init__.py -> build/lib/mitmproxy/io 2025-11-18 23:15:29,321 root INFO copying mitmproxy/io/har.py -> build/lib/mitmproxy/io 2025-11-18 23:15:29,321 root INFO copying mitmproxy/io/compat.py -> build/lib/mitmproxy/io 2025-11-18 23:15:29,321 root INFO copying mitmproxy/io/io.py -> build/lib/mitmproxy/io 2025-11-18 23:15:29,322 root INFO creating build/lib/mitmproxy/tools 2025-11-18 23:15:29,322 root INFO copying mitmproxy/tools/dump.py -> build/lib/mitmproxy/tools 2025-11-18 23:15:29,322 root INFO copying mitmproxy/tools/cmdline.py -> build/lib/mitmproxy/tools 2025-11-18 23:15:29,322 root INFO copying mitmproxy/tools/__init__.py -> build/lib/mitmproxy/tools 2025-11-18 23:15:29,323 root INFO copying mitmproxy/tools/main.py -> build/lib/mitmproxy/tools 2025-11-18 23:15:29,323 root INFO creating build/lib/mitmproxy/script 2025-11-18 23:15:29,323 root INFO copying mitmproxy/script/__init__.py -> build/lib/mitmproxy/script 2025-11-18 23:15:29,323 root INFO copying mitmproxy/script/concurrent.py -> build/lib/mitmproxy/script 2025-11-18 23:15:29,324 root INFO creating build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,324 root INFO copying mitmproxy/contentviews/hex.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,324 root INFO copying mitmproxy/contentviews/protobuf.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,325 root INFO copying mitmproxy/contentviews/base.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,325 root INFO copying mitmproxy/contentviews/__init__.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,325 root INFO copying mitmproxy/contentviews/wbxml.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,326 root INFO copying mitmproxy/contentviews/grpc.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,326 root INFO copying mitmproxy/contentviews/multipart.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,326 root INFO copying mitmproxy/contentviews/msgpack.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,327 root INFO copying mitmproxy/contentviews/json.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,327 root INFO copying mitmproxy/contentviews/urlencoded.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,327 root INFO copying mitmproxy/contentviews/http3.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,327 root INFO copying mitmproxy/contentviews/auto.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,328 root INFO copying mitmproxy/contentviews/graphql.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,328 root INFO copying mitmproxy/contentviews/query.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,328 root INFO copying mitmproxy/contentviews/dns.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,329 root INFO copying mitmproxy/contentviews/mqtt.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,329 root INFO copying mitmproxy/contentviews/css.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,329 root INFO copying mitmproxy/contentviews/raw.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,330 root INFO copying mitmproxy/contentviews/xml_html.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,330 root INFO copying mitmproxy/contentviews/javascript.py -> build/lib/mitmproxy/contentviews 2025-11-18 23:15:29,330 root INFO creating build/lib/mitmproxy/coretypes 2025-11-18 23:15:29,330 root INFO copying mitmproxy/coretypes/bidi.py -> build/lib/mitmproxy/coretypes 2025-11-18 23:15:29,331 root INFO copying mitmproxy/coretypes/__init__.py -> build/lib/mitmproxy/coretypes 2025-11-18 23:15:29,331 root INFO copying mitmproxy/coretypes/serializable.py -> build/lib/mitmproxy/coretypes 2025-11-18 23:15:29,331 root INFO copying mitmproxy/coretypes/multidict.py -> build/lib/mitmproxy/coretypes 2025-11-18 23:15:29,332 root INFO creating build/lib/mitmproxy/test 2025-11-18 23:15:29,332 root INFO copying mitmproxy/test/tutils.py -> build/lib/mitmproxy/test 2025-11-18 23:15:29,332 root INFO copying mitmproxy/test/tflow.py -> build/lib/mitmproxy/test 2025-11-18 23:15:29,332 root INFO copying mitmproxy/test/taddons.py -> build/lib/mitmproxy/test 2025-11-18 23:15:29,333 root INFO creating build/lib/mitmproxy/net 2025-11-18 23:15:29,333 root INFO copying mitmproxy/net/local_ip.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,333 root INFO copying mitmproxy/net/server_spec.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,334 root INFO copying mitmproxy/net/encoding.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,334 root INFO copying mitmproxy/net/__init__.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,334 root INFO copying mitmproxy/net/check.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,335 root INFO copying mitmproxy/net/tls.py -> build/lib/mitmproxy/net 2025-11-18 23:15:29,335 root INFO creating build/lib/mitmproxy/contrib 2025-11-18 23:15:29,335 root INFO copying mitmproxy/contrib/imghdr.py -> build/lib/mitmproxy/contrib 2025-11-18 23:15:29,335 root INFO copying mitmproxy/contrib/__init__.py -> build/lib/mitmproxy/contrib 2025-11-18 23:15:29,336 root INFO creating build/lib/mitmproxy/proxy 2025-11-18 23:15:29,336 root INFO copying mitmproxy/proxy/context.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,336 root INFO copying mitmproxy/proxy/mode_specs.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,337 root INFO copying mitmproxy/proxy/server.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,337 root INFO copying mitmproxy/proxy/utils.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,337 root INFO copying mitmproxy/proxy/commands.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,338 root INFO copying mitmproxy/proxy/__init__.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,338 root INFO copying mitmproxy/proxy/mode_servers.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,338 root INFO copying mitmproxy/proxy/tunnel.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,338 root INFO copying mitmproxy/proxy/server_hooks.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,339 root INFO copying mitmproxy/proxy/events.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,339 root INFO copying mitmproxy/proxy/layer.py -> build/lib/mitmproxy/proxy 2025-11-18 23:15:29,339 root INFO creating build/lib/mitmproxy/addons/onboardingapp 2025-11-18 23:15:29,340 root INFO copying mitmproxy/addons/onboardingapp/__init__.py -> build/lib/mitmproxy/addons/onboardingapp 2025-11-18 23:15:29,340 root INFO creating build/lib/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,341 root INFO copying mitmproxy/utils/pyinstaller/hook-mitmproxy.tools.web.py -> build/lib/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,341 root INFO copying mitmproxy/utils/pyinstaller/hook-mitmproxy.py -> build/lib/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,341 root INFO copying mitmproxy/utils/pyinstaller/__init__.py -> build/lib/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,341 root INFO copying mitmproxy/utils/pyinstaller/hook-mitmproxy.addons.onboardingapp.py -> build/lib/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,342 root INFO creating build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,342 root INFO copying mitmproxy/tools/console/searchable.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,343 root INFO copying mitmproxy/tools/console/quickhelp.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,343 root INFO copying mitmproxy/tools/console/flowlist.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,343 root INFO copying mitmproxy/tools/console/consoleaddons.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,343 root INFO copying mitmproxy/tools/console/flowview.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,344 root INFO copying mitmproxy/tools/console/keymap.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,344 root INFO copying mitmproxy/tools/console/commands.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,344 root INFO copying mitmproxy/tools/console/window.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,345 root INFO copying mitmproxy/tools/console/defaultkeys.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,345 root INFO copying mitmproxy/tools/console/tabs.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,345 root INFO copying mitmproxy/tools/console/__init__.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,346 root INFO copying mitmproxy/tools/console/eventlog.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,346 root INFO copying mitmproxy/tools/console/flowdetailview.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,346 root INFO copying mitmproxy/tools/console/common.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,347 root INFO copying mitmproxy/tools/console/signals.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,347 root INFO copying mitmproxy/tools/console/help.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,347 root INFO copying mitmproxy/tools/console/statusbar.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,347 root INFO copying mitmproxy/tools/console/palettes.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,348 root INFO copying mitmproxy/tools/console/layoutwidget.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,348 root INFO copying mitmproxy/tools/console/master.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,348 root INFO copying mitmproxy/tools/console/keybindings.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,349 root INFO copying mitmproxy/tools/console/options.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,349 root INFO copying mitmproxy/tools/console/commandexecutor.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,349 root INFO copying mitmproxy/tools/console/overlay.py -> build/lib/mitmproxy/tools/console 2025-11-18 23:15:29,350 root INFO creating build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,350 root INFO copying mitmproxy/tools/web/app.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,350 root INFO copying mitmproxy/tools/web/web_columns.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,350 root INFO copying mitmproxy/tools/web/__init__.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,351 root INFO copying mitmproxy/tools/web/webaddons.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,351 root INFO copying mitmproxy/tools/web/static_viewer.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,351 root INFO copying mitmproxy/tools/web/master.py -> build/lib/mitmproxy/tools/web 2025-11-18 23:15:29,352 root INFO creating build/lib/mitmproxy/tools/console/commander 2025-11-18 23:15:29,352 root INFO copying mitmproxy/tools/console/commander/__init__.py -> build/lib/mitmproxy/tools/console/commander 2025-11-18 23:15:29,352 root INFO copying mitmproxy/tools/console/commander/commander.py -> build/lib/mitmproxy/tools/console/commander 2025-11-18 23:15:29,353 root INFO creating build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,353 root INFO copying mitmproxy/tools/console/grideditor/col_text.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,353 root INFO copying mitmproxy/tools/console/grideditor/col_viewany.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,353 root INFO copying mitmproxy/tools/console/grideditor/col_subgrid.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,354 root INFO copying mitmproxy/tools/console/grideditor/base.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,354 root INFO copying mitmproxy/tools/console/grideditor/__init__.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,354 root INFO copying mitmproxy/tools/console/grideditor/editors.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,355 root INFO copying mitmproxy/tools/console/grideditor/col_bytes.py -> build/lib/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,356 root INFO creating build/lib/mitmproxy/contentviews/image 2025-11-18 23:15:29,356 root INFO copying mitmproxy/contentviews/image/view.py -> build/lib/mitmproxy/contentviews/image 2025-11-18 23:15:29,356 root INFO copying mitmproxy/contentviews/image/image_parser.py -> build/lib/mitmproxy/contentviews/image 2025-11-18 23:15:29,356 root INFO copying mitmproxy/contentviews/image/__init__.py -> build/lib/mitmproxy/contentviews/image 2025-11-18 23:15:29,357 root INFO creating build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,357 root INFO copying mitmproxy/net/dns/classes.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,357 root INFO copying mitmproxy/net/dns/op_codes.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,358 root INFO copying mitmproxy/net/dns/response_codes.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,358 root INFO copying mitmproxy/net/dns/__init__.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,358 root INFO copying mitmproxy/net/dns/https_records.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,358 root INFO copying mitmproxy/net/dns/types.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,359 root INFO copying mitmproxy/net/dns/domain_names.py -> build/lib/mitmproxy/net/dns 2025-11-18 23:15:29,359 root INFO creating build/lib/mitmproxy/net/http 2025-11-18 23:15:29,359 root INFO copying mitmproxy/net/http/status_codes.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,360 root INFO copying mitmproxy/net/http/__init__.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,360 root INFO copying mitmproxy/net/http/headers.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,360 root INFO copying mitmproxy/net/http/url.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,361 root INFO copying mitmproxy/net/http/multipart.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,361 root INFO copying mitmproxy/net/http/cookies.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,361 root INFO copying mitmproxy/net/http/user_agents.py -> build/lib/mitmproxy/net/http 2025-11-18 23:15:29,362 root INFO creating build/lib/mitmproxy/net/http/http1 2025-11-18 23:15:29,362 root INFO copying mitmproxy/net/http/http1/assemble.py -> build/lib/mitmproxy/net/http/http1 2025-11-18 23:15:29,362 root INFO copying mitmproxy/net/http/http1/__init__.py -> build/lib/mitmproxy/net/http/http1 2025-11-18 23:15:29,362 root INFO copying mitmproxy/net/http/http1/read.py -> build/lib/mitmproxy/net/http/http1 2025-11-18 23:15:29,363 root INFO creating build/lib/mitmproxy/contrib/click 2025-11-18 23:15:29,363 root INFO copying mitmproxy/contrib/click/__init__.py -> build/lib/mitmproxy/contrib/click 2025-11-18 23:15:29,364 root INFO creating build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,364 root INFO copying mitmproxy/contrib/wbxml/ASWBXML.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,364 root INFO copying mitmproxy/contrib/wbxml/InvalidDataException.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,364 root INFO copying mitmproxy/contrib/wbxml/ASCommandResponse.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,365 root INFO copying mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,365 root INFO copying mitmproxy/contrib/wbxml/__init__.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,365 root INFO copying mitmproxy/contrib/wbxml/GlobalTokens.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,366 root INFO copying mitmproxy/contrib/wbxml/ASWBXMLCodePage.py -> build/lib/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,366 root INFO creating build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,366 root INFO copying mitmproxy/contrib/kaitaistruct/exif.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,367 root INFO copying mitmproxy/contrib/kaitaistruct/gif.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,367 root INFO copying mitmproxy/contrib/kaitaistruct/jpeg.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,367 root INFO copying mitmproxy/contrib/kaitaistruct/__init__.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,368 root INFO copying mitmproxy/contrib/kaitaistruct/google_protobuf.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,368 root INFO copying mitmproxy/contrib/kaitaistruct/vlq_base128_le.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,368 root INFO copying mitmproxy/contrib/kaitaistruct/png.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,369 root INFO copying mitmproxy/contrib/kaitaistruct/tls_client_hello.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,369 root INFO copying mitmproxy/contrib/kaitaistruct/ico.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,369 root INFO copying mitmproxy/contrib/kaitaistruct/dtls_client_hello.py -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,370 root INFO creating build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,370 root INFO copying mitmproxy/proxy/layers/udp.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,370 root INFO copying mitmproxy/proxy/layers/__init__.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,370 root INFO copying mitmproxy/proxy/layers/tcp.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,371 root INFO copying mitmproxy/proxy/layers/websocket.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,371 root INFO copying mitmproxy/proxy/layers/dns.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,371 root INFO copying mitmproxy/proxy/layers/modes.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,372 root INFO copying mitmproxy/proxy/layers/tls.py -> build/lib/mitmproxy/proxy/layers 2025-11-18 23:15:29,372 root INFO creating build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,372 root INFO copying mitmproxy/proxy/layers/quic/_client_hello_parser.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,373 root INFO copying mitmproxy/proxy/layers/quic/_raw_layers.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,373 root INFO copying mitmproxy/proxy/layers/quic/_commands.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,373 root INFO copying mitmproxy/proxy/layers/quic/__init__.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,374 root INFO copying mitmproxy/proxy/layers/quic/_stream_layers.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,374 root INFO copying mitmproxy/proxy/layers/quic/_events.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,374 root INFO copying mitmproxy/proxy/layers/quic/_hooks.py -> build/lib/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,375 root INFO creating build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,375 root INFO copying mitmproxy/proxy/layers/http/_http_h3.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,375 root INFO copying mitmproxy/proxy/layers/http/_http_h2.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,375 root INFO copying mitmproxy/proxy/layers/http/_http2.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,376 root INFO copying mitmproxy/proxy/layers/http/_upstream_proxy.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,376 root INFO copying mitmproxy/proxy/layers/http/_base.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,376 root INFO copying mitmproxy/proxy/layers/http/__init__.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,377 root INFO copying mitmproxy/proxy/layers/http/_events.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,377 root INFO copying mitmproxy/proxy/layers/http/_hooks.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,377 root INFO copying mitmproxy/proxy/layers/http/_http3.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,378 root INFO copying mitmproxy/proxy/layers/http/_http1.py -> build/lib/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,378 root INFO running egg_info 2025-11-18 23:15:29,387 root INFO creating mitmproxy.egg-info 2025-11-18 23:15:29,387 root INFO writing mitmproxy.egg-info/PKG-INFO 2025-11-18 23:15:29,394 root INFO writing dependency_links to mitmproxy.egg-info/dependency_links.txt 2025-11-18 23:15:29,395 root INFO writing entry points to mitmproxy.egg-info/entry_points.txt 2025-11-18 23:15:29,400 root INFO writing requirements to mitmproxy.egg-info/requires.txt 2025-11-18 23:15:29,400 root INFO writing top-level names to mitmproxy.egg-info/top_level.txt 2025-11-18 23:15:29,400 root INFO writing manifest file 'mitmproxy.egg-info/SOURCES.txt' 2025-11-18 23:15:29,420 root INFO reading manifest file 'mitmproxy.egg-info/SOURCES.txt' 2025-11-18 23:15:29,420 root INFO reading manifest template 'MANIFEST.in' 2025-11-18 23:15:29,425 root WARNING warning: no previously-included files matching '*.pyc' found under directory '*' 2025-11-18 23:15:29,425 root WARNING warning: no previously-included files matching '*.pyo' found under directory '*' 2025-11-18 23:15:29,426 root WARNING warning: no previously-included files matching '*.swo' found under directory '*' 2025-11-18 23:15:29,427 root WARNING warning: no previously-included files matching '*.swp' found under directory '*' 2025-11-18 23:15:29,427 root WARNING warning: no previously-included files matching '*.map' found under directory '*' 2025-11-18 23:15:29,427 root INFO adding license file 'LICENSE' 2025-11-18 23:15:29,433 root INFO writing manifest file 'mitmproxy.egg-info/SOURCES.txt' 2025-11-18 23:15:29,440 root INFO copying mitmproxy/py.typed -> build/lib/mitmproxy 2025-11-18 23:15:29,440 root INFO copying mitmproxy/contrib/README.md -> build/lib/mitmproxy/contrib 2025-11-18 23:15:29,441 root INFO creating build/lib/mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,441 root INFO copying mitmproxy/addons/onboardingapp/static/bootstrap.min.css -> build/lib/mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,441 root INFO copying mitmproxy/addons/onboardingapp/static/mitmproxy.css -> build/lib/mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,442 root INFO creating build/lib/mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,442 root INFO copying mitmproxy/addons/onboardingapp/templates/index.html -> build/lib/mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,442 root INFO copying mitmproxy/addons/onboardingapp/templates/layout.html -> build/lib/mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,442 root INFO creating build/lib/mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,443 root INFO copying mitmproxy/addons/onboardingapp/static/images/favicon.ico -> build/lib/mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,443 root INFO copying mitmproxy/addons/onboardingapp/static/images/mitmproxy-long.png -> build/lib/mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,443 root INFO creating build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,444 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/android-brands.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,444 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/apple-brands.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,444 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/certificate-solid.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,444 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/firefox-browser-brands.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,445 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/linux-brands.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,445 root INFO copying mitmproxy/addons/onboardingapp/templates/icons/windows-brands.svg -> build/lib/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,446 root INFO creating build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,446 root INFO copying mitmproxy/tools/web/static/app.css -> build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,446 root INFO copying mitmproxy/tools/web/static/app.js -> build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,447 root INFO copying mitmproxy/tools/web/static/static.js -> build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,447 root INFO copying mitmproxy/tools/web/static/vendor.css -> build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,448 root INFO copying mitmproxy/tools/web/static/vendor.js -> build/lib/mitmproxy/tools/web/static 2025-11-18 23:15:29,449 root INFO creating build/lib/mitmproxy/tools/web/templates 2025-11-18 23:15:29,449 root INFO copying mitmproxy/tools/web/templates/index.html -> build/lib/mitmproxy/tools/web/templates 2025-11-18 23:15:29,449 root INFO creating build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,449 root INFO copying mitmproxy/tools/web/static/fonts/fontawesome-webfont.eot -> build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,450 root INFO copying mitmproxy/tools/web/static/fonts/fontawesome-webfont.svg -> build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,451 root INFO copying mitmproxy/tools/web/static/fonts/fontawesome-webfont.ttf -> build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,451 root INFO copying mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff -> build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,452 root INFO copying mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff2 -> build/lib/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,452 root INFO creating build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,452 root INFO copying mitmproxy/tools/web/static/images/favicon.ico -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,453 root INFO copying mitmproxy/tools/web/static/images/resourceDnsIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,453 root INFO copying mitmproxy/tools/web/static/images/resourceExecutableIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,454 root INFO copying mitmproxy/tools/web/static/images/resourceFlashIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,454 root INFO copying mitmproxy/tools/web/static/images/resourceImageIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,454 root INFO copying mitmproxy/tools/web/static/images/resourceJavaIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,455 root INFO copying mitmproxy/tools/web/static/images/resourceNotModifiedIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,455 root INFO copying mitmproxy/tools/web/static/images/resourceQuicIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,455 root INFO copying mitmproxy/tools/web/static/images/resourceRedirectIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,456 root INFO copying mitmproxy/tools/web/static/images/resourceTcpIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,456 root INFO copying mitmproxy/tools/web/static/images/resourceUdpIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,456 root INFO copying mitmproxy/tools/web/static/images/resourceWebSocketIcon.png -> build/lib/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,456 root INFO creating build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,457 root INFO copying mitmproxy/tools/web/static/images/chrome-devtools/LICENSE -> build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,457 root INFO copying mitmproxy/tools/web/static/images/chrome-devtools/resourceCSSIcon.png -> build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,457 root INFO copying mitmproxy/tools/web/static/images/chrome-devtools/resourceDocumentIcon.png -> build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,458 root INFO copying mitmproxy/tools/web/static/images/chrome-devtools/resourceJSIcon.png -> build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,458 root INFO copying mitmproxy/tools/web/static/images/chrome-devtools/resourcePlainIcon.png -> build/lib/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,458 root INFO copying mitmproxy/contrib/click/LICENSE.BSD-3 -> build/lib/mitmproxy/contrib/click 2025-11-18 23:15:29,458 root INFO copying mitmproxy/contrib/kaitaistruct/LICENSE -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,459 root INFO copying mitmproxy/contrib/kaitaistruct/README.md -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,459 root INFO copying mitmproxy/contrib/kaitaistruct/dtls_client_hello.ksy -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,459 root INFO copying mitmproxy/contrib/kaitaistruct/make.sh -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,460 root INFO copying mitmproxy/contrib/kaitaistruct/tls_client_hello.ksy -> build/lib/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,483 root INFO installing to build/bdist.linux-i686/wheel 2025-11-18 23:15:29,483 root INFO running install 2025-11-18 23:15:29,495 root INFO running install_lib 2025-11-18 23:15:29,505 root INFO creating build/bdist.linux-i686/wheel 2025-11-18 23:15:29,505 root INFO creating build/bdist.linux-i686/wheel/mitmproxy 2025-11-18 23:15:29,505 root INFO copying build/lib/mitmproxy/hooks.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,506 root INFO copying build/lib/mitmproxy/exceptions.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,506 root INFO copying build/lib/mitmproxy/certs.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,506 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons 2025-11-18 23:15:29,506 root INFO copying build/lib/mitmproxy/addons/eventstore.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,507 root INFO copying build/lib/mitmproxy/addons/view.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,507 root INFO copying build/lib/mitmproxy/addons/command_history.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,507 root INFO copying build/lib/mitmproxy/addons/serverplayback.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,508 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons/onboardingapp 2025-11-18 23:15:29,508 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,508 root INFO copying build/lib/mitmproxy/addons/onboardingapp/static/bootstrap.min.css -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,509 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,509 root INFO copying build/lib/mitmproxy/addons/onboardingapp/static/images/mitmproxy-long.png -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,509 root INFO copying build/lib/mitmproxy/addons/onboardingapp/static/images/favicon.ico -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/static/images 2025-11-18 23:15:29,510 root INFO copying build/lib/mitmproxy/addons/onboardingapp/static/mitmproxy.css -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/static 2025-11-18 23:15:29,510 root INFO copying build/lib/mitmproxy/addons/onboardingapp/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp 2025-11-18 23:15:29,510 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,510 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/index.html -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,511 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,511 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/apple-brands.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,511 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/android-brands.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,511 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/firefox-browser-brands.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,512 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/linux-brands.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,512 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/windows-brands.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,512 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/icons/certificate-solid.svg -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates/icons 2025-11-18 23:15:29,512 root INFO copying build/lib/mitmproxy/addons/onboardingapp/templates/layout.html -> build/bdist.linux-i686/wheel/./mitmproxy/addons/onboardingapp/templates 2025-11-18 23:15:29,513 root INFO copying build/lib/mitmproxy/addons/server_side_events.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,513 root INFO copying build/lib/mitmproxy/addons/next_layer.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,513 root INFO copying build/lib/mitmproxy/addons/asgiapp.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,513 root INFO copying build/lib/mitmproxy/addons/keepserving.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,514 root INFO copying build/lib/mitmproxy/addons/strip_dns_https_records.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,514 root INFO copying build/lib/mitmproxy/addons/proxyauth.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,514 root INFO copying build/lib/mitmproxy/addons/mapremote.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,514 root INFO copying build/lib/mitmproxy/addons/proxyserver.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,515 root INFO copying build/lib/mitmproxy/addons/blocklist.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,515 root INFO copying build/lib/mitmproxy/addons/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,515 root INFO copying build/lib/mitmproxy/addons/errorcheck.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,515 root INFO copying build/lib/mitmproxy/addons/onboarding.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,516 root INFO copying build/lib/mitmproxy/addons/dumper.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,516 root INFO copying build/lib/mitmproxy/addons/stickycookie.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,516 root INFO copying build/lib/mitmproxy/addons/maplocal.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,516 root INFO copying build/lib/mitmproxy/addons/export.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,517 root INFO copying build/lib/mitmproxy/addons/save.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,517 root INFO copying build/lib/mitmproxy/addons/anticache.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,517 root INFO copying build/lib/mitmproxy/addons/savehar.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,517 root INFO copying build/lib/mitmproxy/addons/browser.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,518 root INFO copying build/lib/mitmproxy/addons/comment.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,518 root INFO copying build/lib/mitmproxy/addons/modifyheaders.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,518 root INFO copying build/lib/mitmproxy/addons/core.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,518 root INFO copying build/lib/mitmproxy/addons/stickyauth.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,519 root INFO copying build/lib/mitmproxy/addons/modifybody.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,519 root INFO copying build/lib/mitmproxy/addons/termlog.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,519 root INFO copying build/lib/mitmproxy/addons/intercept.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,519 root INFO copying build/lib/mitmproxy/addons/upstream_auth.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,520 root INFO copying build/lib/mitmproxy/addons/cut.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,520 root INFO copying build/lib/mitmproxy/addons/block.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,520 root INFO copying build/lib/mitmproxy/addons/dns_resolver.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,520 root INFO copying build/lib/mitmproxy/addons/clientplayback.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,521 root INFO copying build/lib/mitmproxy/addons/update_alt_svc.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,521 root INFO copying build/lib/mitmproxy/addons/tlsconfig.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,521 root INFO copying build/lib/mitmproxy/addons/anticomp.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,521 root INFO copying build/lib/mitmproxy/addons/disable_h2c.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,522 root INFO copying build/lib/mitmproxy/addons/readfile.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,522 root INFO copying build/lib/mitmproxy/addons/script.py -> build/bdist.linux-i686/wheel/./mitmproxy/addons 2025-11-18 23:15:29,522 root INFO copying build/lib/mitmproxy/flowfilter.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,522 root INFO copying build/lib/mitmproxy/udp.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,523 root INFO copying build/lib/mitmproxy/command_lexer.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,523 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/platform 2025-11-18 23:15:29,523 root INFO copying build/lib/mitmproxy/platform/openbsd.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,523 root INFO copying build/lib/mitmproxy/platform/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,524 root INFO copying build/lib/mitmproxy/platform/pf.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,524 root INFO copying build/lib/mitmproxy/platform/linux.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,524 root INFO copying build/lib/mitmproxy/platform/windows.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,524 root INFO copying build/lib/mitmproxy/platform/osx.py -> build/bdist.linux-i686/wheel/./mitmproxy/platform 2025-11-18 23:15:29,525 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/utils 2025-11-18 23:15:29,525 root INFO copying build/lib/mitmproxy/utils/magisk.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,525 root INFO copying build/lib/mitmproxy/utils/emoji.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,526 root INFO copying build/lib/mitmproxy/utils/asyncio_utils.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,526 root INFO copying build/lib/mitmproxy/utils/vt_codes.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,526 root INFO copying build/lib/mitmproxy/utils/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,526 root INFO copying build/lib/mitmproxy/utils/signals.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,526 root INFO copying build/lib/mitmproxy/utils/sliding_window.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,527 root INFO copying build/lib/mitmproxy/utils/strutils.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,527 root INFO copying build/lib/mitmproxy/utils/data.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,527 root INFO copying build/lib/mitmproxy/utils/bits.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,527 root INFO copying build/lib/mitmproxy/utils/human.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,528 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,528 root INFO copying build/lib/mitmproxy/utils/pyinstaller/hook-mitmproxy.tools.web.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,528 root INFO copying build/lib/mitmproxy/utils/pyinstaller/hook-mitmproxy.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,529 root INFO copying build/lib/mitmproxy/utils/pyinstaller/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,529 root INFO copying build/lib/mitmproxy/utils/pyinstaller/hook-mitmproxy.addons.onboardingapp.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils/pyinstaller 2025-11-18 23:15:29,529 root INFO copying build/lib/mitmproxy/utils/debug.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,529 root INFO copying build/lib/mitmproxy/utils/spec.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,530 root INFO copying build/lib/mitmproxy/utils/typecheck.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,530 root INFO copying build/lib/mitmproxy/utils/arg_check.py -> build/bdist.linux-i686/wheel/./mitmproxy/utils 2025-11-18 23:15:29,530 root INFO copying build/lib/mitmproxy/connection.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,530 root INFO copying build/lib/mitmproxy/version.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,531 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/io 2025-11-18 23:15:29,531 root INFO copying build/lib/mitmproxy/io/tnetstring.py -> build/bdist.linux-i686/wheel/./mitmproxy/io 2025-11-18 23:15:29,531 root INFO copying build/lib/mitmproxy/io/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/io 2025-11-18 23:15:29,531 root INFO copying build/lib/mitmproxy/io/har.py -> build/bdist.linux-i686/wheel/./mitmproxy/io 2025-11-18 23:15:29,532 root INFO copying build/lib/mitmproxy/io/compat.py -> build/bdist.linux-i686/wheel/./mitmproxy/io 2025-11-18 23:15:29,532 root INFO copying build/lib/mitmproxy/io/io.py -> build/bdist.linux-i686/wheel/./mitmproxy/io 2025-11-18 23:15:29,532 root INFO copying build/lib/mitmproxy/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,532 root INFO copying build/lib/mitmproxy/ctx.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,533 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools 2025-11-18 23:15:29,533 root INFO copying build/lib/mitmproxy/tools/dump.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools 2025-11-18 23:15:29,533 root INFO copying build/lib/mitmproxy/tools/cmdline.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools 2025-11-18 23:15:29,533 root INFO copying build/lib/mitmproxy/tools/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools 2025-11-18 23:15:29,534 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/console 2025-11-18 23:15:29,534 root INFO copying build/lib/mitmproxy/tools/console/searchable.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,534 root INFO copying build/lib/mitmproxy/tools/console/quickhelp.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,534 root INFO copying build/lib/mitmproxy/tools/console/flowlist.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,535 root INFO copying build/lib/mitmproxy/tools/console/consoleaddons.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,535 root INFO copying build/lib/mitmproxy/tools/console/flowview.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,535 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/console/commander 2025-11-18 23:15:29,536 root INFO copying build/lib/mitmproxy/tools/console/commander/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/commander 2025-11-18 23:15:29,536 root INFO copying build/lib/mitmproxy/tools/console/commander/commander.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/commander 2025-11-18 23:15:29,536 root INFO copying build/lib/mitmproxy/tools/console/keymap.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,536 root INFO copying build/lib/mitmproxy/tools/console/commands.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,537 root INFO copying build/lib/mitmproxy/tools/console/window.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,537 root INFO copying build/lib/mitmproxy/tools/console/defaultkeys.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,537 root INFO copying build/lib/mitmproxy/tools/console/tabs.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,537 root INFO copying build/lib/mitmproxy/tools/console/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,538 root INFO copying build/lib/mitmproxy/tools/console/eventlog.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,538 root INFO copying build/lib/mitmproxy/tools/console/flowdetailview.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,538 root INFO copying build/lib/mitmproxy/tools/console/common.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,538 root INFO copying build/lib/mitmproxy/tools/console/signals.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,539 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,539 root INFO copying build/lib/mitmproxy/tools/console/grideditor/col_text.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,539 root INFO copying build/lib/mitmproxy/tools/console/grideditor/col_viewany.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,539 root INFO copying build/lib/mitmproxy/tools/console/grideditor/col_subgrid.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,540 root INFO copying build/lib/mitmproxy/tools/console/grideditor/base.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,540 root INFO copying build/lib/mitmproxy/tools/console/grideditor/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,540 root INFO copying build/lib/mitmproxy/tools/console/grideditor/editors.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,540 root INFO copying build/lib/mitmproxy/tools/console/grideditor/col_bytes.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console/grideditor 2025-11-18 23:15:29,541 root INFO copying build/lib/mitmproxy/tools/console/help.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,541 root INFO copying build/lib/mitmproxy/tools/console/statusbar.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,541 root INFO copying build/lib/mitmproxy/tools/console/palettes.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,541 root INFO copying build/lib/mitmproxy/tools/console/layoutwidget.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,542 root INFO copying build/lib/mitmproxy/tools/console/master.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,542 root INFO copying build/lib/mitmproxy/tools/console/keybindings.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,542 root INFO copying build/lib/mitmproxy/tools/console/options.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,542 root INFO copying build/lib/mitmproxy/tools/console/commandexecutor.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,543 root INFO copying build/lib/mitmproxy/tools/console/overlay.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/console 2025-11-18 23:15:29,543 root INFO copying build/lib/mitmproxy/tools/main.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools 2025-11-18 23:15:29,543 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web 2025-11-18 23:15:29,543 root INFO copying build/lib/mitmproxy/tools/web/app.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,544 root INFO copying build/lib/mitmproxy/tools/web/web_columns.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,544 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web/static 2025-11-18 23:15:29,544 root INFO copying build/lib/mitmproxy/tools/web/static/app.js -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static 2025-11-18 23:15:29,545 root INFO copying build/lib/mitmproxy/tools/web/static/vendor.js -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static 2025-11-18 23:15:29,546 root INFO copying build/lib/mitmproxy/tools/web/static/static.js -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static 2025-11-18 23:15:29,547 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,547 root INFO copying build/lib/mitmproxy/tools/web/static/fonts/fontawesome-webfont.svg -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,548 root INFO copying build/lib/mitmproxy/tools/web/static/fonts/fontawesome-webfont.ttf -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,548 root INFO copying build/lib/mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff2 -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,548 root INFO copying build/lib/mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,549 root INFO copying build/lib/mitmproxy/tools/web/static/fonts/fontawesome-webfont.eot -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/fonts 2025-11-18 23:15:29,549 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web/static/images 2025-11-18 23:15:29,550 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,550 root INFO copying build/lib/mitmproxy/tools/web/static/images/chrome-devtools/resourceJSIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,550 root INFO copying build/lib/mitmproxy/tools/web/static/images/chrome-devtools/resourceCSSIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,550 root INFO copying build/lib/mitmproxy/tools/web/static/images/chrome-devtools/resourceDocumentIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,551 root INFO copying build/lib/mitmproxy/tools/web/static/images/chrome-devtools/LICENSE -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,551 root INFO copying build/lib/mitmproxy/tools/web/static/images/chrome-devtools/resourcePlainIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images/chrome-devtools 2025-11-18 23:15:29,551 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceImageIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,551 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceTcpIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,552 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceUdpIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,552 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceJavaIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,552 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceFlashIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,552 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceQuicIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,553 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceDnsIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,553 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceRedirectIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,553 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceNotModifiedIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,553 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceWebSocketIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,554 root INFO copying build/lib/mitmproxy/tools/web/static/images/favicon.ico -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,554 root INFO copying build/lib/mitmproxy/tools/web/static/images/resourceExecutableIcon.png -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static/images 2025-11-18 23:15:29,555 root INFO copying build/lib/mitmproxy/tools/web/static/app.css -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static 2025-11-18 23:15:29,555 root INFO copying build/lib/mitmproxy/tools/web/static/vendor.css -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/static 2025-11-18 23:15:29,555 root INFO copying build/lib/mitmproxy/tools/web/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,556 root INFO copying build/lib/mitmproxy/tools/web/webaddons.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,556 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/tools/web/templates 2025-11-18 23:15:29,556 root INFO copying build/lib/mitmproxy/tools/web/templates/index.html -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web/templates 2025-11-18 23:15:29,556 root INFO copying build/lib/mitmproxy/tools/web/static_viewer.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,557 root INFO copying build/lib/mitmproxy/tools/web/master.py -> build/bdist.linux-i686/wheel/./mitmproxy/tools/web 2025-11-18 23:15:29,557 root INFO copying build/lib/mitmproxy/tcp.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,557 root INFO copying build/lib/mitmproxy/websocket.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,557 root INFO copying build/lib/mitmproxy/command.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,558 root INFO copying build/lib/mitmproxy/log.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,558 root INFO copying build/lib/mitmproxy/py.typed -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,558 root INFO copying build/lib/mitmproxy/addonmanager.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,559 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/script 2025-11-18 23:15:29,559 root INFO copying build/lib/mitmproxy/script/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/script 2025-11-18 23:15:29,559 root INFO copying build/lib/mitmproxy/script/concurrent.py -> build/bdist.linux-i686/wheel/./mitmproxy/script 2025-11-18 23:15:29,559 root INFO copying build/lib/mitmproxy/optmanager.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,560 root INFO copying build/lib/mitmproxy/types.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,560 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contentviews 2025-11-18 23:15:29,560 root INFO copying build/lib/mitmproxy/contentviews/hex.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,560 root INFO copying build/lib/mitmproxy/contentviews/protobuf.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,561 root INFO copying build/lib/mitmproxy/contentviews/base.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,561 root INFO copying build/lib/mitmproxy/contentviews/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,561 root INFO copying build/lib/mitmproxy/contentviews/wbxml.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,561 root INFO copying build/lib/mitmproxy/contentviews/grpc.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,562 root INFO copying build/lib/mitmproxy/contentviews/multipart.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,562 root INFO copying build/lib/mitmproxy/contentviews/msgpack.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,562 root INFO copying build/lib/mitmproxy/contentviews/json.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,562 root INFO copying build/lib/mitmproxy/contentviews/urlencoded.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,563 root INFO copying build/lib/mitmproxy/contentviews/http3.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,563 root INFO copying build/lib/mitmproxy/contentviews/auto.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,563 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contentviews/image 2025-11-18 23:15:29,563 root INFO copying build/lib/mitmproxy/contentviews/image/view.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews/image 2025-11-18 23:15:29,564 root INFO copying build/lib/mitmproxy/contentviews/image/image_parser.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews/image 2025-11-18 23:15:29,564 root INFO copying build/lib/mitmproxy/contentviews/image/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews/image 2025-11-18 23:15:29,564 root INFO copying build/lib/mitmproxy/contentviews/graphql.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,564 root INFO copying build/lib/mitmproxy/contentviews/query.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,565 root INFO copying build/lib/mitmproxy/contentviews/dns.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,565 root INFO copying build/lib/mitmproxy/contentviews/mqtt.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,565 root INFO copying build/lib/mitmproxy/contentviews/css.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,565 root INFO copying build/lib/mitmproxy/contentviews/raw.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,566 root INFO copying build/lib/mitmproxy/contentviews/xml_html.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,566 root INFO copying build/lib/mitmproxy/contentviews/javascript.py -> build/bdist.linux-i686/wheel/./mitmproxy/contentviews 2025-11-18 23:15:29,566 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/coretypes 2025-11-18 23:15:29,567 root INFO copying build/lib/mitmproxy/coretypes/bidi.py -> build/bdist.linux-i686/wheel/./mitmproxy/coretypes 2025-11-18 23:15:29,567 root INFO copying build/lib/mitmproxy/coretypes/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/coretypes 2025-11-18 23:15:29,567 root INFO copying build/lib/mitmproxy/coretypes/serializable.py -> build/bdist.linux-i686/wheel/./mitmproxy/coretypes 2025-11-18 23:15:29,567 root INFO copying build/lib/mitmproxy/coretypes/multidict.py -> build/bdist.linux-i686/wheel/./mitmproxy/coretypes 2025-11-18 23:15:29,568 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/test 2025-11-18 23:15:29,568 root INFO copying build/lib/mitmproxy/test/tutils.py -> build/bdist.linux-i686/wheel/./mitmproxy/test 2025-11-18 23:15:29,568 root INFO copying build/lib/mitmproxy/test/tflow.py -> build/bdist.linux-i686/wheel/./mitmproxy/test 2025-11-18 23:15:29,568 root INFO copying build/lib/mitmproxy/test/taddons.py -> build/bdist.linux-i686/wheel/./mitmproxy/test 2025-11-18 23:15:29,569 root INFO copying build/lib/mitmproxy/dns.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,569 root INFO copying build/lib/mitmproxy/flow.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,569 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/net 2025-11-18 23:15:29,569 root INFO copying build/lib/mitmproxy/net/local_ip.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,570 root INFO copying build/lib/mitmproxy/net/server_spec.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,570 root INFO copying build/lib/mitmproxy/net/encoding.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,570 root INFO copying build/lib/mitmproxy/net/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,571 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/net/dns 2025-11-18 23:15:29,571 root INFO copying build/lib/mitmproxy/net/dns/classes.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,571 root INFO copying build/lib/mitmproxy/net/dns/op_codes.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,571 root INFO copying build/lib/mitmproxy/net/dns/response_codes.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,571 root INFO copying build/lib/mitmproxy/net/dns/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,572 root INFO copying build/lib/mitmproxy/net/dns/https_records.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,572 root INFO copying build/lib/mitmproxy/net/dns/types.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,572 root INFO copying build/lib/mitmproxy/net/dns/domain_names.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/dns 2025-11-18 23:15:29,573 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/net/http 2025-11-18 23:15:29,573 root INFO copying build/lib/mitmproxy/net/http/status_codes.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,573 root INFO copying build/lib/mitmproxy/net/http/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,573 root INFO copying build/lib/mitmproxy/net/http/headers.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,574 root INFO copying build/lib/mitmproxy/net/http/url.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,574 root INFO copying build/lib/mitmproxy/net/http/multipart.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,574 root INFO copying build/lib/mitmproxy/net/http/cookies.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,574 root INFO copying build/lib/mitmproxy/net/http/user_agents.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http 2025-11-18 23:15:29,575 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/net/http/http1 2025-11-18 23:15:29,575 root INFO copying build/lib/mitmproxy/net/http/http1/assemble.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http/http1 2025-11-18 23:15:29,575 root INFO copying build/lib/mitmproxy/net/http/http1/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http/http1 2025-11-18 23:15:29,575 root INFO copying build/lib/mitmproxy/net/http/http1/read.py -> build/bdist.linux-i686/wheel/./mitmproxy/net/http/http1 2025-11-18 23:15:29,576 root INFO copying build/lib/mitmproxy/net/check.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,576 root INFO copying build/lib/mitmproxy/net/tls.py -> build/bdist.linux-i686/wheel/./mitmproxy/net 2025-11-18 23:15:29,576 root INFO copying build/lib/mitmproxy/master.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,576 root INFO copying build/lib/mitmproxy/http.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,577 root INFO copying build/lib/mitmproxy/options.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,577 root INFO copying build/lib/mitmproxy/eventsequence.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,577 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contrib 2025-11-18 23:15:29,577 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contrib/click 2025-11-18 23:15:29,578 root INFO copying build/lib/mitmproxy/contrib/click/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/click 2025-11-18 23:15:29,578 root INFO copying build/lib/mitmproxy/contrib/click/LICENSE.BSD-3 -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/click 2025-11-18 23:15:29,578 root INFO copying build/lib/mitmproxy/contrib/imghdr.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib 2025-11-18 23:15:29,578 root INFO copying build/lib/mitmproxy/contrib/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib 2025-11-18 23:15:29,579 root INFO copying build/lib/mitmproxy/contrib/README.md -> build/bdist.linux-i686/wheel/./mitmproxy/contrib 2025-11-18 23:15:29,579 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contrib/wbxml 2025-11-18 23:15:29,579 root INFO copying build/lib/mitmproxy/contrib/wbxml/ASWBXML.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,580 root INFO copying build/lib/mitmproxy/contrib/wbxml/InvalidDataException.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,580 root INFO copying build/lib/mitmproxy/contrib/wbxml/ASCommandResponse.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,580 root INFO copying build/lib/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,580 root INFO copying build/lib/mitmproxy/contrib/wbxml/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,581 root INFO copying build/lib/mitmproxy/contrib/wbxml/GlobalTokens.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,581 root INFO copying build/lib/mitmproxy/contrib/wbxml/ASWBXMLCodePage.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/wbxml 2025-11-18 23:15:29,581 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,581 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/exif.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,582 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/gif.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,582 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/jpeg.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,582 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/dtls_client_hello.ksy -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,582 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,583 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/LICENSE -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,583 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/make.sh -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,583 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/google_protobuf.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,583 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/vlq_base128_le.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,584 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/tls_client_hello.ksy -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,584 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/README.md -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,584 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/png.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,584 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/tls_client_hello.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,585 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/ico.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,585 root INFO copying build/lib/mitmproxy/contrib/kaitaistruct/dtls_client_hello.py -> build/bdist.linux-i686/wheel/./mitmproxy/contrib/kaitaistruct 2025-11-18 23:15:29,585 root INFO copying build/lib/mitmproxy/tls.py -> build/bdist.linux-i686/wheel/./mitmproxy 2025-11-18 23:15:29,585 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/proxy 2025-11-18 23:15:29,586 root INFO copying build/lib/mitmproxy/proxy/context.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,586 root INFO copying build/lib/mitmproxy/proxy/mode_specs.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,586 root INFO copying build/lib/mitmproxy/proxy/server.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,586 root INFO copying build/lib/mitmproxy/proxy/utils.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,587 root INFO copying build/lib/mitmproxy/proxy/commands.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,587 root INFO copying build/lib/mitmproxy/proxy/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,587 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/proxy/layers 2025-11-18 23:15:29,587 root INFO copying build/lib/mitmproxy/proxy/layers/udp.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,588 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,588 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_client_hello_parser.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,588 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_raw_layers.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,589 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_commands.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,589 root INFO copying build/lib/mitmproxy/proxy/layers/quic/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,589 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_stream_layers.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,589 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_events.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,590 root INFO copying build/lib/mitmproxy/proxy/layers/quic/_hooks.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/quic 2025-11-18 23:15:29,590 root INFO copying build/lib/mitmproxy/proxy/layers/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,590 root INFO copying build/lib/mitmproxy/proxy/layers/tcp.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,591 root INFO copying build/lib/mitmproxy/proxy/layers/websocket.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,591 root INFO creating build/bdist.linux-i686/wheel/mitmproxy/proxy/layers/http 2025-11-18 23:15:29,591 root INFO copying build/lib/mitmproxy/proxy/layers/http/_http_h3.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,591 root INFO copying build/lib/mitmproxy/proxy/layers/http/_http_h2.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,592 root INFO copying build/lib/mitmproxy/proxy/layers/http/_http2.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,592 root INFO copying build/lib/mitmproxy/proxy/layers/http/_upstream_proxy.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,592 root INFO copying build/lib/mitmproxy/proxy/layers/http/_base.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,593 root INFO copying build/lib/mitmproxy/proxy/layers/http/__init__.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,593 root INFO copying build/lib/mitmproxy/proxy/layers/http/_events.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,593 root INFO copying build/lib/mitmproxy/proxy/layers/http/_hooks.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,594 root INFO copying build/lib/mitmproxy/proxy/layers/http/_http3.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,594 root INFO copying build/lib/mitmproxy/proxy/layers/http/_http1.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers/http 2025-11-18 23:15:29,594 root INFO copying build/lib/mitmproxy/proxy/layers/dns.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,594 root INFO copying build/lib/mitmproxy/proxy/layers/modes.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,595 root INFO copying build/lib/mitmproxy/proxy/layers/tls.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy/layers 2025-11-18 23:15:29,595 root INFO copying build/lib/mitmproxy/proxy/mode_servers.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,595 root INFO copying build/lib/mitmproxy/proxy/tunnel.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,596 root INFO copying build/lib/mitmproxy/proxy/server_hooks.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,596 root INFO copying build/lib/mitmproxy/proxy/events.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,596 root INFO copying build/lib/mitmproxy/proxy/layer.py -> build/bdist.linux-i686/wheel/./mitmproxy/proxy 2025-11-18 23:15:29,596 root INFO running install_egg_info 2025-11-18 23:15:29,606 root INFO Copying mitmproxy.egg-info to build/bdist.linux-i686/wheel/./mitmproxy-11.0.0-py3.12.egg-info 2025-11-18 23:15:29,608 root INFO running install_scripts 2025-11-18 23:15:29,609 root INFO creating build/bdist.linux-i686/wheel/mitmproxy-11.0.0.dist-info/WHEEL 2025-11-18 23:15:29,610 wheel INFO creating '/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/.dist/.tmp-yhrpshf3/mitmproxy-11.0.0-py3-none-any.whl' and adding 'build/bdist.linux-i686/wheel' to it 2025-11-18 23:15:29,610 wheel INFO adding 'mitmproxy/__init__.py' 2025-11-18 23:15:29,611 wheel INFO adding 'mitmproxy/addonmanager.py' 2025-11-18 23:15:29,611 wheel INFO adding 'mitmproxy/certs.py' 2025-11-18 23:15:29,611 wheel INFO adding 'mitmproxy/command.py' 2025-11-18 23:15:29,612 wheel INFO adding 'mitmproxy/command_lexer.py' 2025-11-18 23:15:29,612 wheel INFO adding 'mitmproxy/connection.py' 2025-11-18 23:15:29,612 wheel INFO adding 'mitmproxy/ctx.py' 2025-11-18 23:15:29,613 wheel INFO adding 'mitmproxy/dns.py' 2025-11-18 23:15:29,613 wheel INFO adding 'mitmproxy/eventsequence.py' 2025-11-18 23:15:29,613 wheel INFO adding 'mitmproxy/exceptions.py' 2025-11-18 23:15:29,614 wheel INFO adding 'mitmproxy/flow.py' 2025-11-18 23:15:29,614 wheel INFO adding 'mitmproxy/flowfilter.py' 2025-11-18 23:15:29,614 wheel INFO adding 'mitmproxy/hooks.py' 2025-11-18 23:15:29,615 wheel INFO adding 'mitmproxy/http.py' 2025-11-18 23:15:29,615 wheel INFO adding 'mitmproxy/log.py' 2025-11-18 23:15:29,615 wheel INFO adding 'mitmproxy/master.py' 2025-11-18 23:15:29,616 wheel INFO adding 'mitmproxy/options.py' 2025-11-18 23:15:29,616 wheel INFO adding 'mitmproxy/optmanager.py' 2025-11-18 23:15:29,616 wheel INFO adding 'mitmproxy/py.typed' 2025-11-18 23:15:29,616 wheel INFO adding 'mitmproxy/tcp.py' 2025-11-18 23:15:29,617 wheel INFO adding 'mitmproxy/tls.py' 2025-11-18 23:15:29,617 wheel INFO adding 'mitmproxy/types.py' 2025-11-18 23:15:29,617 wheel INFO adding 'mitmproxy/udp.py' 2025-11-18 23:15:29,618 wheel INFO adding 'mitmproxy/version.py' 2025-11-18 23:15:29,618 wheel INFO adding 'mitmproxy/websocket.py' 2025-11-18 23:15:29,618 wheel INFO adding 'mitmproxy/addons/__init__.py' 2025-11-18 23:15:29,618 wheel INFO adding 'mitmproxy/addons/anticache.py' 2025-11-18 23:15:29,619 wheel INFO adding 'mitmproxy/addons/anticomp.py' 2025-11-18 23:15:29,619 wheel INFO adding 'mitmproxy/addons/asgiapp.py' 2025-11-18 23:15:29,619 wheel INFO adding 'mitmproxy/addons/block.py' 2025-11-18 23:15:29,619 wheel INFO adding 'mitmproxy/addons/blocklist.py' 2025-11-18 23:15:29,620 wheel INFO adding 'mitmproxy/addons/browser.py' 2025-11-18 23:15:29,620 wheel INFO adding 'mitmproxy/addons/clientplayback.py' 2025-11-18 23:15:29,620 wheel INFO adding 'mitmproxy/addons/command_history.py' 2025-11-18 23:15:29,621 wheel INFO adding 'mitmproxy/addons/comment.py' 2025-11-18 23:15:29,621 wheel INFO adding 'mitmproxy/addons/core.py' 2025-11-18 23:15:29,621 wheel INFO adding 'mitmproxy/addons/cut.py' 2025-11-18 23:15:29,621 wheel INFO adding 'mitmproxy/addons/disable_h2c.py' 2025-11-18 23:15:29,622 wheel INFO adding 'mitmproxy/addons/dns_resolver.py' 2025-11-18 23:15:29,622 wheel INFO adding 'mitmproxy/addons/dumper.py' 2025-11-18 23:15:29,622 wheel INFO adding 'mitmproxy/addons/errorcheck.py' 2025-11-18 23:15:29,623 wheel INFO adding 'mitmproxy/addons/eventstore.py' 2025-11-18 23:15:29,623 wheel INFO adding 'mitmproxy/addons/export.py' 2025-11-18 23:15:29,623 wheel INFO adding 'mitmproxy/addons/intercept.py' 2025-11-18 23:15:29,623 wheel INFO adding 'mitmproxy/addons/keepserving.py' 2025-11-18 23:15:29,624 wheel INFO adding 'mitmproxy/addons/maplocal.py' 2025-11-18 23:15:29,624 wheel INFO adding 'mitmproxy/addons/mapremote.py' 2025-11-18 23:15:29,624 wheel INFO adding 'mitmproxy/addons/modifybody.py' 2025-11-18 23:15:29,624 wheel INFO adding 'mitmproxy/addons/modifyheaders.py' 2025-11-18 23:15:29,625 wheel INFO adding 'mitmproxy/addons/next_layer.py' 2025-11-18 23:15:29,625 wheel INFO adding 'mitmproxy/addons/onboarding.py' 2025-11-18 23:15:29,625 wheel INFO adding 'mitmproxy/addons/proxyauth.py' 2025-11-18 23:15:29,625 wheel INFO adding 'mitmproxy/addons/proxyserver.py' 2025-11-18 23:15:29,626 wheel INFO adding 'mitmproxy/addons/readfile.py' 2025-11-18 23:15:29,626 wheel INFO adding 'mitmproxy/addons/save.py' 2025-11-18 23:15:29,626 wheel INFO adding 'mitmproxy/addons/savehar.py' 2025-11-18 23:15:29,627 wheel INFO adding 'mitmproxy/addons/script.py' 2025-11-18 23:15:29,627 wheel INFO adding 'mitmproxy/addons/server_side_events.py' 2025-11-18 23:15:29,627 wheel INFO adding 'mitmproxy/addons/serverplayback.py' 2025-11-18 23:15:29,627 wheel INFO adding 'mitmproxy/addons/stickyauth.py' 2025-11-18 23:15:29,628 wheel INFO adding 'mitmproxy/addons/stickycookie.py' 2025-11-18 23:15:29,628 wheel INFO adding 'mitmproxy/addons/strip_dns_https_records.py' 2025-11-18 23:15:29,628 wheel INFO adding 'mitmproxy/addons/termlog.py' 2025-11-18 23:15:29,628 wheel INFO adding 'mitmproxy/addons/tlsconfig.py' 2025-11-18 23:15:29,629 wheel INFO adding 'mitmproxy/addons/update_alt_svc.py' 2025-11-18 23:15:29,629 wheel INFO adding 'mitmproxy/addons/upstream_auth.py' 2025-11-18 23:15:29,629 wheel INFO adding 'mitmproxy/addons/view.py' 2025-11-18 23:15:29,630 wheel INFO adding 'mitmproxy/addons/onboardingapp/__init__.py' 2025-11-18 23:15:29,630 wheel INFO adding 'mitmproxy/addons/onboardingapp/static/bootstrap.min.css' 2025-11-18 23:15:29,631 wheel INFO adding 'mitmproxy/addons/onboardingapp/static/mitmproxy.css' 2025-11-18 23:15:29,631 wheel INFO adding 'mitmproxy/addons/onboardingapp/static/images/favicon.ico' 2025-11-18 23:15:29,632 wheel INFO adding 'mitmproxy/addons/onboardingapp/static/images/mitmproxy-long.png' 2025-11-18 23:15:29,632 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/index.html' 2025-11-18 23:15:29,633 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/layout.html' 2025-11-18 23:15:29,633 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/android-brands.svg' 2025-11-18 23:15:29,633 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/apple-brands.svg' 2025-11-18 23:15:29,633 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/certificate-solid.svg' 2025-11-18 23:15:29,634 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/firefox-browser-brands.svg' 2025-11-18 23:15:29,634 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/linux-brands.svg' 2025-11-18 23:15:29,634 wheel INFO adding 'mitmproxy/addons/onboardingapp/templates/icons/windows-brands.svg' 2025-11-18 23:15:29,635 wheel INFO adding 'mitmproxy/contentviews/__init__.py' 2025-11-18 23:15:29,635 wheel INFO adding 'mitmproxy/contentviews/auto.py' 2025-11-18 23:15:29,635 wheel INFO adding 'mitmproxy/contentviews/base.py' 2025-11-18 23:15:29,635 wheel INFO adding 'mitmproxy/contentviews/css.py' 2025-11-18 23:15:29,636 wheel INFO adding 'mitmproxy/contentviews/dns.py' 2025-11-18 23:15:29,636 wheel INFO adding 'mitmproxy/contentviews/graphql.py' 2025-11-18 23:15:29,636 wheel INFO adding 'mitmproxy/contentviews/grpc.py' 2025-11-18 23:15:29,636 wheel INFO adding 'mitmproxy/contentviews/hex.py' 2025-11-18 23:15:29,637 wheel INFO adding 'mitmproxy/contentviews/http3.py' 2025-11-18 23:15:29,637 wheel INFO adding 'mitmproxy/contentviews/javascript.py' 2025-11-18 23:15:29,637 wheel INFO adding 'mitmproxy/contentviews/json.py' 2025-11-18 23:15:29,637 wheel INFO adding 'mitmproxy/contentviews/mqtt.py' 2025-11-18 23:15:29,638 wheel INFO adding 'mitmproxy/contentviews/msgpack.py' 2025-11-18 23:15:29,638 wheel INFO adding 'mitmproxy/contentviews/multipart.py' 2025-11-18 23:15:29,638 wheel INFO adding 'mitmproxy/contentviews/protobuf.py' 2025-11-18 23:15:29,638 wheel INFO adding 'mitmproxy/contentviews/query.py' 2025-11-18 23:15:29,639 wheel INFO adding 'mitmproxy/contentviews/raw.py' 2025-11-18 23:15:29,639 wheel INFO adding 'mitmproxy/contentviews/urlencoded.py' 2025-11-18 23:15:29,639 wheel INFO adding 'mitmproxy/contentviews/wbxml.py' 2025-11-18 23:15:29,639 wheel INFO adding 'mitmproxy/contentviews/xml_html.py' 2025-11-18 23:15:29,640 wheel INFO adding 'mitmproxy/contentviews/image/__init__.py' 2025-11-18 23:15:29,640 wheel INFO adding 'mitmproxy/contentviews/image/image_parser.py' 2025-11-18 23:15:29,640 wheel INFO adding 'mitmproxy/contentviews/image/view.py' 2025-11-18 23:15:29,640 wheel INFO adding 'mitmproxy/contrib/README.md' 2025-11-18 23:15:29,641 wheel INFO adding 'mitmproxy/contrib/__init__.py' 2025-11-18 23:15:29,641 wheel INFO adding 'mitmproxy/contrib/imghdr.py' 2025-11-18 23:15:29,641 wheel INFO adding 'mitmproxy/contrib/click/LICENSE.BSD-3' 2025-11-18 23:15:29,641 wheel INFO adding 'mitmproxy/contrib/click/__init__.py' 2025-11-18 23:15:29,642 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/LICENSE' 2025-11-18 23:15:29,642 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/README.md' 2025-11-18 23:15:29,642 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/__init__.py' 2025-11-18 23:15:29,642 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/dtls_client_hello.ksy' 2025-11-18 23:15:29,643 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/dtls_client_hello.py' 2025-11-18 23:15:29,643 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/exif.py' 2025-11-18 23:15:29,643 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/gif.py' 2025-11-18 23:15:29,644 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/google_protobuf.py' 2025-11-18 23:15:29,644 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/ico.py' 2025-11-18 23:15:29,644 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/jpeg.py' 2025-11-18 23:15:29,644 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/make.sh' 2025-11-18 23:15:29,645 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/png.py' 2025-11-18 23:15:29,645 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/tls_client_hello.ksy' 2025-11-18 23:15:29,645 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/tls_client_hello.py' 2025-11-18 23:15:29,646 wheel INFO adding 'mitmproxy/contrib/kaitaistruct/vlq_base128_le.py' 2025-11-18 23:15:29,646 wheel INFO adding 'mitmproxy/contrib/wbxml/ASCommandResponse.py' 2025-11-18 23:15:29,646 wheel INFO adding 'mitmproxy/contrib/wbxml/ASWBXML.py' 2025-11-18 23:15:29,647 wheel INFO adding 'mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py' 2025-11-18 23:15:29,647 wheel INFO adding 'mitmproxy/contrib/wbxml/ASWBXMLCodePage.py' 2025-11-18 23:15:29,647 wheel INFO adding 'mitmproxy/contrib/wbxml/GlobalTokens.py' 2025-11-18 23:15:29,647 wheel INFO adding 'mitmproxy/contrib/wbxml/InvalidDataException.py' 2025-11-18 23:15:29,648 wheel INFO adding 'mitmproxy/contrib/wbxml/__init__.py' 2025-11-18 23:15:29,648 wheel INFO adding 'mitmproxy/coretypes/__init__.py' 2025-11-18 23:15:29,648 wheel INFO adding 'mitmproxy/coretypes/bidi.py' 2025-11-18 23:15:29,648 wheel INFO adding 'mitmproxy/coretypes/multidict.py' 2025-11-18 23:15:29,649 wheel INFO adding 'mitmproxy/coretypes/serializable.py' 2025-11-18 23:15:29,649 wheel INFO adding 'mitmproxy/io/__init__.py' 2025-11-18 23:15:29,649 wheel INFO adding 'mitmproxy/io/compat.py' 2025-11-18 23:15:29,649 wheel INFO adding 'mitmproxy/io/har.py' 2025-11-18 23:15:29,650 wheel INFO adding 'mitmproxy/io/io.py' 2025-11-18 23:15:29,650 wheel INFO adding 'mitmproxy/io/tnetstring.py' 2025-11-18 23:15:29,650 wheel INFO adding 'mitmproxy/net/__init__.py' 2025-11-18 23:15:29,650 wheel INFO adding 'mitmproxy/net/check.py' 2025-11-18 23:15:29,651 wheel INFO adding 'mitmproxy/net/encoding.py' 2025-11-18 23:15:29,651 wheel INFO adding 'mitmproxy/net/local_ip.py' 2025-11-18 23:15:29,651 wheel INFO adding 'mitmproxy/net/server_spec.py' 2025-11-18 23:15:29,651 wheel INFO adding 'mitmproxy/net/tls.py' 2025-11-18 23:15:29,652 wheel INFO adding 'mitmproxy/net/dns/__init__.py' 2025-11-18 23:15:29,652 wheel INFO adding 'mitmproxy/net/dns/classes.py' 2025-11-18 23:15:29,652 wheel INFO adding 'mitmproxy/net/dns/domain_names.py' 2025-11-18 23:15:29,652 wheel INFO adding 'mitmproxy/net/dns/https_records.py' 2025-11-18 23:15:29,653 wheel INFO adding 'mitmproxy/net/dns/op_codes.py' 2025-11-18 23:15:29,653 wheel INFO adding 'mitmproxy/net/dns/response_codes.py' 2025-11-18 23:15:29,653 wheel INFO adding 'mitmproxy/net/dns/types.py' 2025-11-18 23:15:29,653 wheel INFO adding 'mitmproxy/net/http/__init__.py' 2025-11-18 23:15:29,654 wheel INFO adding 'mitmproxy/net/http/cookies.py' 2025-11-18 23:15:29,654 wheel INFO adding 'mitmproxy/net/http/headers.py' 2025-11-18 23:15:29,654 wheel INFO adding 'mitmproxy/net/http/multipart.py' 2025-11-18 23:15:29,654 wheel INFO adding 'mitmproxy/net/http/status_codes.py' 2025-11-18 23:15:29,655 wheel INFO adding 'mitmproxy/net/http/url.py' 2025-11-18 23:15:29,655 wheel INFO adding 'mitmproxy/net/http/user_agents.py' 2025-11-18 23:15:29,655 wheel INFO adding 'mitmproxy/net/http/http1/__init__.py' 2025-11-18 23:15:29,655 wheel INFO adding 'mitmproxy/net/http/http1/assemble.py' 2025-11-18 23:15:29,656 wheel INFO adding 'mitmproxy/net/http/http1/read.py' 2025-11-18 23:15:29,656 wheel INFO adding 'mitmproxy/platform/__init__.py' 2025-11-18 23:15:29,656 wheel INFO adding 'mitmproxy/platform/linux.py' 2025-11-18 23:15:29,656 wheel INFO adding 'mitmproxy/platform/openbsd.py' 2025-11-18 23:15:29,657 wheel INFO adding 'mitmproxy/platform/osx.py' 2025-11-18 23:15:29,657 wheel INFO adding 'mitmproxy/platform/pf.py' 2025-11-18 23:15:29,657 wheel INFO adding 'mitmproxy/platform/windows.py' 2025-11-18 23:15:29,658 wheel INFO adding 'mitmproxy/proxy/__init__.py' 2025-11-18 23:15:29,658 wheel INFO adding 'mitmproxy/proxy/commands.py' 2025-11-18 23:15:29,658 wheel INFO adding 'mitmproxy/proxy/context.py' 2025-11-18 23:15:29,658 wheel INFO adding 'mitmproxy/proxy/events.py' 2025-11-18 23:15:29,659 wheel INFO adding 'mitmproxy/proxy/layer.py' 2025-11-18 23:15:29,659 wheel INFO adding 'mitmproxy/proxy/mode_servers.py' 2025-11-18 23:15:29,659 wheel INFO adding 'mitmproxy/proxy/mode_specs.py' 2025-11-18 23:15:29,660 wheel INFO adding 'mitmproxy/proxy/server.py' 2025-11-18 23:15:29,660 wheel INFO adding 'mitmproxy/proxy/server_hooks.py' 2025-11-18 23:15:29,660 wheel INFO adding 'mitmproxy/proxy/tunnel.py' 2025-11-18 23:15:29,660 wheel INFO adding 'mitmproxy/proxy/utils.py' 2025-11-18 23:15:29,661 wheel INFO adding 'mitmproxy/proxy/layers/__init__.py' 2025-11-18 23:15:29,661 wheel INFO adding 'mitmproxy/proxy/layers/dns.py' 2025-11-18 23:15:29,661 wheel INFO adding 'mitmproxy/proxy/layers/modes.py' 2025-11-18 23:15:29,661 wheel INFO adding 'mitmproxy/proxy/layers/tcp.py' 2025-11-18 23:15:29,662 wheel INFO adding 'mitmproxy/proxy/layers/tls.py' 2025-11-18 23:15:29,662 wheel INFO adding 'mitmproxy/proxy/layers/udp.py' 2025-11-18 23:15:29,662 wheel INFO adding 'mitmproxy/proxy/layers/websocket.py' 2025-11-18 23:15:29,663 wheel INFO adding 'mitmproxy/proxy/layers/http/__init__.py' 2025-11-18 23:15:29,663 wheel INFO adding 'mitmproxy/proxy/layers/http/_base.py' 2025-11-18 23:15:29,663 wheel INFO adding 'mitmproxy/proxy/layers/http/_events.py' 2025-11-18 23:15:29,664 wheel INFO adding 'mitmproxy/proxy/layers/http/_hooks.py' 2025-11-18 23:15:29,664 wheel INFO adding 'mitmproxy/proxy/layers/http/_http1.py' 2025-11-18 23:15:29,664 wheel INFO adding 'mitmproxy/proxy/layers/http/_http2.py' 2025-11-18 23:15:29,665 wheel INFO adding 'mitmproxy/proxy/layers/http/_http3.py' 2025-11-18 23:15:29,665 wheel INFO adding 'mitmproxy/proxy/layers/http/_http_h2.py' 2025-11-18 23:15:29,665 wheel INFO adding 'mitmproxy/proxy/layers/http/_http_h3.py' 2025-11-18 23:15:29,666 wheel INFO adding 'mitmproxy/proxy/layers/http/_upstream_proxy.py' 2025-11-18 23:15:29,666 wheel INFO adding 'mitmproxy/proxy/layers/quic/__init__.py' 2025-11-18 23:15:29,666 wheel INFO adding 'mitmproxy/proxy/layers/quic/_client_hello_parser.py' 2025-11-18 23:15:29,666 wheel INFO adding 'mitmproxy/proxy/layers/quic/_commands.py' 2025-11-18 23:15:29,667 wheel INFO adding 'mitmproxy/proxy/layers/quic/_events.py' 2025-11-18 23:15:29,667 wheel INFO adding 'mitmproxy/proxy/layers/quic/_hooks.py' 2025-11-18 23:15:29,667 wheel INFO adding 'mitmproxy/proxy/layers/quic/_raw_layers.py' 2025-11-18 23:15:29,668 wheel INFO adding 'mitmproxy/proxy/layers/quic/_stream_layers.py' 2025-11-18 23:15:29,668 wheel INFO adding 'mitmproxy/script/__init__.py' 2025-11-18 23:15:29,668 wheel INFO adding 'mitmproxy/script/concurrent.py' 2025-11-18 23:15:29,669 wheel INFO adding 'mitmproxy/test/taddons.py' 2025-11-18 23:15:29,669 wheel INFO adding 'mitmproxy/test/tflow.py' 2025-11-18 23:15:29,669 wheel INFO adding 'mitmproxy/test/tutils.py' 2025-11-18 23:15:29,669 wheel INFO adding 'mitmproxy/tools/__init__.py' 2025-11-18 23:15:29,670 wheel INFO adding 'mitmproxy/tools/cmdline.py' 2025-11-18 23:15:29,670 wheel INFO adding 'mitmproxy/tools/dump.py' 2025-11-18 23:15:29,670 wheel INFO adding 'mitmproxy/tools/main.py' 2025-11-18 23:15:29,670 wheel INFO adding 'mitmproxy/tools/console/__init__.py' 2025-11-18 23:15:29,671 wheel INFO adding 'mitmproxy/tools/console/commandexecutor.py' 2025-11-18 23:15:29,671 wheel INFO adding 'mitmproxy/tools/console/commands.py' 2025-11-18 23:15:29,671 wheel INFO adding 'mitmproxy/tools/console/common.py' 2025-11-18 23:15:29,672 wheel INFO adding 'mitmproxy/tools/console/consoleaddons.py' 2025-11-18 23:15:29,672 wheel INFO adding 'mitmproxy/tools/console/defaultkeys.py' 2025-11-18 23:15:29,672 wheel INFO adding 'mitmproxy/tools/console/eventlog.py' 2025-11-18 23:15:29,672 wheel INFO adding 'mitmproxy/tools/console/flowdetailview.py' 2025-11-18 23:15:29,673 wheel INFO adding 'mitmproxy/tools/console/flowlist.py' 2025-11-18 23:15:29,673 wheel INFO adding 'mitmproxy/tools/console/flowview.py' 2025-11-18 23:15:29,673 wheel INFO adding 'mitmproxy/tools/console/help.py' 2025-11-18 23:15:29,674 wheel INFO adding 'mitmproxy/tools/console/keybindings.py' 2025-11-18 23:15:29,674 wheel INFO adding 'mitmproxy/tools/console/keymap.py' 2025-11-18 23:15:29,674 wheel INFO adding 'mitmproxy/tools/console/layoutwidget.py' 2025-11-18 23:15:29,674 wheel INFO adding 'mitmproxy/tools/console/master.py' 2025-11-18 23:15:29,675 wheel INFO adding 'mitmproxy/tools/console/options.py' 2025-11-18 23:15:29,675 wheel INFO adding 'mitmproxy/tools/console/overlay.py' 2025-11-18 23:15:29,675 wheel INFO adding 'mitmproxy/tools/console/palettes.py' 2025-11-18 23:15:29,675 wheel INFO adding 'mitmproxy/tools/console/quickhelp.py' 2025-11-18 23:15:29,676 wheel INFO adding 'mitmproxy/tools/console/searchable.py' 2025-11-18 23:15:29,676 wheel INFO adding 'mitmproxy/tools/console/signals.py' 2025-11-18 23:15:29,676 wheel INFO adding 'mitmproxy/tools/console/statusbar.py' 2025-11-18 23:15:29,677 wheel INFO adding 'mitmproxy/tools/console/tabs.py' 2025-11-18 23:15:29,677 wheel INFO adding 'mitmproxy/tools/console/window.py' 2025-11-18 23:15:29,677 wheel INFO adding 'mitmproxy/tools/console/commander/__init__.py' 2025-11-18 23:15:29,677 wheel INFO adding 'mitmproxy/tools/console/commander/commander.py' 2025-11-18 23:15:29,678 wheel INFO adding 'mitmproxy/tools/console/grideditor/__init__.py' 2025-11-18 23:15:29,678 wheel INFO adding 'mitmproxy/tools/console/grideditor/base.py' 2025-11-18 23:15:29,678 wheel INFO adding 'mitmproxy/tools/console/grideditor/col_bytes.py' 2025-11-18 23:15:29,679 wheel INFO adding 'mitmproxy/tools/console/grideditor/col_subgrid.py' 2025-11-18 23:15:29,679 wheel INFO adding 'mitmproxy/tools/console/grideditor/col_text.py' 2025-11-18 23:15:29,679 wheel INFO adding 'mitmproxy/tools/console/grideditor/col_viewany.py' 2025-11-18 23:15:29,679 wheel INFO adding 'mitmproxy/tools/console/grideditor/editors.py' 2025-11-18 23:15:29,680 wheel INFO adding 'mitmproxy/tools/web/__init__.py' 2025-11-18 23:15:29,680 wheel INFO adding 'mitmproxy/tools/web/app.py' 2025-11-18 23:15:29,680 wheel INFO adding 'mitmproxy/tools/web/master.py' 2025-11-18 23:15:29,680 wheel INFO adding 'mitmproxy/tools/web/static_viewer.py' 2025-11-18 23:15:29,681 wheel INFO adding 'mitmproxy/tools/web/web_columns.py' 2025-11-18 23:15:29,681 wheel INFO adding 'mitmproxy/tools/web/webaddons.py' 2025-11-18 23:15:29,681 wheel INFO adding 'mitmproxy/tools/web/static/app.css' 2025-11-18 23:15:29,683 wheel INFO adding 'mitmproxy/tools/web/static/app.js' 2025-11-18 23:15:29,685 wheel INFO adding 'mitmproxy/tools/web/static/static.js' 2025-11-18 23:15:29,686 wheel INFO adding 'mitmproxy/tools/web/static/vendor.css' 2025-11-18 23:15:29,687 wheel INFO adding 'mitmproxy/tools/web/static/vendor.js' 2025-11-18 23:15:29,689 wheel INFO adding 'mitmproxy/tools/web/static/fonts/fontawesome-webfont.eot' 2025-11-18 23:15:29,691 wheel INFO adding 'mitmproxy/tools/web/static/fonts/fontawesome-webfont.svg' 2025-11-18 23:15:29,693 wheel INFO adding 'mitmproxy/tools/web/static/fonts/fontawesome-webfont.ttf' 2025-11-18 23:15:29,694 wheel INFO adding 'mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff' 2025-11-18 23:15:29,694 wheel INFO adding 'mitmproxy/tools/web/static/fonts/fontawesome-webfont.woff2' 2025-11-18 23:15:29,695 wheel INFO adding 'mitmproxy/tools/web/static/images/favicon.ico' 2025-11-18 23:15:29,697 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceDnsIcon.png' 2025-11-18 23:15:29,697 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceExecutableIcon.png' 2025-11-18 23:15:29,697 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceFlashIcon.png' 2025-11-18 23:15:29,697 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceImageIcon.png' 2025-11-18 23:15:29,698 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceJavaIcon.png' 2025-11-18 23:15:29,698 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceNotModifiedIcon.png' 2025-11-18 23:15:29,698 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceQuicIcon.png' 2025-11-18 23:15:29,698 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceRedirectIcon.png' 2025-11-18 23:15:29,699 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceTcpIcon.png' 2025-11-18 23:15:29,699 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceUdpIcon.png' 2025-11-18 23:15:29,699 wheel INFO adding 'mitmproxy/tools/web/static/images/resourceWebSocketIcon.png' 2025-11-18 23:15:29,699 wheel INFO adding 'mitmproxy/tools/web/static/images/chrome-devtools/LICENSE' 2025-11-18 23:15:29,700 wheel INFO adding 'mitmproxy/tools/web/static/images/chrome-devtools/resourceCSSIcon.png' 2025-11-18 23:15:29,700 wheel INFO adding 'mitmproxy/tools/web/static/images/chrome-devtools/resourceDocumentIcon.png' 2025-11-18 23:15:29,700 wheel INFO adding 'mitmproxy/tools/web/static/images/chrome-devtools/resourceJSIcon.png' 2025-11-18 23:15:29,700 wheel INFO adding 'mitmproxy/tools/web/static/images/chrome-devtools/resourcePlainIcon.png' 2025-11-18 23:15:29,700 wheel INFO adding 'mitmproxy/tools/web/templates/index.html' 2025-11-18 23:15:29,701 wheel INFO adding 'mitmproxy/utils/__init__.py' 2025-11-18 23:15:29,701 wheel INFO adding 'mitmproxy/utils/arg_check.py' 2025-11-18 23:15:29,701 wheel INFO adding 'mitmproxy/utils/asyncio_utils.py' 2025-11-18 23:15:29,701 wheel INFO adding 'mitmproxy/utils/bits.py' 2025-11-18 23:15:29,702 wheel INFO adding 'mitmproxy/utils/data.py' 2025-11-18 23:15:29,702 wheel INFO adding 'mitmproxy/utils/debug.py' 2025-11-18 23:15:29,702 wheel INFO adding 'mitmproxy/utils/emoji.py' 2025-11-18 23:15:29,703 wheel INFO adding 'mitmproxy/utils/human.py' 2025-11-18 23:15:29,703 wheel INFO adding 'mitmproxy/utils/magisk.py' 2025-11-18 23:15:29,703 wheel INFO adding 'mitmproxy/utils/signals.py' 2025-11-18 23:15:29,703 wheel INFO adding 'mitmproxy/utils/sliding_window.py' 2025-11-18 23:15:29,704 wheel INFO adding 'mitmproxy/utils/spec.py' 2025-11-18 23:15:29,704 wheel INFO adding 'mitmproxy/utils/strutils.py' 2025-11-18 23:15:29,704 wheel INFO adding 'mitmproxy/utils/typecheck.py' 2025-11-18 23:15:29,704 wheel INFO adding 'mitmproxy/utils/vt_codes.py' 2025-11-18 23:15:29,704 wheel INFO adding 'mitmproxy/utils/pyinstaller/__init__.py' 2025-11-18 23:15:29,705 wheel INFO adding 'mitmproxy/utils/pyinstaller/hook-mitmproxy.addons.onboardingapp.py' 2025-11-18 23:15:29,705 wheel INFO adding 'mitmproxy/utils/pyinstaller/hook-mitmproxy.py' 2025-11-18 23:15:29,705 wheel INFO adding 'mitmproxy/utils/pyinstaller/hook-mitmproxy.tools.web.py' 2025-11-18 23:15:29,706 wheel INFO adding 'mitmproxy-11.0.0.dist-info/licenses/LICENSE' 2025-11-18 23:15:29,706 wheel INFO adding 'mitmproxy-11.0.0.dist-info/METADATA' 2025-11-18 23:15:29,706 wheel INFO adding 'mitmproxy-11.0.0.dist-info/WHEEL' 2025-11-18 23:15:29,706 wheel INFO adding 'mitmproxy-11.0.0.dist-info/entry_points.txt' 2025-11-18 23:15:29,706 wheel INFO adding 'mitmproxy-11.0.0.dist-info/top_level.txt' 2025-11-18 23:15:29,708 wheel INFO adding 'mitmproxy-11.0.0.dist-info/RECORD' 2025-11-18 23:15:29,709 root INFO removing build/bdist.linux-i686/wheel 2025-11-18 23:15:29,717 gpep517 INFO The backend produced .dist/mitmproxy-11.0.0-py3-none-any.whl mitmproxy-11.0.0-py3-none-any.whl ============================= test session starts ============================== platform linux -- Python 3.12.12, pytest-8.4.2, pluggy-1.6.0 rootdir: /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0 configfile: pyproject.toml testpaths: test plugins: asyncio-0.25.0, hypothesis-6.146.0 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=function collected 1797 items / 5 deselected / 1792 selected test/examples/test_examples.py ....... test/mitmproxy/addons/test_anticache.py . test/mitmproxy/addons/test_anticomp.py . test/mitmproxy/addons/test_asgiapp.py . test/mitmproxy/addons/test_block.py ..................................... test/mitmproxy/addons/test_blocklist.py ............ test/mitmproxy/addons/test_browser.py ...... test/mitmproxy/addons/test_clientplayback.py .............. test/mitmproxy/addons/test_command_history.py ......... test/mitmproxy/addons/test_comment.py . test/mitmproxy/addons/test_core.py .......... test/mitmproxy/addons/test_cut.py .......... test/mitmproxy/addons/test_disable_h2c.py .. test/mitmproxy/addons/test_dns_resolver.py .......................... test/mitmproxy/addons/test_dumper.py .............. test/mitmproxy/addons/test_errorcheck.py ..... test/mitmproxy/addons/test_eventstore.py .. test/mitmproxy/addons/test_export.py .................................... test/mitmproxy/addons/test_intercept.py ..... test/mitmproxy/addons/test_keepserving.py . test/mitmproxy/addons/test_maplocal.py ....................... test/mitmproxy/addons/test_mapremote.py .... test/mitmproxy/addons/test_modifybody.py ........ test/mitmproxy/addons/test_modifyheaders.py ....... test/mitmproxy/addons/test_next_layer.py .......................................................................... test/mitmproxy/addons/test_onboarding.py ......... test/mitmproxy/addons/test_proxyauth.py ...................... test/mitmproxy/addons/test_proxyserver.py ............F..s test/mitmproxy/addons/test_readfile.py ...... test/mitmproxy/addons/test_save.py ......... test/mitmproxy/addons/test_savehar.py .................... test/mitmproxy/addons/test_script.py ................. test/mitmproxy/addons/test_server_side_events.py . test/mitmproxy/addons/test_serverplayback.py ....................... test/mitmproxy/addons/test_stickyauth.py .. test/mitmproxy/addons/test_stickycookie.py ......... test/mitmproxy/addons/test_strip_dns_https_records.py .. test/mitmproxy/addons/test_termlog.py ... test/mitmproxy/addons/test_tlsconfig.py .................... test/mitmproxy/addons/test_update_alt_svc.py .. test/mitmproxy/addons/test_upstream_auth.py .. test/mitmproxy/addons/test_view.py ................................ test/mitmproxy/contentviews/image/test_image_parser.py .............. test/mitmproxy/contentviews/image/test_view.py .. test/mitmproxy/contentviews/test_api.py ... test/mitmproxy/contentviews/test_auto.py . test/mitmproxy/contentviews/test_base.py .. test/mitmproxy/contentviews/test_css.py ............ test/mitmproxy/contentviews/test_dns.py .. test/mitmproxy/contentviews/test_graphql.py ..... test/mitmproxy/contentviews/test_grpc.py .......... test/mitmproxy/contentviews/test_hex.py .... test/mitmproxy/contentviews/test_http3.py .......... test/mitmproxy/contentviews/test_javascript.py ... test/mitmproxy/contentviews/test_json.py ..... test/mitmproxy/contentviews/test_mqtt.py ......... test/mitmproxy/contentviews/test_msgpack.py ..... test/mitmproxy/contentviews/test_multipart.py .. test/mitmproxy/contentviews/test_protobuf.py .... test/mitmproxy/contentviews/test_query.py .. test/mitmproxy/contentviews/test_raw.py .. test/mitmproxy/contentviews/test_urlencoded.py .. test/mitmproxy/contentviews/test_wbxml.py .. test/mitmproxy/contentviews/test_xml_html.py ....... test/mitmproxy/coretypes/test_bidi.py . test/mitmproxy/coretypes/test_multidict.py ................... test/mitmproxy/coretypes/test_serializable.py .................... test/mitmproxy/io/test_compat.py ........ test/mitmproxy/io/test_har.py ......... test/mitmproxy/io/test_io.py ............ test/mitmproxy/io/test_tnetstring.py ....... test/mitmproxy/net/dns/test_classes.py . test/mitmproxy/net/dns/test_domain_names.py ...... test/mitmproxy/net/dns/test_https_records.py ...... test/mitmproxy/net/dns/test_op_codes.py . test/mitmproxy/net/dns/test_response_codes.py . test/mitmproxy/net/dns/test_types.py . test/mitmproxy/net/http/http1/test_assemble.py ........ test/mitmproxy/net/http/http1/test_read.py ............... test/mitmproxy/net/http/test_cookies.py ........... test/mitmproxy/net/http/test_headers.py ........... test/mitmproxy/net/http/test_multipart.py .. test/mitmproxy/net/http/test_status_codes.py . test/mitmproxy/net/http/test_url.py ....................... test/mitmproxy/net/http/test_user_agents.py . test/mitmproxy/net/test_check.py . test/mitmproxy/net/test_encoding.py ........... test/mitmproxy/net/test_local_ip.py .. test/mitmproxy/net/test_server_spec.py ......... test/mitmproxy/net/test_tls.py ...... test/mitmproxy/platform/test_pf.py . test/mitmproxy/proxy/layers/http/test_http.py ..................................................................................................................... test/mitmproxy/proxy/layers/http/test_http1.py ............ test/mitmproxy/proxy/layers/http/test_http2.py ............................................ test/mitmproxy/proxy/layers/http/test_http3.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF test/mitmproxy/proxy/layers/http/test_http_fuzz.py ......... test/mitmproxy/proxy/layers/http/test_http_version_interop.py .. test/mitmproxy/proxy/layers/quic/test__client_hello_parser.py .... test/mitmproxy/proxy/layers/quic/test__commands.py . test/mitmproxy/proxy/layers/quic/test__events.py . test/mitmproxy/proxy/layers/quic/test__hooks.py . test/mitmproxy/proxy/layers/quic/test__raw_layers.py ............. test/mitmproxy/proxy/layers/quic/test__stream_layers.py ................................... test/mitmproxy/proxy/layers/test_dns.py ..................... test/mitmproxy/proxy/layers/test_modes.py ............................. test/mitmproxy/proxy/layers/test_socks5_fuzz.py . test/mitmproxy/proxy/layers/test_tcp.py ........ test/mitmproxy/proxy/layers/test_tls.py ......................... test/mitmproxy/proxy/layers/test_tls_fuzz.py . test/mitmproxy/proxy/layers/test_udp.py ....... test/mitmproxy/proxy/layers/test_websocket.py .................... test/mitmproxy/proxy/test_commands.py .. test/mitmproxy/proxy/test_context.py . test/mitmproxy/proxy/test_events.py .. test/mitmproxy/proxy/test_layer.py ......... test/mitmproxy/proxy/test_mode_servers.py ................... test/mitmproxy/proxy/test_mode_specs.py .... test/mitmproxy/proxy/test_server.py .... test/mitmproxy/proxy/test_server_hooks.py . test/mitmproxy/proxy/test_tunnel.py ........... test/mitmproxy/proxy/test_tutils.py ............. test/mitmproxy/proxy/test_utils.py .. test/mitmproxy/script/test_concurrent.py ... test/mitmproxy/test_addonmanager.py ........... test/mitmproxy/test_certs.py ............................... test/mitmproxy/test_command.py .......... test/mitmproxy/test_command_lexer.py ................. test/mitmproxy/test_connection.py ....... test/mitmproxy/test_dns.py ............. test/mitmproxy/test_eventsequence.py .............. test/mitmproxy/test_flow.py ......... test/mitmproxy/test_flowfilter.py ............................................................................... test/mitmproxy/test_hooks.py . test/mitmproxy/test_http.py ....................................................................................................... test/mitmproxy/test_log.py .. test/mitmproxy/test_master.py . test/mitmproxy/test_options.py . test/mitmproxy/test_optmanager.py .......s........................ test/mitmproxy/test_proxy.py .. test/mitmproxy/test_taddons.py . test/mitmproxy/test_tcp.py ... test/mitmproxy/test_tls.py .... test/mitmproxy/test_types.py ................ test/mitmproxy/test_udp.py ... test/mitmproxy/test_version.py . test/mitmproxy/test_websocket.py ...... test/mitmproxy/tools/console/test_commander.py ............. test/mitmproxy/tools/console/test_common.py ... test/mitmproxy/tools/console/test_contentview.py . test/mitmproxy/tools/console/test_defaultkeys.py . test/mitmproxy/tools/console/test_flowview.py . test/mitmproxy/tools/console/test_integration.py .... test/mitmproxy/tools/console/test_keymap.py ...... test/mitmproxy/tools/console/test_master.py .. test/mitmproxy/tools/console/test_palettes.py . test/mitmproxy/tools/console/test_quickhelp.py .......... test/mitmproxy/tools/console/test_statusbar.py ....... test/mitmproxy/tools/test_cmdline.py .... test/mitmproxy/tools/test_dump.py .... test/mitmproxy/tools/test_main.py .. test/mitmproxy/tools/web/test_app.py .............................ss.... test/mitmproxy/tools/web/test_master.py . test/mitmproxy/tools/web/test_static_viewer.py ...... test/mitmproxy/tools/web/test_web_columns.py . test/mitmproxy/utils/test_arg_check.py ......... test/mitmproxy/utils/test_asyncio_utils.py ... test/mitmproxy/utils/test_data.py . test/mitmproxy/utils/test_debug.py ...... test/mitmproxy/utils/test_emoji.py . test/mitmproxy/utils/test_human.py ...... test/mitmproxy/utils/test_magisk.py ... test/mitmproxy/utils/test_signals.py .... test/mitmproxy/utils/test_sliding_window.py .. test/mitmproxy/utils/test_spec.py . test/mitmproxy/utils/test_strutils.py ........... test/mitmproxy/utils/test_typecheck.py ........ test/mitmproxy/utils/test_vt_codes.py . =================================== FAILURES =================================== __________________ test_reverse_http3_and_quic_stream[http3] ___________________ fut = , timeout = 10 async def wait_for(fut, timeout):  """Wait for the single Future or coroutine to complete, with timeout.   Coroutine will be wrapped in Task.   Returns result of the Future or coroutine. When a timeout occurs,  it cancels the task and raises TimeoutError. To avoid the task  cancellation, wrap it in shield().   If the wait is cancelled, the task is also cancelled.   If the task suppresses the cancellation and returns a value instead,  that value is returned.   This function is a coroutine.  """ # The special case for timeout <= 0 is for the following case: # # async def test_waitfor(): # func_started = False # # async def func(): # nonlocal func_started # func_started = True # # try: # await asyncio.wait_for(func(), 0) # except asyncio.TimeoutError: # assert not func_started # else: # assert False # # asyncio.run(test_waitfor())   if timeout is not None and timeout <= 0: fut = ensure_future(fut)  if fut.done(): return fut.result()  await _cancel_and_wait(fut) try: return fut.result() except exceptions.CancelledError as exc: raise TimeoutError from exc  async with timeouts.timeout(timeout): > return await fut ^^^^^^^^^ E asyncio.exceptions.CancelledError /usr/lib/python3.12/asyncio/tasks.py:520: CancelledError The above exception was the direct cause of the following exception: caplog_async = scheme = 'http3' @pytest.mark.parametrize("scheme", ["http3", "quic"]) async def test_reverse_http3_and_quic_stream(caplog_async, scheme: str) -> None: caplog_async.set_level("INFO") ps = Proxyserver() nl = NextLayer() ta = TlsConfig() with taddons.context(ps, nl, ta) as tctx: tctx.options.keep_host_header = True ta.configure(["confdir"]) async with quic_server(H3EchoServer, alpn=["h3"]) as server_addr: mode = f"reverse:{scheme}://{server_addr[0]}:{server_addr[1]}@127.0.0.1:0" tctx.configure( ta, ssl_verify_upstream_trusted_ca=tlsdata.path( "../net/data/verificationcerts/trusted-root.crt" ), ) tctx.configure(ps, mode=[mode]) assert await ps.setup_servers() ps.running() await caplog_async.await_log( f"reverse proxy to {scheme}://{server_addr[0]}:{server_addr[1]} listening" ) assert ps.servers addr = ps.servers[mode].listen_addrs[0] async with quic_connect(H3Client, alpn=["h3"], address=addr) as client: > await _test_echo(client, strict=scheme == "http3") test/mitmproxy/addons/test_proxyserver.py:798: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/addons/test_proxyserver.py:694: in _test_echo r1 = await client.request( test/mitmproxy/addons/test_proxyserver.py:555: in wait_result return await asyncio.wait_for(self.waiter, timeout=QuicClient.TIMEOUT) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.12/asyncio/tasks.py:519: in wait_for async with timeouts.timeout(timeout): ^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = exc_type = exc_val = CancelledError(), exc_tb = async def __aexit__( self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType], ) -> Optional[bool]: assert self._state in (_State.ENTERED, _State.EXPIRING)  if self._timeout_handler is not None: self._timeout_handler.cancel() self._timeout_handler = None  if self._state is _State.EXPIRING: self._state = _State.EXPIRED  if self._task.uncancel() <= self._cancelling and exc_type is exceptions.CancelledError: # Since there are no new cancel requests, we're # handling this. > raise TimeoutError from exc_val E TimeoutError /usr/lib/python3.12/asyncio/timeouts.py:115: TimeoutError ------------------------------ Captured log call ------------------------------- INFO  mitmproxy.proxy.mode_servers:mode_servers.py:138 reverse proxy to http3://127.0.0.1:33227 listening at 127.0.0.1:41228. INFO  mitmproxy.proxy.server:server.py:374 client connect INFO  mitmproxy.proxy.server:server.py:374 server connect 127.0.0.1:33227 ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 181, in handle_event command = next(command_generator) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 181, in handle_event command = next(command_generator) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 142, in handle_event yield from self.__continue(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 233, in __continue yield from self.__process(command_generator, event.reply) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 220, in __process command = next(command_generator) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 81, in _handle_event yield from self._handshake_finished(err) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 112, in _handshake_finished yield from self.event_to_child(evt) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 181, in handle_event command = next(command_generator) ^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 939, in _handle_event yield from self.event_to_child(child_layer, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 258, in _handle_event for cmd in super()._handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 87, in _handle_event yield from super()._handle_event( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 258, in _handle_event for cmd in super()._handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 87, in _handle_event yield from super()._handle_event( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' ERROR  mitmproxy.proxy.server:server.py:374 mitmproxy has crashed! Traceback (most recent call last): File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/server.py", line 391, in server_event for command in layer_commands: ^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 270, in handle_event yield from self._handle(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 98, in _handle_event yield from self.event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 397, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 91, in _handle_event yield from super()._handle_event(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 83, in _handle_event yield from self.receive_data(event.data) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 294, in receive_data yield from self.event_to_child( File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/quic/_stream_layers.py", line 96, in event_to_child yield from super().event_to_child(event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/tunnel.py", line 153, in event_to_child for command in self.child_layer.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event yield from self.event_to_child(handler, event) File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child for command in child.handle_event(event): ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event command = command_generator.send(send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event h3_events = self.h3_conn.handle_stream_event(event) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event elif self._get_or_create_stream(event.stream_id).ended: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: '_GeneratorContextManager' object has no attribute 'ended' INFO  mitmproxy.proxy.server:server.py:374 client disconnect INFO  mitmproxy.proxy.server:server.py:374 server disconnect 127.0.0.1:33227 _______________________________ test_ignore_push _______________________________ tctx = Context( Client({'id': '…d6457d', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…edff27', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_ignore_push(tctx: context.Context): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:387: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________________ test_fail_without_header ___________________________ tctx = Context( Client({'id': '…850f31', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's...e.OPEN: 3>, 'timestamp_start': 1605699329}), Server({'id': '…5dda70', 'address': None}), layers=[[Http3Server()]] ) def test_fail_without_header(tctx: context.Context): playbook = tutils.Playbook(layers.http.Http3Server(tctx)) cff = FrameFactory(tctx.client, is_client=True) assert ( > playbook << cff.send_init() >> cff.receive_init() << cff.send_encoder() >> cff.receive_encoder() >> http.ResponseProtocolError(0, "first message", http.status_codes.NO_RESPONSE) << cff.send_reset(ErrorCode.H3_INTERNAL_ERROR) << cff.send_stop(ErrorCode.H3_INTERNAL_ERROR) ) test/mitmproxy/proxy/layers/http/test_http3.py:394: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') E - >> ResponseProtocolError(stream_id=0, message='first message', code=444) E - << ResetQuicStream({'connection': Client({'id': '…850f31', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 'state': , 'timestamp_start': 1605699329}), 'stream_id': 0, 'error_code': 258}) E - << StopSendingQuicStream({'connection': Client({'id': '…850f31', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 'state': , 'timestamp_start': 1605699329}), 'stream_id': 0, 'error_code': 258}) test/mitmproxy/proxy/tutils.py:292: AssertionError _____________________________ test_invalid_header ______________________________ tctx = Context( Client({'id': '…14d351', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…ea4953', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_invalid_header(tctx: context.Context): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:407: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _________________________________ test_simple __________________________________ tctx = Context( Client({'id': '…d0e3d4', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…66d325', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_simple(tctx: context.Context): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:438: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ________________________ test_response_trailers[stream] ________________________ tctx = Context( Client({'id': '…b02f7f', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…0ca401', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) open_h3_server_conn = Server({'id': '…3b1840', 'address': ('example.com', 80), 'state': , 'transport_protocol': 'udp', 'alpn': b'h3'}) stream = 'stream' @pytest.mark.parametrize("stream", ["stream", ""]) def test_response_trailers( tctx: context.Context, open_h3_server_conn: connection.Server, stream: str, ): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:485: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________________ test_response_trailers[] ___________________________ tctx = Context( Client({'id': '…fe3a80', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…d2cf3d', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) open_h3_server_conn = Server({'id': '…6861b5', 'address': ('example.com', 80), 'state': , 'transport_protocol': 'udp', 'alpn': b'h3'}) stream = '' @pytest.mark.parametrize("stream", ["stream", ""]) def test_response_trailers( tctx: context.Context, open_h3_server_conn: connection.Server, stream: str, ): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:485: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ________________________ test_request_trailers[stream] _________________________ tctx = Context( Client({'id': '…4c83de', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…ef2a0e', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) open_h3_server_conn = Server({'id': '…b84275', 'address': ('example.com', 80), 'state': , 'transport_protocol': 'udp', 'alpn': b'h3'}) stream = 'stream' @pytest.mark.parametrize("stream", ["stream", ""]) def test_request_trailers( tctx: context.Context, open_h3_server_conn: connection.Server, stream: str, ): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:559: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________________ test_request_trailers[] ____________________________ tctx = Context( Client({'id': '…d04ced', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…5fc096', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) open_h3_server_conn = Server({'id': '…128b39', 'address': ('example.com', 80), 'state': , 'transport_protocol': 'udp', 'alpn': b'h3'}) stream = '' @pytest.mark.parametrize("stream", ["stream", ""]) def test_request_trailers( tctx: context.Context, open_h3_server_conn: connection.Server, stream: str, ): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:559: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _____________________________ test_upstream_error ______________________________ tctx = Context( Client({'id': '…c425cb', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…868f49', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_upstream_error(tctx: context.Context): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:615: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _________________ test_http3_client_aborts[RST-request-stream] _________________ tctx = Context( Client({'id': '…7a7780', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…6f14b8', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'request', how = 'RST' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ____________________ test_http3_client_aborts[RST-request-] ____________________ tctx = Context( Client({'id': '…0acf3a', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…3d9162', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'request', how = 'RST' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ________________ test_http3_client_aborts[RST-response-stream] _________________ tctx = Context( Client({'id': '…28424f', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…ea4937', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'response', how = 'RST' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________ test_http3_client_aborts[RST-response-] ____________________ tctx = Context( Client({'id': '…56501d', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…3c91f9', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'response', how = 'RST' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _____________ test_http3_client_aborts[disconnect-request-stream] ______________ tctx = Context( Client({'id': '…e19561', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…b339c3', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'request', how = 'disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ________________ test_http3_client_aborts[disconnect-request-] _________________ tctx = Context( Client({'id': '…f065e5', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…0b391f', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'request', how = 'disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _____________ test_http3_client_aborts[disconnect-response-stream] _____________ tctx = Context( Client({'id': '…d7adb8', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…88bc05', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'response', how = 'disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ________________ test_http3_client_aborts[disconnect-response-] ________________ tctx = Context( Client({'id': '…189f65', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…83b9ef', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'response', how = 'disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________ test_http3_client_aborts[RST+disconnect-request-stream] ____________ tctx = Context( Client({'id': '…c068a7', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…67594f', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'request', how = 'RST+disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ______________ test_http3_client_aborts[RST+disconnect-request-] _______________ tctx = Context( Client({'id': '…ae62b1', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…427114', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'request', how = 'RST+disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________ test_http3_client_aborts[RST+disconnect-response-stream] ___________ tctx = Context( Client({'id': '…2664b2', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…37e471', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = 'stream', when = 'response', how = 'RST+disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ______________ test_http3_client_aborts[RST+disconnect-response-] ______________ tctx = Context( Client({'id': '…9e8b53', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…e287f8', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) stream = '', when = 'response', how = 'RST+disconnect' @pytest.mark.parametrize("stream", ["stream", ""]) @pytest.mark.parametrize("when", ["request", "response"]) @pytest.mark.parametrize("how", ["RST", "disconnect", "RST+disconnect"]) def test_http3_client_aborts(tctx: context.Context, stream: str, when: str, how: str):  """  Test handling of the case where a client aborts during request or response transmission.   If the client aborts the request transmission, we must trigger an error hook,  if the client disconnects during response transmission, no error hook is triggered.  """ server = tutils.Placeholder(connection.Server) flow = tutils.Placeholder(HTTPFlow) > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:666: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _____________________________ test_rst_then_close ______________________________ tctx = Context( Client({'id': '…edefce', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…7aef46', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_rst_then_close(tctx):  """  Test that we properly handle the case of a client that first causes protocol errors and then disconnects.   This is slightly different to H2, as QUIC will close the connection immediately.  """ > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:791: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ______________________ test_cancel_then_server_disconnect ______________________ tctx = Context( Client({'id': '…41f1fa', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…300450', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_cancel_then_server_disconnect(tctx: context.Context):  """  Test that we properly handle the case of the following event sequence:  - client cancels a stream  - we start an error hook  - server disconnects  - error hook completes.  """ > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:835: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _______________________ test_cancel_during_response_hook _______________________ tctx = Context( Client({'id': '…5c20b3', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…05702f', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_cancel_during_response_hook(tctx: context.Context):  """  Test that we properly handle the case of the following event sequence:  - we receive a server response  - we trigger the response hook  - the client cancels the stream  - the response hook completes   Given that we have already triggered the response hook, we don't want to trigger the error hook.  """ > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:873: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________________ test_stream_concurrency ____________________________ tctx = Context( Client({'id': '…b0202f', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…58780c', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_stream_concurrency(tctx: context.Context):  """Test that we can send an intercepted request with a lower stream id than one that has already been sent.""" > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:904: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ____________________ test_stream_concurrent_get_connection _____________________ tctx = Context( Client({'id': '…ff7aca', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…923216', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_stream_concurrent_get_connection(tctx: context.Context):  """Test that an immediate second request for the same domain does not trigger a second connection attempt.""" > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:944: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError _______________________________ test_kill_stream _______________________________ tctx = Context( Client({'id': '…ece334', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…d749ad', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_kill_stream(tctx: context.Context):  """Test that we can kill individual streams.""" > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:970: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________ test_receive_stop_sending[RESET_STREAM] ____________________ tctx = Context( Client({'id': '…56711c', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…daad10', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) close_type = 'RESET_STREAM' @pytest.mark.parametrize("close_type", ["RESET_STREAM", "STOP_SENDING"]) def test_receive_stop_sending(tctx: context.Context, close_type: str): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:1014: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________ test_receive_stop_sending[STOP_SENDING] ____________________ tctx = Context( Client({'id': '…38f742', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…be882a', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) close_type = 'STOP_SENDING' @pytest.mark.parametrize("close_type", ["RESET_STREAM", "STOP_SENDING"]) def test_receive_stop_sending(tctx: context.Context, close_type: str): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:1014: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError ___________________ TestClient.test_no_data_on_closed_stream ___________________ self = tctx = Context( Client({'id': '…56ab2e', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's...e.OPEN: 3>, 'timestamp_start': 1605699329}), Server({'id': '…23e151', 'address': None}), layers=[[Http3Client()]] ) def test_no_data_on_closed_stream(self, tctx: context.Context): frame_factory = FrameFactory(tctx.server, is_client=False) playbook = tutils.Playbook(Http3Client(tctx)) req = Request.make("GET", "http://example.com/") resp = [(b":status", b"200")] assert ( > playbook << frame_factory.send_init() >> frame_factory.receive_init() << frame_factory.send_encoder() >> frame_factory.receive_encoder() >> http.RequestHeaders(1, req, end_stream=True) << frame_factory.send_headers( [ (b":method", b"GET"), (b":scheme", b"http"), (b":path", b"/"), (b"content-length", b"0"), ], end_stream=True, ) >> frame_factory.receive_decoder() # for send_headers >> http.RequestEndOfMessage(1) >> frame_factory.receive_headers(resp) << http.ReceiveHttp(tutils.Placeholder(http.ResponseHeaders)) << frame_factory.send_decoder() # for receive_headers >> http.RequestProtocolError( 1, "cancelled", code=http.status_codes.CLIENT_CLOSED_REQUEST ) << frame_factory.send_reset(ErrorCode.H3_REQUEST_CANCELLED) << frame_factory.send_stop(ErrorCode.H3_REQUEST_CANCELLED) >> frame_factory.receive_data(b"foo") << None ) # important: no ResponseData event here! test/mitmproxy/proxy/layers/http/test_http3.py:1070: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(server on 2, b'\x00') E << SendQuicStreamData(server on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(server on 6, b'\x02') E << SendQuicStreamData(server on 10, b'\x03') E >> QuicStreamDataReceived(server on 3, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 258, in _handle_event E for cmd in super()._handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(server on 7, b'\x02') E - >> QuicStreamDataReceived(server on 11, b'\x03') E - >> QuicStreamDataReceived(server on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(server on 6, ) E - >> QuicStreamDataReceived(server on 7, b'?\xe1\x1f') E - >> RequestHeaders(stream_id=1, request=Request(GET example.com:80/), end_stream=True, replay_flow=None) E - << SendQuicStreamData(server on 6, ) E - << SendQuicStreamData(server on 0, [end_stream] ) E - >> QuicStreamDataReceived(server on 11, ) E - >> RequestEndOfMessage(stream_id=1) E - >> QuicStreamDataReceived(server on 7, ) E - >> QuicStreamDataReceived(server on 0, ) E - << Receive() E - << SendQuicStreamData(server on 10, ) E - >> RequestProtocolError(stream_id=1, message='cancelled', code=499) E - << ResetQuicStream({'connection': Server({'id': '…23e151', 'address': None}), 'stream_id': 0, 'error_code': 268}) E - << StopSendingQuicStream({'connection': Server({'id': '…23e151', 'address': None}), 'stream_id': 0, 'error_code': 268}) E - >> QuicStreamDataReceived(server on 0, b'\x00\x03foo') test/mitmproxy/proxy/tutils.py:292: AssertionError ______________________ TestClient.test_ignore_wrong_order ______________________ self = tctx = Context( Client({'id': '…f4c627', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's...e.OPEN: 3>, 'timestamp_start': 1605699329}), Server({'id': '…4068b2', 'address': None}), layers=[[Http3Client()]] ) def test_ignore_wrong_order(self, tctx: context.Context): frame_factory = FrameFactory(tctx.server, is_client=False) playbook = tutils.Playbook(Http3Client(tctx)) req = Request.make("GET", "http://example.com/") assert ( > playbook << frame_factory.send_init() >> frame_factory.receive_init() << frame_factory.send_encoder() >> frame_factory.receive_encoder() >> http.RequestTrailers(1, Headers([(b"x-trailer", b"")])) << commands.Log( "Received RequestTrailers(stream_id=0, trailers=Headers[(b'x-trailer', b'')]) unexpectedly: " "trailing HEADERS frame is not allowed in this state" ) >> http.RequestEndOfMessage(1) << commands.Log( "Received RequestEndOfMessage(stream_id=0) unexpectedly: " "DATA frame is not allowed in this state" ) >> http.RequestData(1, b"123") << commands.Log( "Received RequestData(stream_id=0, data=b'123') unexpectedly: " "DATA frame is not allowed in this state" ) >> http.RequestHeaders(1, req, end_stream=False) << frame_factory.send_headers( [ (b":method", b"GET"), (b":scheme", b"http"), (b":path", b"/"), (b"content-length", b"0"), ], end_stream=False, ) >> frame_factory.receive_decoder() # for send_headers >> http.RequestHeaders(1, req, end_stream=False) << commands.Log( "Received RequestHeaders(stream_id=0, request=Request(GET example.com:80/)," " end_stream=False, replay_flow=None) unexpectedly: " "initial HEADERS frame is not allowed in this state" ) ) test/mitmproxy/proxy/layers/http/test_http3.py:1106: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(server on 2, b'\x00') E << SendQuicStreamData(server on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(server on 6, b'\x02') E << SendQuicStreamData(server on 10, b'\x03') E >> QuicStreamDataReceived(server on 3, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 258, in _handle_event E for cmd in super()._handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(server on 7, b'\x02') E - >> QuicStreamDataReceived(server on 11, b'\x03') E - >> QuicStreamDataReceived(server on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(server on 6, ) E - >> QuicStreamDataReceived(server on 7, b'?\xe1\x1f') E - >> RequestTrailers(stream_id=1, trailers=Headers[(b'x-trailer', b'')]) E - << Log("Received RequestTrailers(stream_id=0, trailers=Headers[(b'x-trailer', b'')]) unexpectedly: trailing HEADERS frame is not allowed in this state", info) E - >> RequestEndOfMessage(stream_id=1) E - << Log('Received RequestEndOfMessage(stream_id=0) unexpectedly: DATA frame is not allowed in this state', info) E - >> RequestData(stream_id=1, data=b'123') E - << Log("Received RequestData(stream_id=0, data=b'123') unexpectedly: DATA frame is not allowed in this state", info) E - >> RequestHeaders(stream_id=1, request=Request(GET example.com:80/), end_stream=False, replay_flow=None) E - << SendQuicStreamData(server on 6, ) E - << SendQuicStreamData(server on 0, ) E - >> QuicStreamDataReceived(server on 11, ) E - >> RequestHeaders(stream_id=1, request=Request(GET example.com:80/), end_stream=False, replay_flow=None) E - << Log('Received RequestHeaders(stream_id=0, request=Request(GET example.com:80/), end_stream=False, replay_flow=None) unexpectedly: initial HEADERS frame is not allowed in this state', info) test/mitmproxy/proxy/tutils.py:292: AssertionError ____________________________ test_early_server_data ____________________________ tctx = Context( Client({'id': '…5faa24', 'address': None, 'peername': ('client', 1234), 'sockname': ('127.0.0.1', 8080), 's... Server({'id': '…add800', 'address': None, 'transport_protocol': 'udp'}), layers=[[HttpLayer(regular, conns: 1)]] ) def test_early_server_data(tctx: context.Context): > playbook, cff = start_h3_proxy(tctx) ^^^^^^^^^^^^^^^^^^^^ test/mitmproxy/proxy/layers/http/test_http3.py:1147: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/mitmproxy/proxy/layers/http/test_http3.py:373: in start_h3_proxy playbook _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def __bool__(self):  """Determine if playbook is correct.""" already_asserted = len(self.actual) i = already_asserted while i < len(self.expected): x = self.expected[i] if isinstance(x, commands.Command): pass else: if hasattr(x, "playbook_eval"): try: x = self.expected[i] = x.playbook_eval(self) except Exception: self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break for name, value in vars(x).items(): if isinstance(value, _Placeholder): setattr(x, name, value()) if isinstance(x, events.OpenConnectionCompleted) and not x.reply: x.command.connection.state = ConnectionState.OPEN x.command.connection.timestamp_start = 1624544785 elif isinstance(x, events.ConnectionClosed): x.connection.state &= ~ConnectionState.CAN_READ x.connection.timestamp_end = 1624544787  self.actual.append(x) cmds: list[commands.Command] = [] try: # consume them one by one so that we can extend the log with all commands until traceback. for cmd in self.layer.handle_event(x): cmds.append(cmd) except Exception: self.actual.extend(cmds) self.actual.append(_TracebackInPlaybook(traceback.format_exc())) break  cmds = list( _merge_sends( cmds, ignore_hooks=not self.hooks, ignore_logs=not self.logs ) )  self.actual.extend(cmds) pos = len(self.actual) - len(cmds) - 1 hook_replies = [] for cmd in cmds: pos += 1 assert self.actual[pos] == cmd if isinstance(cmd, commands.CloseTcpConnection) and cmd.half_close: cmd.connection.state &= ~ConnectionState.CAN_WRITE elif isinstance(cmd, commands.CloseConnection): cmd.connection.state = ConnectionState.CLOSED elif isinstance(cmd, commands.Log): need_to_emulate_log = ( not self.logs and cmd.level in (logging.DEBUG, logging.INFO) and ( pos >= len(self.expected) or not isinstance(self.expected[pos], commands.Log) ) ) if need_to_emulate_log: self.expected.insert(pos, cmd) elif isinstance(cmd, commands.StartHook) and not self.hooks: need_to_emulate_hook = not self.hooks and ( pos >= len(self.expected) or ( not ( isinstance(self.expected[pos], commands.StartHook) and self.expected[pos].name == cmd.name ) ) ) if need_to_emulate_hook: self.expected.insert(pos, cmd) if cmd.blocking: # the current event may still have yielded more events, so we need to insert # the reply *after* those additional events. hook_replies.append(events.HookCompleted(cmd)) self.expected = ( self.expected[: pos + 1] + hook_replies + self.expected[pos + 1 :] )  eq( self.expected[i:], self.actual[i:] ) # compare now already to set placeholders i += 1  if not eq(self.expected, self.actual): self._errored = True diffs = list( difflib.ndiff( [_fmt_entry(x) for x in self.expected], [_fmt_entry(x) for x in self.actual], ) ) if already_asserted: diffs.insert(already_asserted, "==== asserted until here ====") diff = "\n".join(diffs) > raise AssertionError(f"Playbook mismatch!\n{diff}") E AssertionError: Playbook mismatch! E >> Start({}) E << SendQuicStreamData(client on 3, b'\x00') E << SendQuicStreamData(client on 3, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E << SendQuicStreamData(client on 7, b'\x02') E << SendQuicStreamData(client on 11, b'\x03') E >> QuicStreamDataReceived(client on 2, b'\x00') E + << Traceback (most recent call last): E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/proxy/tutils.py", line 222, in __bool__ E for cmd in self.layer.handle_event(x): E ^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 944, in _handle_event E yield from self.event_to_child(handler, event) E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/__init__.py", line 953, in event_to_child E for command in child.handle_event(event): E ^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layer.py", line 157, in handle_event E command = command_generator.send(send) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http3.py", line 122, in _handle_event E h3_events = self.h3_conn.handle_stream_event(event) E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E File "/home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/proxy/layers/http/_http_h3.py", line 234, in handle_stream_event E elif self._get_or_create_stream(event.stream_id).ended: E ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E AttributeError: '_GeneratorContextManager' object has no attribute 'ended' E  E - >> QuicStreamDataReceived(client on 6, b'\x02') E - >> QuicStreamDataReceived(client on 10, b'\x03') E - >> QuicStreamDataReceived(client on 2, b'\x04\t\x01P\x00\x07\x10\x08\x01!\x01') E - << SendQuicStreamData(client on 7, ) E - >> QuicStreamDataReceived(client on 6, b'?\xe1\x1f') test/mitmproxy/proxy/tutils.py:292: AssertionError =============================== warnings summary =============================== ../../../../../../../usr/lib/python3.12/site-packages/pyasn1/codec/ber/encoder.py:952 /usr/lib/python3.12/site-packages/pyasn1/codec/ber/encoder.py:952: DeprecationWarning: tagMap is deprecated. Please use TAG_MAP instead. warnings.warn(f"{attr} is deprecated. Please use {newAttr} instead.", DeprecationWarning) ../../../../../../../usr/lib/python3.12/site-packages/pyasn1/codec/ber/encoder.py:952 /usr/lib/python3.12/site-packages/pyasn1/codec/ber/encoder.py:952: DeprecationWarning: typeMap is deprecated. Please use TYPE_MAP instead. warnings.warn(f"{attr} is deprecated. Please use {newAttr} instead.", DeprecationWarning) ../../../../../../../usr/lib/python3.12/site-packages/passlib/utils/__init__.py:854 /usr/lib/python3.12/site-packages/passlib/utils/__init__.py:854: DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13 from crypt import crypt as _crypt test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd return object.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment return object.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.web_display is moved to urwid.display.web if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.web_display is moved to urwid.display.web f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.web_display is moved to urwid.display.web if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.web_display is moved to urwid.display.web return object.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list return object.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox return object.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools if ismodule(module) and hasattr(module, '__file__'): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools f = module.__file__ test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools if getattr(object, '__file__', None): test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools return object.__file__ test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_configure /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/addons/tlsconfig.py:489: DeprecationWarning: get_elliptic_curve is deprecated. You should use the APIs in cryptography instead. crypto.get_elliptic_curve(ecdh_curve) test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_configure /usr/lib/python3.12/site-packages/OpenSSL/crypto.py:578: DeprecationWarning: get_elliptic_curves is deprecated. You should use the APIs in cryptography instead. for curve in get_elliptic_curves(): test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_tls_start_client test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_no_h2_proxy /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/addons/tlsconfig.py:215: DeprecationWarning: Passing pyOpenSSL X509 objects is deprecated. You should use a cryptography.x509.Certificate instead. tls_start.ssl_conn.use_certificate(entry.cert.to_pyopenssl()) test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_tls_start_client test/mitmproxy/addons/test_tlsconfig.py::TestTlsConfig::test_no_h2_proxy /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/mitmproxy/addons/tlsconfig.py:216: DeprecationWarning: Passing pyOpenSSL PKey objects is deprecated. You should use a cryptography private key instead. tls_start.ssl_conn.use_privatekey( test/mitmproxy/net/test_tls.py::test_sslkeylogfile /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/net/test_tls.py:63: DeprecationWarning: Passing pyOpenSSL X509 objects is deprecated. You should use a cryptography.x509.Certificate instead. server.use_certificate(entry.cert.to_pyopenssl()) test/mitmproxy/net/test_tls.py::test_sslkeylogfile /home/buildozer/aports/community/mitmproxy/src/mitmproxy-11.0.0/test/mitmproxy/net/test_tls.py:64: DeprecationWarning: Passing pyOpenSSL PKey objects is deprecated. You should use a cryptography private key instead. server.use_privatekey(crypto.PKey.from_cryptography_key(entry.privatekey)) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED test/mitmproxy/addons/test_proxyserver.py::test_reverse_http3_and_quic_stream[http3] - TimeoutError FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_ignore_push - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_fail_without_header - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_invalid_header - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_simple - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_response_trailers[stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_response_trailers[] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_request_trailers[stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_request_trailers[] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_upstream_error - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST-request-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST-request-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST-response-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST-response-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[disconnect-request-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[disconnect-request-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[disconnect-response-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[disconnect-response-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST+disconnect-request-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST+disconnect-request-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST+disconnect-response-stream] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_http3_client_aborts[RST+disconnect-response-] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_rst_then_close - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_cancel_then_server_disconnect - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_cancel_during_response_hook - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_stream_concurrency - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_stream_concurrent_get_connection - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_kill_stream - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_receive_stop_sending[RESET_STREAM] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_receive_stop_sending[STOP_SENDING] - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::TestClient::test_no_data_on_closed_stream - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::TestClient::test_ignore_wrong_order - AssertionError: Playbook mismatch! FAILED test/mitmproxy/proxy/layers/http/test_http3.py::test_early_server_data - AssertionError: Playbook mismatch! = 33 failed, 1755 passed, 4 skipped, 5 deselected, 35 warnings in 60.86s (0:01:00) = >>> ERROR: mitmproxy: check failed >>> mitmproxy: Uninstalling dependencies... ( 1/134) Purging .makedepends-mitmproxy (20251118.231526) ( 2/134) Purging py3-aioquic-pyc (1.3.0-r0) ( 3/134) Purging py3-aioquic (1.3.0-r0) ( 4/134) Purging py3-pylsqpack-pyc (0.3.23-r0) ( 5/134) Purging py3-pylsqpack (0.3.23-r0) ( 6/134) Purging py3-service_identity-pyc (24.2.0-r0) ( 7/134) Purging py3-service_identity (24.2.0-r0) ( 8/134) Purging py3-asn1-modules-pyc (0.4.2-r0) ( 9/134) Purging py3-asn1-modules (0.4.2-r0) ( 10/134) Purging py3-brotli-pyc (1.1.0-r2) ( 11/134) Purging py3-brotli (1.1.0-r2) ( 12/134) Purging py3-flask-pyc (3.1.2-r0) ( 13/134) Purging py3-flask (3.1.2-r0) ( 14/134) Purging py3-asgiref-pyc (3.9.1-r0) ( 15/134) Purging py3-asgiref (3.9.1-r0) ( 16/134) Purging py3-blinker-pyc (1.9.0-r0) ( 17/134) Purging py3-blinker (1.9.0-r0) ( 18/134) Purging py3-click-pyc (8.1.8-r1) ( 19/134) Purging py3-click (8.1.8-r1) ( 20/134) Purging py3-dotenv-pyc (1.0.1-r1) ( 21/134) Purging py3-dotenv (1.0.1-r1) ( 22/134) Purging py3-itsdangerous-pyc (2.2.0-r0) ( 23/134) Purging py3-itsdangerous (2.2.0-r0) ( 24/134) Purging py3-jinja2-pyc (3.1.6-r0) ( 25/134) Purging py3-jinja2 (3.1.6-r0) ( 26/134) Purging py3-werkzeug-pyc (3.1.3-r0) ( 27/134) Purging py3-werkzeug (3.1.3-r0) ( 28/134) Purging py3-markupsafe-pyc (3.0.2-r0) ( 29/134) Purging py3-markupsafe (3.0.2-r0) ( 30/134) Purging py3-h2-pyc (4.1.0-r3) ( 31/134) Purging py3-h2 (4.1.0-r3) ( 32/134) Purging py3-hpack-pyc (4.1.0-r0) ( 33/134) Purging py3-hpack (4.1.0-r0) ( 34/134) Purging py3-hyperframe-pyc (6.1.0-r0) ( 35/134) Purging py3-hyperframe (6.1.0-r0) ( 36/134) Purging py3-kaitaistruct-pyc (0.10-r4) ( 37/134) Purging py3-kaitaistruct (0.10-r4) ( 38/134) Purging py3-ldap3-pyc (2.9.1-r3) ( 39/134) Purging py3-ldap3 (2.9.1-r3) ( 40/134) Purging py3-asn1-pyc (0.6.1-r0) ( 41/134) Purging py3-asn1 (0.6.1-r0) ( 42/134) Purging py3-mitmproxy-rs-pyc (0.9.3-r0) ( 43/134) Purging py3-mitmproxy-rs (0.9.3-r0) ( 44/134) Purging py3-msgpack-pyc (1.0.8-r1) ( 45/134) Purging py3-msgpack (1.0.8-r1) ( 46/134) Purging py3-passlib-pyc (1.7.4-r7) ( 47/134) Purging py3-passlib (1.7.4-r7) ( 48/134) Purging py3-protobuf-pyc (6.31.1-r1) ( 49/134) Purging py3-protobuf (6.31.1-r1) ( 50/134) Purging tzdata (2025b-r0) ( 51/134) Purging py3-openssl-pyc (25.3.0-r0) ( 52/134) Purging py3-openssl (25.3.0-r0) ( 53/134) Purging py3-cryptography-pyc (46.0.2-r0) ( 54/134) Purging py3-cryptography (46.0.2-r0) ( 55/134) Purging py3-cffi-pyc (1.17.1-r1) ( 56/134) Purging py3-cffi (1.17.1-r1) ( 57/134) Purging py3-cparser-pyc (2.22-r1) ( 58/134) Purging py3-cparser (2.22-r1) ( 59/134) Purging py3-pyperclip-pyc (1.11.0-r0) ( 60/134) Purging py3-pyperclip (1.11.0-r0) ( 61/134) Purging py3-ruamel.yaml-pyc (0.18.16-r0) ( 62/134) Purging py3-ruamel.yaml (0.18.16-r0) ( 63/134) Purging py3-ruamel.yaml.clib (0.2.8-r2) ( 64/134) Purging py3-tornado-pyc (6.5.2-r0) ( 65/134) Purging py3-tornado (6.5.2-r0) ( 66/134) Purging py3-urwid-pyc (2.6.13-r0) ( 67/134) Purging py3-urwid (2.6.13-r0) ( 68/134) Purging py3-typing-extensions-pyc (4.15.0-r0) ( 69/134) Purging py3-typing-extensions (4.15.0-r0) ( 70/134) Purging py3-wcwidth-pyc (0.2.13-r1) ( 71/134) Purging py3-wcwidth (0.2.13-r1) ( 72/134) Purging py3-wsproto-pyc (1.2.0-r3) ( 73/134) Purging py3-wsproto (1.2.0-r3) ( 74/134) Purging py3-h11-pyc (0.16.0-r0) ( 75/134) Purging py3-h11 (0.16.0-r0) ( 76/134) Purging py3-publicsuffix2-pyc (2.20191221-r6) ( 77/134) Purging py3-publicsuffix2 (2.20191221-r6) ( 78/134) Purging py3-zstandard-pyc (0.23.0-r2) ( 79/134) Purging py3-zstandard (0.23.0-r2) ( 80/134) Purging py3-gpep517-pyc (19-r1) ( 81/134) Purging py3-gpep517 (19-r1) ( 82/134) Purging py3-installer-pyc (0.7.0-r2) ( 83/134) Purging py3-installer (0.7.0-r2) ( 84/134) Purging py3-setuptools-pyc (80.9.0-r2) ( 85/134) Purging py3-setuptools (80.9.0-r2) ( 86/134) Purging py3-wheel-pyc (0.46.1-r0) ( 87/134) Purging py3-wheel (0.46.1-r0) ( 88/134) Purging py3-hypothesis-pyc (6.146.0-r0) ( 89/134) Purging py3-hypothesis (6.146.0-r0) ( 90/134) Purging py3-sortedcontainers-pyc (2.4.0-r5) ( 91/134) Purging py3-sortedcontainers (2.4.0-r5) ( 92/134) Purging py3-parver-pyc (0.5-r1) ( 93/134) Purging py3-parver (0.5-r1) ( 94/134) Purging py3-arpeggio-pyc (2.0.2-r2) ( 95/134) Purging py3-arpeggio (2.0.2-r2) ( 96/134) Purging py3-attrs-pyc (25.3.0-r0) ( 97/134) Purging py3-attrs (25.3.0-r0) ( 98/134) Purging py3-pytest-asyncio-pyc (0.25.0-r1) ( 99/134) Purging py3-pytest-asyncio (0.25.0-r1) (100/134) Purging py3-pytest-pyc (8.4.2-r1) (101/134) Purging py3-pytest (8.4.2-r1) (102/134) Purging py3-iniconfig-pyc (2.3.0-r0) (103/134) Purging py3-iniconfig (2.3.0-r0) (104/134) Purging py3-packaging-pyc (25.0-r0) (105/134) Purging py3-packaging (25.0-r0) (106/134) Purging py3-parsing-pyc (3.2.3-r0) (107/134) Purging py3-parsing (3.2.3-r0) (108/134) Purging py3-pluggy-pyc (1.6.0-r0) (109/134) Purging py3-pluggy (1.6.0-r0) (110/134) Purging py3-py-pyc (1.11.0-r4) (111/134) Purging py3-py (1.11.0-r4) (112/134) Purging py3-pygments-pyc (2.19.2-r0) (113/134) Purging py3-pygments (2.19.2-r0) (114/134) Purging py3-requests-pyc (2.32.5-r0) (115/134) Purging py3-requests (2.32.5-r0) (116/134) Purging py3-certifi-pyc (2025.11.12-r0) (117/134) Purging py3-certifi (2025.11.12-r0) (118/134) Purging py3-charset-normalizer-pyc (3.4.4-r0) (119/134) Purging py3-charset-normalizer (3.4.4-r0) (120/134) Purging py3-idna-pyc (3.10-r0) (121/134) Purging py3-idna (3.10-r0) (122/134) Purging py3-urllib3-pyc (1.26.20-r0) (123/134) Purging py3-urllib3 (1.26.20-r0) (124/134) Purging python3-pyc (3.12.12-r0) (125/134) Purging python3-pycache-pyc0 (3.12.12-r0) (126/134) Purging pyc (3.12.12-r0) (127/134) Purging python3 (3.12.12-r0) (128/134) Purging gdbm (1.26-r0) (129/134) Purging libbz2 (1.0.8-r6) (130/134) Purging libffi (3.5.2-r0) (131/134) Purging libpanelw (6.5_p20251115-r0) (132/134) Purging mpdecimal (4.0.1-r0) (133/134) Purging sqlite-libs (3.51.0-r0) (134/134) Purging xz-libs (5.8.1-r0) busybox-1.37.0-r25.trigger: Executing script... OK: 426 MiB in 105 packages