>>> py3-aiosmtpd: Building community/py3-aiosmtpd 1.4.6-r2 (using abuild 3.17.0_rc1-r2) started Sat, 25 Apr 2026 16:36:19 +0000 >>> py3-aiosmtpd: Validating /home/buildozer/aports/community/py3-aiosmtpd/APKBUILD... >>> py3-aiosmtpd: Analyzing dependencies... >>> py3-aiosmtpd: Installing for build: build-base py3-attrs py3-atpublic py3-setuptools py3-gpep517 py3-wheel py3-pytest py3-pytest-asyncio py3-pytest-cov py3-pytest-mock ( 1/51) Installing libbz2 (1.0.8-r6) ( 2/51) Installing libffi (3.5.2-r1) ( 3/51) Installing gdbm (1.26-r0) ( 4/51) Installing xz-libs (5.8.2-r0) ( 5/51) Installing mpdecimal (4.0.1-r0) ( 6/51) Installing libpanelw (6.6_p20260404-r0) ( 7/51) Installing readline (8.3.3-r1) ( 8/51) Installing sqlite-libs (3.53.0-r0) ( 9/51) Installing python3 (3.14.3-r0) (10/51) Installing python3-pycache-pyc0 (3.14.3-r0) (11/51) Installing pyc (3.14.3-r0) (12/51) Installing py3-attrs-pyc (26.1.0-r0) (13/51) Installing python3-pyc (3.14.3-r0) (14/51) Installing py3-attrs (26.1.0-r0) (15/51) Installing py3-atpublic (7.0.0-r1) (16/51) Installing py3-atpublic-pyc (7.0.0-r1) (17/51) Installing py3-parsing (3.3.2-r1) (18/51) Installing py3-parsing-pyc (3.3.2-r1) (19/51) Installing py3-packaging (26.1-r0) (20/51) Installing py3-packaging-pyc (26.1-r0) (21/51) Installing py3-setuptools (82.0.1-r1) (22/51) Installing py3-setuptools-pyc (82.0.1-r1) (23/51) Installing py3-installer (1.0.0-r0) (24/51) Installing py3-installer-pyc (1.0.0-r0) (25/51) Installing py3-gpep517 (19-r2) (26/51) Installing py3-gpep517-pyc (19-r2) (27/51) Installing py3-wheel (0.47.0-r0) (28/51) Installing py3-wheel-pyc (0.47.0-r0) (29/51) Installing py3-iniconfig (2.3.0-r1) (30/51) Installing py3-iniconfig-pyc (2.3.0-r1) (31/51) Installing py3-pluggy (1.6.0-r1) (32/51) Installing py3-pluggy-pyc (1.6.0-r1) (33/51) Installing py3-py (1.11.0-r5) (34/51) Installing py3-py-pyc (1.11.0-r5) (35/51) Installing py3-pygments (2.20.0-r0) (36/51) Installing py3-pygments-pyc (2.20.0-r0) (37/51) Installing py3-pytest (9.0.3-r0) (38/51) Installing py3-pytest-pyc (9.0.3-r0) (39/51) Installing py3-typing-extensions (4.15.0-r1) (40/51) Installing py3-typing-extensions-pyc (4.15.0-r1) (41/51) Installing py3-pytest-asyncio (1.3.0-r1) (42/51) Installing py3-pytest-asyncio-pyc (1.3.0-r1) (43/51) Installing py3-coverage (7.13.5-r1) (44/51) Installing py3-coverage-pyc (7.13.5-r1) (45/51) Installing py3-pytest-cov (5.0.0-r2) (46/51) Installing py3-pytest-cov-pyc (5.0.0-r2) (47/51) Installing py3-mock (5.2.0-r1) (48/51) Installing py3-mock-pyc (5.2.0-r1) (49/51) Installing py3-pytest-mock (3.15.1-r1) (50/51) Installing py3-pytest-mock-pyc (3.15.1-r1) (51/51) Installing .makedepends-py3-aiosmtpd (20260425.163626) Executing busybox-1.37.0-r31.trigger OK: 884.7 MiB in 155 packages >>> py3-aiosmtpd: Cleaning up srcdir >>> py3-aiosmtpd: Cleaning up pkgdir >>> py3-aiosmtpd: Cleaning up tmpdir >>> py3-aiosmtpd: Fetching https://distfiles.alpinelinux.org/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz Connecting to distfiles.alpinelinux.org (172.105.82.32:443) saving to '/var/cache/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz.part' py3-aiosmtpd-1.4.6.t 100% |********************************| 150k 0:00:00 ETA '/var/cache/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz.part' saved /var/cache/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz: OK /home/buildozer/aports/community/py3-aiosmtpd/migrate-config-test-from-pkg-resources.patch: OK /home/buildozer/aports/community/py3-aiosmtpd/fix-test-server-assertion-error.patch: OK >>> py3-aiosmtpd: Fetching https://distfiles.alpinelinux.org/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz /var/cache/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz: OK /home/buildozer/aports/community/py3-aiosmtpd/migrate-config-test-from-pkg-resources.patch: OK /home/buildozer/aports/community/py3-aiosmtpd/fix-test-server-assertion-error.patch: OK >>> py3-aiosmtpd: Unpacking /var/cache/distfiles/v3.24/py3-aiosmtpd-1.4.6.tar.gz... >>> py3-aiosmtpd: migrate-config-test-from-pkg-resources.patch patching file aiosmtpd/tests/conftest.py >>> py3-aiosmtpd: fix-test-server-assertion-error.patch patching file aiosmtpd/tests/test_server.py 2026-04-25 16:36:29,510 gpep517 INFO Building wheel via backend setuptools.build_meta /usr/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved License :: OSI Approved :: Apache Software License See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() 2026-04-25 16:36:29,634 root INFO running bdist_wheel 2026-04-25 16:36:29,719 root INFO running build 2026-04-25 16:36:29,720 root INFO running build_py 2026-04-25 16:36:29,739 root INFO creating build/lib/aiosmtpd 2026-04-25 16:36:29,741 root INFO copying aiosmtpd/handlers.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,742 root INFO copying aiosmtpd/__init__.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,744 root INFO copying aiosmtpd/main.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,745 root INFO copying aiosmtpd/controller.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,747 root INFO copying aiosmtpd/__main__.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,748 root INFO copying aiosmtpd/lmtp.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,750 root INFO copying aiosmtpd/smtp.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,752 root INFO copying aiosmtpd/proxy_protocol.py -> build/lib/aiosmtpd 2026-04-25 16:36:29,755 root INFO creating build/lib/aiosmtpd/tests 2026-04-25 16:36:29,756 root INFO copying aiosmtpd/tests/test_lmtp.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,757 root INFO copying aiosmtpd/tests/__init__.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,759 root INFO copying aiosmtpd/tests/conftest.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,760 root INFO copying aiosmtpd/tests/test_smtpsmuggling.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,762 root INFO copying aiosmtpd/tests/test_server.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,763 root INFO copying aiosmtpd/tests/test_proxyprotocol.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,765 root INFO copying aiosmtpd/tests/test_handlers.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,767 root INFO copying aiosmtpd/tests/test_main.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,768 root INFO copying aiosmtpd/tests/test_misc.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,770 root INFO copying aiosmtpd/tests/test_starttls.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,771 root INFO copying aiosmtpd/tests/test_smtps.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,772 root INFO copying aiosmtpd/tests/test_smtp.py -> build/lib/aiosmtpd/tests 2026-04-25 16:36:29,775 root INFO creating build/lib/aiosmtpd/docs 2026-04-25 16:36:29,776 root INFO copying aiosmtpd/docs/__init__.py -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,777 root INFO copying aiosmtpd/docs/conf.py -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,779 root INFO creating build/lib/aiosmtpd/testing 2026-04-25 16:36:29,780 root INFO copying aiosmtpd/testing/__init__.py -> build/lib/aiosmtpd/testing 2026-04-25 16:36:29,781 root INFO copying aiosmtpd/testing/statuscodes.py -> build/lib/aiosmtpd/testing 2026-04-25 16:36:29,782 root INFO copying aiosmtpd/testing/helpers.py -> build/lib/aiosmtpd/testing 2026-04-25 16:36:29,784 root INFO creating build/lib/aiosmtpd/qa 2026-04-25 16:36:29,785 root INFO copying aiosmtpd/qa/__init__.py -> build/lib/aiosmtpd/qa 2026-04-25 16:36:29,786 root INFO copying aiosmtpd/qa/test_0packaging.py -> build/lib/aiosmtpd/qa 2026-04-25 16:36:29,787 root INFO copying aiosmtpd/qa/test_1testsuite.py -> build/lib/aiosmtpd/qa 2026-04-25 16:36:29,789 root INFO creating build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,790 root INFO copying aiosmtpd/tests/certs/__init__.py -> build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,791 root INFO running egg_info 2026-04-25 16:36:29,804 root INFO creating aiosmtpd.egg-info 2026-04-25 16:36:29,805 root INFO writing aiosmtpd.egg-info/PKG-INFO 2026-04-25 16:36:29,808 root INFO writing dependency_links to aiosmtpd.egg-info/dependency_links.txt 2026-04-25 16:36:29,809 root INFO writing entry points to aiosmtpd.egg-info/entry_points.txt 2026-04-25 16:36:29,810 root INFO writing requirements to aiosmtpd.egg-info/requires.txt 2026-04-25 16:36:29,811 root INFO writing top-level names to aiosmtpd.egg-info/top_level.txt 2026-04-25 16:36:29,812 root INFO writing manifest file 'aiosmtpd.egg-info/SOURCES.txt' 2026-04-25 16:36:29,833 root INFO reading manifest file 'aiosmtpd.egg-info/SOURCES.txt' 2026-04-25 16:36:29,835 root INFO reading manifest template 'MANIFEST.in' 2026-04-25 16:36:29,844 root WARNING warning: no previously-included files matching '*.py[oc]' found anywhere in distribution 2026-04-25 16:36:29,845 root WARNING warning: no previously-included files matching '*.sw[a-p]' found anywhere in distribution 2026-04-25 16:36:29,845 root WARNING warning: no previously-included files matching 'pyvenv.cfg' found anywhere in distribution 2026-04-25 16:36:29,846 root INFO adding license file 'LICENSE' 2026-04-25 16:36:29,846 root INFO adding license file 'NOTICE' 2026-04-25 16:36:29,852 root INFO writing manifest file 'aiosmtpd.egg-info/SOURCES.txt' /usr/lib/python3.14/site-packages/setuptools/command/build_py.py:215: _Warning: Package 'aiosmtpd.docs._exts' is absent from the `packages` configuration. !! ******************************************************************************** ############################ # Package would be ignored # ############################ Python recognizes 'aiosmtpd.docs._exts' as an importable package[^1], but it is absent from setuptools' `packages` configuration. This leads to an ambiguous overall configuration. If you want to distribute this package, please make sure that 'aiosmtpd.docs._exts' is explicitly added to the `packages` configuration field. Alternatively, you can also rely on setuptools' discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html If you don't want 'aiosmtpd.docs._exts' to be distributed and are already explicitly excluding 'aiosmtpd.docs._exts' via `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`, you can try to use `exclude_package_data`, or `include-package-data=False` in combination with a more fine grained `package-data` configuration. You can read more about "package data files" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/datafiles.html [^1]: For Python, any directory (with suitable naming) can be imported, even if it does not contain any `.py` files. On the other hand, currently there is no concept of package data directory, all directories are treated like packages. ******************************************************************************** !! check.warn(importable) /usr/lib/python3.14/site-packages/setuptools/command/build_py.py:215: _Warning: Package 'aiosmtpd.docs._static' is absent from the `packages` configuration. !! ******************************************************************************** ############################ # Package would be ignored # ############################ Python recognizes 'aiosmtpd.docs._static' as an importable package[^1], but it is absent from setuptools' `packages` configuration. This leads to an ambiguous overall configuration. If you want to distribute this package, please make sure that 'aiosmtpd.docs._static' is explicitly added to the `packages` configuration field. Alternatively, you can also rely on setuptools' discovery methods (for example by using `find_namespace_packages(...)`/`find_namespace:` instead of `find_packages(...)`/`find:`). You can read more about "package discovery" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/package_discovery.html If you don't want 'aiosmtpd.docs._static' to be distributed and are already explicitly excluding 'aiosmtpd.docs._static' via `find_namespace_packages(...)/find_namespace` or `find_packages(...)/find`, you can try to use `exclude_package_data`, or `include-package-data=False` in combination with a more fine grained `package-data` configuration. You can read more about "package data files" on setuptools documentation page: - https://setuptools.pypa.io/en/latest/userguide/datafiles.html [^1]: For Python, any directory (with suitable naming) can be imported, even if it does not contain any `.py` files. On the other hand, currently there is no concept of package data directory, all directories are treated like packages. ******************************************************************************** !! check.warn(importable) 2026-04-25 16:36:29,860 root INFO copying aiosmtpd/py.typed -> build/lib/aiosmtpd 2026-04-25 16:36:29,861 root INFO copying aiosmtpd/docs/.gitignore -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,863 root INFO copying aiosmtpd/docs/Makefile -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,867 root INFO copying aiosmtpd/docs/NEWS.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,868 root INFO copying aiosmtpd/docs/auth.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,870 root INFO copying aiosmtpd/docs/cli.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,871 root INFO copying aiosmtpd/docs/concepts.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,873 root INFO copying aiosmtpd/docs/controller.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,874 root INFO copying aiosmtpd/docs/handlers.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,876 root INFO copying aiosmtpd/docs/index.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,877 root INFO copying aiosmtpd/docs/intro.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,879 root INFO copying aiosmtpd/docs/lmtp.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,880 root INFO copying aiosmtpd/docs/manpage.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,881 root INFO copying aiosmtpd/docs/migrating.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,883 root INFO copying aiosmtpd/docs/proxyprotocol.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,884 root INFO copying aiosmtpd/docs/requirements.txt -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,886 root INFO copying aiosmtpd/docs/smtp.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,887 root INFO copying aiosmtpd/docs/testing.rst -> build/lib/aiosmtpd/docs 2026-04-25 16:36:29,889 root INFO creating build/lib/aiosmtpd/docs/_exts 2026-04-25 16:36:29,889 root INFO copying aiosmtpd/docs/_exts/autoprogramm.py -> build/lib/aiosmtpd/docs/_exts 2026-04-25 16:36:29,891 root INFO creating build/lib/aiosmtpd/docs/_static 2026-04-25 16:36:29,892 root INFO copying aiosmtpd/docs/_static/aiosmtpd.css -> build/lib/aiosmtpd/docs/_static 2026-04-25 16:36:29,893 root INFO copying aiosmtpd/tests/certs/server.crt -> build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,894 root INFO copying aiosmtpd/tests/certs/server.key -> build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,896 root INFO copying aiosmtpd/tests/certs/server_alt.crt -> build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,897 root INFO copying aiosmtpd/tests/certs/server_alt.key -> build/lib/aiosmtpd/tests/certs 2026-04-25 16:36:29,935 root INFO installing to build/bdist.linux-riscv64/wheel 2026-04-25 16:36:29,935 root INFO running install 2026-04-25 16:36:29,972 root INFO running install_lib 2026-04-25 16:36:29,989 root INFO creating build/bdist.linux-riscv64/wheel 2026-04-25 16:36:29,991 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd 2026-04-25 16:36:29,992 root INFO copying build/lib/aiosmtpd/handlers.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:29,993 root INFO copying build/lib/aiosmtpd/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:29,994 root INFO copying build/lib/aiosmtpd/main.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:29,995 root INFO copying build/lib/aiosmtpd/controller.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:29,997 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/tests 2026-04-25 16:36:29,998 root INFO copying build/lib/aiosmtpd/tests/test_lmtp.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:29,999 root INFO copying build/lib/aiosmtpd/tests/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,000 root INFO copying build/lib/aiosmtpd/tests/conftest.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,001 root INFO copying build/lib/aiosmtpd/tests/test_smtpsmuggling.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,003 root INFO copying build/lib/aiosmtpd/tests/test_server.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,004 root INFO copying build/lib/aiosmtpd/tests/test_proxyprotocol.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,006 root INFO copying build/lib/aiosmtpd/tests/test_handlers.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,007 root INFO copying build/lib/aiosmtpd/tests/test_main.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,008 root INFO copying build/lib/aiosmtpd/tests/test_misc.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,010 root INFO copying build/lib/aiosmtpd/tests/test_starttls.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,011 root INFO copying build/lib/aiosmtpd/tests/test_smtps.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,012 root INFO copying build/lib/aiosmtpd/tests/test_smtp.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests 2026-04-25 16:36:30,014 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/tests/certs 2026-04-25 16:36:30,015 root INFO copying build/lib/aiosmtpd/tests/certs/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests/certs 2026-04-25 16:36:30,016 root INFO copying build/lib/aiosmtpd/tests/certs/server_alt.key -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests/certs 2026-04-25 16:36:30,017 root INFO copying build/lib/aiosmtpd/tests/certs/server.key -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests/certs 2026-04-25 16:36:30,018 root INFO copying build/lib/aiosmtpd/tests/certs/server_alt.crt -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests/certs 2026-04-25 16:36:30,019 root INFO copying build/lib/aiosmtpd/tests/certs/server.crt -> build/bdist.linux-riscv64/wheel/./aiosmtpd/tests/certs 2026-04-25 16:36:30,021 root INFO copying build/lib/aiosmtpd/py.typed -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:30,022 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/docs 2026-04-25 16:36:30,023 root INFO copying build/lib/aiosmtpd/docs/NEWS.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,024 root INFO copying build/lib/aiosmtpd/docs/smtp.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,026 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/docs/_exts 2026-04-25 16:36:30,027 root INFO copying build/lib/aiosmtpd/docs/_exts/autoprogramm.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs/_exts 2026-04-25 16:36:30,028 root INFO copying build/lib/aiosmtpd/docs/controller.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,029 root INFO copying build/lib/aiosmtpd/docs/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,031 root INFO copying build/lib/aiosmtpd/docs/auth.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,032 root INFO copying build/lib/aiosmtpd/docs/.gitignore -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,033 root INFO copying build/lib/aiosmtpd/docs/concepts.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,034 root INFO copying build/lib/aiosmtpd/docs/proxyprotocol.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,036 root INFO copying build/lib/aiosmtpd/docs/Makefile -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,037 root INFO copying build/lib/aiosmtpd/docs/manpage.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,038 root INFO copying build/lib/aiosmtpd/docs/requirements.txt -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,039 root INFO copying build/lib/aiosmtpd/docs/lmtp.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,040 root INFO copying build/lib/aiosmtpd/docs/index.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,041 root INFO copying build/lib/aiosmtpd/docs/handlers.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,043 root INFO copying build/lib/aiosmtpd/docs/cli.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,044 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/docs/_static 2026-04-25 16:36:30,045 root INFO copying build/lib/aiosmtpd/docs/_static/aiosmtpd.css -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs/_static 2026-04-25 16:36:30,046 root INFO copying build/lib/aiosmtpd/docs/conf.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,047 root INFO copying build/lib/aiosmtpd/docs/testing.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,049 root INFO copying build/lib/aiosmtpd/docs/intro.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,050 root INFO copying build/lib/aiosmtpd/docs/migrating.rst -> build/bdist.linux-riscv64/wheel/./aiosmtpd/docs 2026-04-25 16:36:30,051 root INFO copying build/lib/aiosmtpd/__main__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:30,052 root INFO copying build/lib/aiosmtpd/lmtp.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:30,053 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/testing 2026-04-25 16:36:30,054 root INFO copying build/lib/aiosmtpd/testing/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/testing 2026-04-25 16:36:30,055 root INFO copying build/lib/aiosmtpd/testing/statuscodes.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/testing 2026-04-25 16:36:30,057 root INFO copying build/lib/aiosmtpd/testing/helpers.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/testing 2026-04-25 16:36:30,058 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd/qa 2026-04-25 16:36:30,059 root INFO copying build/lib/aiosmtpd/qa/__init__.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/qa 2026-04-25 16:36:30,060 root INFO copying build/lib/aiosmtpd/qa/test_0packaging.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/qa 2026-04-25 16:36:30,061 root INFO copying build/lib/aiosmtpd/qa/test_1testsuite.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd/qa 2026-04-25 16:36:30,062 root INFO copying build/lib/aiosmtpd/smtp.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:30,064 root INFO copying build/lib/aiosmtpd/proxy_protocol.py -> build/bdist.linux-riscv64/wheel/./aiosmtpd 2026-04-25 16:36:30,065 root INFO running install_egg_info 2026-04-25 16:36:30,084 root INFO Copying aiosmtpd.egg-info to build/bdist.linux-riscv64/wheel/./aiosmtpd-1.4.6-py3.14.egg-info 2026-04-25 16:36:30,091 root INFO running install_scripts 2026-04-25 16:36:30,099 root INFO creating build/bdist.linux-riscv64/wheel/aiosmtpd-1.4.6.dist-info/WHEEL 2026-04-25 16:36:30,102 wheel INFO creating '/home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/.dist/.tmp-rrm3n8d5/aiosmtpd-1.4.6-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it 2026-04-25 16:36:30,103 wheel INFO adding 'aiosmtpd/__init__.py' 2026-04-25 16:36:30,105 wheel INFO adding 'aiosmtpd/__main__.py' 2026-04-25 16:36:30,106 wheel INFO adding 'aiosmtpd/controller.py' 2026-04-25 16:36:30,107 wheel INFO adding 'aiosmtpd/handlers.py' 2026-04-25 16:36:30,109 wheel INFO adding 'aiosmtpd/lmtp.py' 2026-04-25 16:36:30,110 wheel INFO adding 'aiosmtpd/main.py' 2026-04-25 16:36:30,111 wheel INFO adding 'aiosmtpd/proxy_protocol.py' 2026-04-25 16:36:30,112 wheel INFO adding 'aiosmtpd/py.typed' 2026-04-25 16:36:30,114 wheel INFO adding 'aiosmtpd/smtp.py' 2026-04-25 16:36:30,117 wheel INFO adding 'aiosmtpd/docs/.gitignore' 2026-04-25 16:36:30,118 wheel INFO adding 'aiosmtpd/docs/Makefile' 2026-04-25 16:36:30,119 wheel INFO adding 'aiosmtpd/docs/NEWS.rst' 2026-04-25 16:36:30,120 wheel INFO adding 'aiosmtpd/docs/__init__.py' 2026-04-25 16:36:30,122 wheel INFO adding 'aiosmtpd/docs/auth.rst' 2026-04-25 16:36:30,123 wheel INFO adding 'aiosmtpd/docs/cli.rst' 2026-04-25 16:36:30,124 wheel INFO adding 'aiosmtpd/docs/concepts.rst' 2026-04-25 16:36:30,125 wheel INFO adding 'aiosmtpd/docs/conf.py' 2026-04-25 16:36:30,127 wheel INFO adding 'aiosmtpd/docs/controller.rst' 2026-04-25 16:36:30,128 wheel INFO adding 'aiosmtpd/docs/handlers.rst' 2026-04-25 16:36:30,130 wheel INFO adding 'aiosmtpd/docs/index.rst' 2026-04-25 16:36:30,131 wheel INFO adding 'aiosmtpd/docs/intro.rst' 2026-04-25 16:36:30,132 wheel INFO adding 'aiosmtpd/docs/lmtp.rst' 2026-04-25 16:36:30,133 wheel INFO adding 'aiosmtpd/docs/manpage.rst' 2026-04-25 16:36:30,134 wheel INFO adding 'aiosmtpd/docs/migrating.rst' 2026-04-25 16:36:30,135 wheel INFO adding 'aiosmtpd/docs/proxyprotocol.rst' 2026-04-25 16:36:30,137 wheel INFO adding 'aiosmtpd/docs/requirements.txt' 2026-04-25 16:36:30,138 wheel INFO adding 'aiosmtpd/docs/smtp.rst' 2026-04-25 16:36:30,140 wheel INFO adding 'aiosmtpd/docs/testing.rst' 2026-04-25 16:36:30,141 wheel INFO adding 'aiosmtpd/docs/_exts/autoprogramm.py' 2026-04-25 16:36:30,143 wheel INFO adding 'aiosmtpd/docs/_static/aiosmtpd.css' 2026-04-25 16:36:30,144 wheel INFO adding 'aiosmtpd/qa/__init__.py' 2026-04-25 16:36:30,145 wheel INFO adding 'aiosmtpd/qa/test_0packaging.py' 2026-04-25 16:36:30,147 wheel INFO adding 'aiosmtpd/qa/test_1testsuite.py' 2026-04-25 16:36:30,148 wheel INFO adding 'aiosmtpd/testing/__init__.py' 2026-04-25 16:36:30,149 wheel INFO adding 'aiosmtpd/testing/helpers.py' 2026-04-25 16:36:30,150 wheel INFO adding 'aiosmtpd/testing/statuscodes.py' 2026-04-25 16:36:30,152 wheel INFO adding 'aiosmtpd/tests/__init__.py' 2026-04-25 16:36:30,153 wheel INFO adding 'aiosmtpd/tests/conftest.py' 2026-04-25 16:36:30,155 wheel INFO adding 'aiosmtpd/tests/test_handlers.py' 2026-04-25 16:36:30,157 wheel INFO adding 'aiosmtpd/tests/test_lmtp.py' 2026-04-25 16:36:30,158 wheel INFO adding 'aiosmtpd/tests/test_main.py' 2026-04-25 16:36:30,160 wheel INFO adding 'aiosmtpd/tests/test_misc.py' 2026-04-25 16:36:30,161 wheel INFO adding 'aiosmtpd/tests/test_proxyprotocol.py' 2026-04-25 16:36:30,163 wheel INFO adding 'aiosmtpd/tests/test_server.py' 2026-04-25 16:36:30,165 wheel INFO adding 'aiosmtpd/tests/test_smtp.py' 2026-04-25 16:36:30,168 wheel INFO adding 'aiosmtpd/tests/test_smtps.py' 2026-04-25 16:36:30,169 wheel INFO adding 'aiosmtpd/tests/test_smtpsmuggling.py' 2026-04-25 16:36:30,170 wheel INFO adding 'aiosmtpd/tests/test_starttls.py' 2026-04-25 16:36:30,172 wheel INFO adding 'aiosmtpd/tests/certs/__init__.py' 2026-04-25 16:36:30,173 wheel INFO adding 'aiosmtpd/tests/certs/server.crt' 2026-04-25 16:36:30,174 wheel INFO adding 'aiosmtpd/tests/certs/server.key' 2026-04-25 16:36:30,175 wheel INFO adding 'aiosmtpd/tests/certs/server_alt.crt' 2026-04-25 16:36:30,176 wheel INFO adding 'aiosmtpd/tests/certs/server_alt.key' 2026-04-25 16:36:30,178 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/licenses/LICENSE' 2026-04-25 16:36:30,179 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/licenses/NOTICE' 2026-04-25 16:36:30,180 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/METADATA' 2026-04-25 16:36:30,181 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/WHEEL' 2026-04-25 16:36:30,182 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/entry_points.txt' 2026-04-25 16:36:30,183 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/top_level.txt' 2026-04-25 16:36:30,184 wheel INFO adding 'aiosmtpd-1.4.6.dist-info/RECORD' 2026-04-25 16:36:30,186 root INFO removing build/bdist.linux-riscv64/wheel 2026-04-25 16:36:30,195 gpep517 INFO The backend produced .dist/aiosmtpd-1.4.6-py3-none-any.whl aiosmtpd-1.4.6-py3-none-any.whl ============================= test session starts ============================== platform linux -- Python 3.14.3, pytest-9.0.3, pluggy-1.6.0 -- /home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/.testenv/bin/python3 cachedir: .pytest_cache rootdir: /home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6 configfile: pytest.ini (WARNING: ignoring pytest config in pyproject.toml!) testpaths: aiosmtpd/tests/, aiosmtpd/qa/ plugins: mock-3.15.1, asyncio-1.3.0, cov-5.0.0 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function collecting ... collected 566 items / 2 deselected / 564 selected aiosmtpd/tests/test_handlers.py::TestDebugging::test_debugging PASSED [ 0%] aiosmtpd/tests/test_handlers.py::TestDebugging::test_debugging_bytes PASSED [ 0%] aiosmtpd/tests/test_handlers.py::TestDebugging::test_debugging_without_options PASSED [ 0%] aiosmtpd/tests/test_handlers.py::TestDebugging::test_debugging_with_options PASSED [ 0%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message[bytes] PASSED [ 0%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message[bytearray] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message[str] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message_err[None] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message_err[List] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message_err[Dict] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_prepare_message_err[Tuple] PASSED [ 1%] aiosmtpd/tests/test_handlers.py::TestMessage::test_message PASSED [ 2%] aiosmtpd/tests/test_handlers.py::TestMessage::test_message_decoded PASSED [ 2%] aiosmtpd/tests/test_handlers.py::TestMessage::test_message_async PASSED [ 2%] aiosmtpd/tests/test_handlers.py::TestMessage::test_message_decoded_async PASSED [ 2%] aiosmtpd/tests/test_handlers.py::TestMailbox::test_mailbox PASSED [ 2%] aiosmtpd/tests/test_handlers.py::TestMailbox::test_mailbox_reset PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_debugging_no_args PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_debugging_two_args PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_debugging_stdout PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_debugging_stderr PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_debugging_bad_argument PASSED [ 3%] aiosmtpd/tests/test_handlers.py::TestCLI::test_sink_no_args PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestCLI::test_sink_any_args PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestCLI::test_mailbox_no_args PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestCLI::test_mailbox_too_many_args PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestCLI::test_mailbox PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestProxy::test_deliver_bytes PASSED [ 4%] aiosmtpd/tests/test_handlers.py::TestProxy::test_deliver_str PASSED [ 5%] aiosmtpd/tests/test_handlers.py::TestProxyMocked::test_recipients_refused PASSED [ 5%] aiosmtpd/tests/test_handlers.py::TestProxyMocked::test_oserror PASSED [ 5%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_HELO PASSED [ 5%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_EHLO_deprecated PASSED [ 5%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_EHLO_deprecated_warning PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_EHLO_new PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_EHLO_incompat[TooShort] PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_EHLO_incompat[TooLong] PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_MAIL PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_RCPT PASSED [ 6%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_DATA PASSED [ 7%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_AUTH PASSED [ 7%] aiosmtpd/tests/test_handlers.py::TestHooks::test_hook_NoHooks PASSED [ 7%] aiosmtpd/tests/test_handlers.py::TestDeprecation::test_ehlo_hook PASSED [ 7%] aiosmtpd/tests/test_handlers.py::TestDeprecation::test_rset_hook PASSED [ 7%] aiosmtpd/tests/test_lmtp.py::test_lhlo PASSED [ 7%] aiosmtpd/tests/test_lmtp.py::test_helo PASSED [ 8%] aiosmtpd/tests/test_lmtp.py::test_ehlo PASSED [ 8%] aiosmtpd/tests/test_lmtp.py::test_help PASSED [ 8%] aiosmtpd/tests/test_main.py::TestMain::test_setuid PASSED [ 8%] aiosmtpd/tests/test_main.py::TestMain::test_setuid_permission_error PASSED [ 8%] aiosmtpd/tests/test_main.py::TestMain::test_setuid_no_pwd_module PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_n PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_nosetuid PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_debug_0 PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_debug_1 PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_debug_2 PASSED [ 9%] aiosmtpd/tests/test_main.py::TestMain::test_debug_3 PASSED [ 10%] aiosmtpd/tests/test_main.py::TestMainByWatcher::test_tls PASSED [ 10%] aiosmtpd/tests/test_main.py::TestMainByWatcher::test_tls_noreq PASSED [ 10%] aiosmtpd/tests/test_main.py::TestMainByWatcher::test_smtps PASSED [ 10%] aiosmtpd/tests/test_main.py::TestParseArgs::test_defaults PASSED [ 10%] aiosmtpd/tests/test_main.py::TestParseArgs::test_handler_from_cli PASSED [ 10%] aiosmtpd/tests/test_main.py::TestParseArgs::test_handler_no_from_cli PASSED [ 11%] aiosmtpd/tests/test_main.py::TestParseArgs::test_handler_from_cli_exception PASSED [ 11%] aiosmtpd/tests/test_main.py::TestParseArgs::test_handler_no_from_cli_exception PASSED [ 11%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args0-localhost-8025] PASSED [ 11%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args1-foo-25] PASSED [ 11%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args2-foo-25] PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args3-foo-8025] PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args4-localhost-25] PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_host_port[args5-::0-25] PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_bad_port_number PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_version[--version] PASSED [ 12%] aiosmtpd/tests/test_main.py::TestParseArgs::test_version[-v] PASSED [ 13%] aiosmtpd/tests/test_main.py::TestParseArgs::test_smtps[args0] PASSED [ 13%] aiosmtpd/tests/test_main.py::TestParseArgs::test_smtps[args1] PASSED [ 13%] aiosmtpd/tests/test_main.py::TestParseArgs::test_tls[args0] PASSED [ 13%] aiosmtpd/tests/test_main.py::TestParseArgs::test_tls[args1] PASSED [ 13%] aiosmtpd/tests/test_main.py::TestParseArgs::test_norequiretls PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[smtps-x-x] PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[smtps-cert-x] PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[smtps-x-key] PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[tls-x-x] PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[tls-cert-x] PASSED [ 14%] aiosmtpd/tests/test_main.py::TestParseArgs::test_ssl_files_err[tls-x-key] PASSED [ 15%] aiosmtpd/tests/test_main.py::TestSigint::test_keyboard_interrupt PASSED [ 15%] aiosmtpd/tests/test_misc.py::TestInit::test_create_new_if_none PASSED [ 15%] aiosmtpd/tests/test_misc.py::TestInit::test_not_create_new_if_exist PASSED [ 15%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_invalid_version PASSED [ 15%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_invalid_error PASSED [ 15%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_invalid_protocol PASSED [ 16%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_mismatch PASSED [ 16%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_mismatch_raises PASSED [ 16%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_unsetkey PASSED [ 16%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_unknownkey PASSED [ 16%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_unknownkey_raises PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_tlv_none PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_tlv_fake PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyData::test_tlv_1 PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_1 PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_1_ne PASSED [ 17%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_1_ne_raises PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_2 PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[1-ALPN] PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[2-AUTHORITY] PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[3-CRC32C] PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[4-NOOP] PASSED [ 18%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[5-UNIQUE_ID] PASSED [ 19%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[32-SSL] PASSED [ 19%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[33-SSL_VERSION] PASSED [ 19%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[34-SSL_CN] PASSED [ 19%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[35-SSL_CIPHER] PASSED [ 19%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[36-SSL_SIG_ALG] PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[37-SSL_KEY_ALG] PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[48-NETNS] PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_backmap[None-wrongname] PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_parse_partial PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_unknowntype_notstrict PASSED [ 20%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_unknowntype_strict PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_malformed_ssl_partialok PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_malformed_ssl_notpartialok PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestProxyTLV::test_eq PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestModule::test_get[v1] PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestModule::test_get[v2] PASSED [ 21%] aiosmtpd/tests/test_proxyprotocol.py::TestModule::test_get_cut_v1 PASSED [ 22%] aiosmtpd/tests/test_proxyprotocol.py::TestModule::test_get_cut_v2 PASSED [ 22%] aiosmtpd/tests/test_proxyprotocol.py::TestModule::test_get_invalid_sig PASSED [ 22%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_value_error[-1] PASSED [ 22%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_value_error[-1.0] PASSED [ 22%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_value_error[0] PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_value_error[0.0] PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_lt_3 PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_ge_3[3] PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_ge_3[3.0] PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_ge_3[4] PASSED [ 23%] aiosmtpd/tests/test_proxyprotocol.py::TestSMTPInit::test_ge_3[4.0] PASSED [ 24%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_noproxy PASSED [ 24%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[joaoreis81] PASSED [ 24%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[haproxydoc] PASSED [ 24%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[cloudflare4] PASSED [ 24%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[cloudflare6] PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[avinetworks] PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_valid_patterns[googlecloud] PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_tcp4 PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_tcp4_random PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_tcp6_shortened PASSED [ 25%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_tcp6_random PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_unknown PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_unknown_short PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_invalid_sig PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_unsupported_family PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_unsupported_proto PASSED [ 26%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_too_long PASSED [ 27%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_nocr PASSED [ 27%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_notproxy PASSED [ 27%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_wrongtype_64 PASSED [ 27%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_wrongtype_46 PASSED [ 27%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_wrongtype_6mixed PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[zeroleader] PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[space1] PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[space2] PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[space3] PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[space4] PASSED [ 28%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[addr6s] PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr[addr6d] PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_extra[space] PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_extra[sptext] PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_malformed_addr4 PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_ports_oob PASSED [ 29%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV1::test_portd_oob PASSED [ 30%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_1 PASSED [ 30%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNSPEC_empty PASSED [ 30%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNSPEC_notempty PASSED [ 30%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET4[1-] PASSED [ 30%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET4[1-fake_tlv] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET4[2-] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET4[2-fake_tlv] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET6[1-] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET6[1-fake_tlv] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET6[2-] PASSED [ 31%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_INET6[2-fake_tlv] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNIX[1-] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNIX[1-fake_tlv] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNIX[2-] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_UNIX[2-fake_tlv] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_fallback_UNSPEC[0-1] PASSED [ 32%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_fallback_UNSPEC[0-2] PASSED [ 33%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_fallback_UNSPEC[1-0] PASSED [ 33%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_fallback_UNSPEC[2-0] PASSED [ 33%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_fallback_UNSPEC[3-0] PASSED [ 33%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_invalid_sig PASSED [ 33%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_illegal_ver PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_unsupported_cmd PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_unsupported_fam PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_unsupported_proto PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestGetV2::test_wrong_proto_6shouldbe4 PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_okay[v1] PASSED [ 34%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_okay[v2] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_hiccup[v1] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_hiccup[v2] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_timeout[v1] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_timeout[v2] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_incomplete[v1] PASSED [ 35%] aiosmtpd/tests/test_proxyprotocol.py::TestWithController::test_incomplete[v2] PASSED [ 36%] aiosmtpd/tests/test_proxyprotocol.py::TestHandlerAcceptReject::test_simple[v1-True] PASSED [ 36%] aiosmtpd/tests/test_proxyprotocol.py::TestHandlerAcceptReject::test_simple[v1-False] PASSED [ 36%] aiosmtpd/tests/test_proxyprotocol.py::TestHandlerAcceptReject::test_simple[v2-True] PASSED [ 36%] aiosmtpd/tests/test_proxyprotocol.py::TestHandlerAcceptReject::test_simple[v2-False] PASSED [ 36%] aiosmtpd/tests/test_server.py::TestServer::test_smtp_utf8 PASSED [ 37%] aiosmtpd/tests/test_server.py::TestServer::test_default_max_command_size_limit PASSED [ 37%] aiosmtpd/tests/test_server.py::TestServer::test_special_max_command_size_limit PASSED [ 37%] aiosmtpd/tests/test_server.py::TestServer::test_warn_authreq_notls PASSED [ 37%] aiosmtpd/tests/test_server.py::TestController::test_ready_timeout PASSED [ 37%] aiosmtpd/tests/test_server.py::TestController::test_factory_timeout PASSED [ 37%] aiosmtpd/tests/test_server.py::TestController::test_reuse_loop PASSED [ 38%] aiosmtpd/tests/test_server.py::TestController::test_socket_error_dupe PASSED [ 38%] aiosmtpd/tests/test_server.py::TestController::test_socket_error_default PASSED [ 38%] aiosmtpd/tests/test_server.py::TestController::test_server_attribute PASSED [ 38%] aiosmtpd/tests/test_server.py::TestController::test_enablesmtputf8_flag PASSED [ 38%] aiosmtpd/tests/test_server.py::TestController::test_serverhostname_arg PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_hostname_empty PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_hostname_none PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_testconn_raises PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_noipv6 PASSED [ 39%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_6yes PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_6no[99] PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_6no[97] PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_6inuse PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_getlocalhost_error PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_stop_default PASSED [ 40%] aiosmtpd/tests/test_server.py::TestController::test_stop_assert PASSED [ 41%] aiosmtpd/tests/test_server.py::TestController::test_stop_noassert PASSED [ 41%] aiosmtpd/tests/test_server.py::TestUnixSocketController::test_server_creation PASSED [ 41%] aiosmtpd/tests/test_server.py::TestUnixSocketController::test_server_creation_ssl PASSED [ 41%] aiosmtpd/tests/test_server.py::TestUnthreaded::test_unixsocket PASSED [ 41%] aiosmtpd/tests/test_server.py::TestUnthreaded::test_inet_loopstop PASSED [ 42%] aiosmtpd/tests/test_server.py::TestUnthreaded::test_inet_contstop PASSED [ 42%] aiosmtpd/tests/test_server.py::TestFactory::test_normal_situation SKIPPED [ 42%] aiosmtpd/tests/test_server.py::TestFactory::test_unknown_args_direct SKIPPED [ 42%] aiosmtpd/tests/test_server.py::TestFactory::test_unknown_args_inkwargs SKIPPED [ 42%] aiosmtpd/tests/test_server.py::TestFactory::test_factory_none SKIPPED [ 42%] aiosmtpd/tests/test_server.py::TestFactory::test_noexc_smtpd_missing SKIPPED [ 43%] aiosmtpd/tests/test_server.py::TestCompat::test_version PASSED [ 43%] aiosmtpd/tests/test_smtp.py::TestProtocol::test_honors_mail_delimiters FAILED [ 43%] aiosmtpd/tests/test_smtp.py::TestProtocol::test_empty_email PASSED [ 43%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_binary[\x80FAIL\r\n] PASSED [ 43%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_binary[\x80 FAIL\r\n] PASSED [ 43%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_helo PASSED [ 44%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_close_then_continue PASSED [ 44%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_helo_no_hostname PASSED [ 44%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_helo_duplicate PASSED [ 44%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_ehlo PASSED [ 44%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_ehlo_duplicate PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_ehlo_no_hostname PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_helo_then_ehlo PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_ehlo_then_helo PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_noop PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_noop_with_arg PASSED [ 45%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_quit PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_quit_with_args PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[HELO] PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[EHLO] PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[MAIL] PASSED [ 46%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[RCPT] PASSED [ 47%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[DATA] PASSED [ 47%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[RSET] PASSED [ 47%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[NOOP] PASSED [ 47%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[QUIT] PASSED [ 47%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[VRFY] PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_[AUTH] PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_esmtp[MAIL] PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_esmtp[RCPT] PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_help_bad_arg PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_expn PASSED [ 48%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_no_helo[MAIL] PASSED [ 49%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_no_helo[RCPT] PASSED [ 49%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_no_helo[DATA] PASSED [ 49%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[0] PASSED [ 49%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[1] PASSED [ 49%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[2] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[3] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[4] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[5] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[6] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[7] PASSED [ 50%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[8] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[9] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[10] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[11] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[12] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[13] PASSED [ 51%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[14] PASSED [ 52%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[15] PASSED [ 52%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[16] PASSED [ 52%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[17] PASSED [ 52%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[18] PASSED [ 52%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[19] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[20] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[21] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[22] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[23] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[24] PASSED [ 53%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[25] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[26] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[27] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[28] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[29] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[30] PASSED [ 54%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[31] PASSED [ 55%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[32] PASSED [ 55%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[33] PASSED [ 55%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[34] PASSED [ 55%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[35] PASSED [ 55%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[36] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[37] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[38] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_valid_address[39] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_smtp_errsyntax[noarg] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_smtp_errsyntax[nofrom] PASSED [ 56%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_smtp_errsyntax[noaddr] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_smtp_errsyntax[params_noesmtp] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_smtp_errsyntax[malformed] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_params_esmtp[norm] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_params_esmtp[extralead] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_params_esmtp[extratail] PASSED [ 57%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_from_twice PASSED [ 58%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_errsyntax[malformed] PASSED [ 58%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_errsyntax[missing] PASSED [ 58%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_errsyntax[badsyntax] PASSED [ 58%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_errsyntax[space] PASSED [ 58%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_params_unrecognized PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_bpo27931fix_smtp PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_invalid_address[0] PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_invalid_address[1] PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_invalid_address[0] PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_mail_esmtp_invalid_address[1] PASSED [ 59%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_no_mail PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_smtp_errsyntax[noarg] PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_smtp_errsyntax[noto] PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_smtp_errsyntax[noaddr] PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_smtp_errsyntax[params] PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_smtp_errsyntax[malformed] PASSED [ 60%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_esmtp_errsyntax[noarg] PASSED [ 61%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_esmtp_errsyntax[noto] PASSED [ 61%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_esmtp_errsyntax[noaddr] PASSED [ 61%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_esmtp_errsyntax[badparams] PASSED [ 61%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_esmtp_errsyntax[malformed] PASSED [ 61%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_unknown_params PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[0] PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[1] PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[2] PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[3] PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[4] PASSED [ 62%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[5] PASSED [ 63%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[6] PASSED [ 63%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[7] PASSED [ 63%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[8] PASSED [ 63%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[9] PASSED [ 63%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[10] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[11] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[12] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[13] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[14] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[15] PASSED [ 64%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[16] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[17] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[18] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[19] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[20] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[21] PASSED [ 65%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[22] PASSED [ 66%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[23] PASSED [ 66%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[24] PASSED [ 66%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[25] PASSED [ 66%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[26] PASSED [ 66%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[27] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[28] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[29] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[30] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[31] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[32] PASSED [ 67%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[33] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[34] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[35] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[36] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[37] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[38] PASSED [ 68%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[39] PASSED [ 69%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[40] PASSED [ 69%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[41] PASSED [ 69%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_valid_address[42] PASSED [ 69%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_invalid_address[0] PASSED [ 69%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rcpt_invalid_address[1] PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_bpo27931fix_esmtp PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rset PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_rset_with_arg PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_vrfy PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_vrfy_no_arg PASSED [ 70%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_vrfy_not_address PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_data_no_rcpt PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_data_354 PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_data_invalid_params PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_empty_command PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_too_long_command PASSED [ 71%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_way_too_long_command PASSED [ 72%] aiosmtpd/tests/test_smtp.py::TestSMTP::test_unknown_command PASSED [ 72%] aiosmtpd/tests/test_smtp.py::TestSMTPNonDecoding::test_mail_invalid_body_param PASSED [ 72%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_no_ehlo PASSED [ 72%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_helo PASSED [ 72%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_not_enough_values PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_already_authenticated PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_auth_individually PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_rset_maintain_authenticated PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestSMTPAuth::test_auth_loginteract_warning PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_ehlo PASSED [ 73%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_not_supported_mechanism[GSSAPI] PASSED [ 74%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_not_supported_mechanism[DIGEST-MD5] PASSED [ 74%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_not_supported_mechanism[MD5] PASSED [ 74%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_not_supported_mechanism[CRAM-MD5] PASSED [ 74%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_custom_mechanism PASSED [ 74%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_disabled_mechanism PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_byclient[login-True] PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_byclient[login-False] PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_byclient[plain-True] PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_byclient[plain-False] PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_bad_base64_encoding PASSED [ 75%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_bad_base64_length PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_too_many_values PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_bad_username PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_bad_password PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_empty PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_good_credentials PASSED [ 76%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain1_goodcreds_sanitized_log PASSED [ 77%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain2_good_credentials PASSED [ 77%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain2_bad_credentials PASSED [ 77%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain2_no_credentials PASSED [ 77%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain2_abort PASSED [ 77%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_plain2_bad_base64_encoding PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login2_bad_base64 PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login2_good_credentials PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_good_credentials PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_bad_base64 PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_bad_username PASSED [ 78%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_bad_password PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_empty_credentials PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_abort_username PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_login3_abort_password PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_DENYFALSE PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_DENYMISSING PASSED [ 79%] aiosmtpd/tests/test_smtp.py::TestAuthMechanisms::test_NONE PASSED [ 80%] aiosmtpd/tests/test_smtp.py::TestAuthenticator::test_success PASSED [ 80%] aiosmtpd/tests/test_smtp.py::TestAuthenticator::test_fail_withmesg PASSED [ 80%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_help_unauthenticated PASSED [ 80%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_help_authenticated PASSED [ 80%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_vrfy_unauthenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_mail_unauthenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_rcpt_unauthenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_rcpt_nomail_authenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_data_unauthenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_data_authenticated PASSED [ 81%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_vrfy_authenticated PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_mail_authenticated PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestRequiredAuthentication::test_data_norcpt_authenticated PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestResetCommands::test_helo PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestResetCommands::test_ehlo PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestResetCommands::test_rset PASSED [ 82%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_mail_with_size_too_large PASSED [ 83%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_mail_with_compatible_smtputf8 PASSED [ 83%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_mail_with_unrequited_smtputf8 PASSED [ 83%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_mail_with_incompatible_smtputf8 PASSED [ 83%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_mail_invalid_body PASSED [ 83%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_esmtp_no_size_limit PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_process_message_error PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_too_long_message_body PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_dots_escaped PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_unexpected_errors PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_unexpected_errors_unhandled PASSED [ 84%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_unexpected_errors_custom_response PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_exception_handler_exception PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_exception_handler_undescribable PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_exception_handler_multiple_connections_lost PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_bad_encodings PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_data_line_too_long PASSED [ 85%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_long_line_double_count PASSED [ 86%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_long_line_leak PASSED [ 86%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_too_long_body_delay_error PASSED [ 86%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_too_long_body_then_too_long_lines PASSED [ 86%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_too_long_line_delay_error PASSED [ 86%] aiosmtpd/tests/test_smtp.py::TestSMTPWithController::test_too_long_lines_then_too_long_body PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestCustomization::test_custom_hostname PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestCustomization::test_default_greeting PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestCustomization::test_custom_greeting PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestCustomization::test_mail_invalid_body_param PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestCustomization::test_limitlocalpart PASSED [ 87%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_connection_reset_during_DATA PASSED [ 88%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_connection_reset_during_command PASSED [ 88%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_connection_reset_in_long_command PASSED [ 88%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_close_in_command PASSED [ 88%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_close_in_command_2 PASSED [ 88%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_close_in_long_command PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_close_in_data PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestClientCrash::test_sockclose_after_helo PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestStrictASCII::test_ehlo PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestStrictASCII::test_bad_encoded_param PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestStrictASCII::test_mail_param PASSED [ 89%] aiosmtpd/tests/test_smtp.py::TestStrictASCII::test_data PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestSleepingHandler::test_close_after_helo PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestTimeout::test_timeout PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_warn_authreqnotls PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_log_authmechanisms PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_authmechname_decorator_badname[has space] PASSED [ 90%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_authmechname_decorator_badname[has.dot] PASSED [ 91%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_authmechname_decorator_badname[has/slash] PASSED [ 91%] aiosmtpd/tests/test_smtp.py::TestAuthArgs::test_authmechname_decorator_badname[has\\backslash] PASSED [ 91%] aiosmtpd/tests/test_smtp.py::TestLimits::test_limit_wrong_type PASSED [ 91%] aiosmtpd/tests/test_smtp.py::TestLimits::test_limit_wrong_value_type PASSED [ 91%] aiosmtpd/tests/test_smtp.py::TestLimits::test_all_limit_15 PASSED [ 92%] aiosmtpd/tests/test_smtp.py::TestLimits::test_different_limits PASSED [ 92%] aiosmtpd/tests/test_smtp.py::TestLimits::test_different_limits_custom_default PASSED [ 92%] aiosmtpd/tests/test_smtp.py::TestLimits::test_limit_bogus PASSED [ 92%] aiosmtpd/tests/test_smtp.py::TestSanitize::test_loginpassword PASSED [ 92%] aiosmtpd/tests/test_smtp.py::TestSanitize::test_authresult PASSED [ 92%] aiosmtpd/tests/test_smtps.py::TestSMTPS::test_smtps PASSED [ 93%] aiosmtpd/tests/test_smtpsmuggling.py::TestSmuggling::test_smtp_smuggling PASSED [ 93%] aiosmtpd/tests/test_starttls.py::TestNoTLS::test_disabled_tls PASSED [ 93%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_help_starttls PASSED [ 93%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_starttls_arg PASSED [ 93%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_starttls PASSED [ 93%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_starttls_quit PASSED [ 94%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_failed_handshake PASSED [ 94%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_tls_handshake_stopcontroller PASSED [ 94%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_tls_bad_syntax PASSED [ 94%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_help_after_starttls PASSED [ 94%] aiosmtpd/tests/test_starttls.py::TestStartTLS::test_helo_starttls PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestTLSEnding::test_eof_received PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestTLSEnding::test_tls_handshake_failing PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestTLSForgetsSessionData::test_forget_ehlo PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestTLSForgetsSessionData::test_forget_mail PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestTLSForgetsSessionData::test_forget_rcpt PASSED [ 95%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_helo_fails PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_help_fails PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_ehlo PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_mail_fails PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_rcpt_fails PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_vrfy_fails PASSED [ 96%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_data_fails PASSED [ 97%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_noop_okay PASSED [ 97%] aiosmtpd/tests/test_starttls.py::TestRequireTLS::test_quit_okay PASSED [ 97%] aiosmtpd/tests/test_starttls.py::TestRequireTLSAUTH::test_auth_notls PASSED [ 97%] aiosmtpd/tests/test_starttls.py::TestRequireTLSAUTH::test_auth_tls PASSED [ 97%] aiosmtpd/tests/test_starttls.py::TestTLSContext::test_verify_mode_nochange PASSED [ 98%] aiosmtpd/tests/test_starttls.py::TestTLSContext::test_certreq_warn PASSED [ 98%] aiosmtpd/tests/test_starttls.py::TestTLSContext::test_nocertreq_chkhost_warn PASSED [ 98%] aiosmtpd/qa/test_0packaging.py::TestVersion::test_pep440 PASSED [ 98%] aiosmtpd/qa/test_0packaging.py::TestVersion::test_ge_master fatal: not a git repository (or any of the parent directories): .git SKIPPED [ 98%] aiosmtpd/qa/test_0packaging.py::TestNews::test_NEWS_version PASSED [ 98%] aiosmtpd/qa/test_0packaging.py::TestNews::test_release_date PASSED [ 99%] aiosmtpd/qa/test_1testsuite.py::TestStatusCodes::test_elemtype PASSED [ 99%] aiosmtpd/qa/test_1testsuite.py::TestStatusCodes::test_nameval PASSED [ 99%] aiosmtpd/qa/test_1testsuite.py::TestStatusCodes::test_enhanced PASSED [ 99%] aiosmtpd/qa/test_1testsuite.py::TestStatusCodes::test_commands PASSED [ 99%] aiosmtpd/qa/test_1testsuite.py::TestHarness::test_fqdn_cached PASSED [100%] =================================== FAILURES =================================== ___________________ TestProtocol.test_honors_mail_delimiters ___________________ self = temp_event_loop = <_UnixSelectorEventLoop running=False closed=False debug=False> transport_resp = (, [b'220 build-3-24-riscv64.local Python SMTP 1.4.6\r\n', b'250 build-3-24-riscv64.local\r\n', b'250 OK\r\n', b'250 OK\r\n', b'354 End data with .\r\n', b'250 OK\r\n', ...]) get_protocol = .getter at 0x3f90dad850> def test_honors_mail_delimiters( self, temp_event_loop, transport_resp, get_protocol ): handler = ReceivingHandler() protocol = get_protocol(handler) data = b"test\r\nmail\rdelimiters\nsaved\r\n" protocol.data_received( BCRLF.join( [ b"HELO example.org", b"MAIL FROM: ", b"RCPT TO: ", b"DATA", data + b".", b"QUIT\r\n", ] ) ) with suppress(asyncio.CancelledError): > temp_event_loop.run_until_complete(protocol._handler_coroutine) _ = data = b'test\r\nmail\rdelimiters\nsaved\r\n' get_protocol = .getter at 0x3f90dad850> handler = protocol = responses = [b'220 build-3-24-riscv64.local Python SMTP 1.4.6\r\n', b'250 build-3-24-riscv64.local\r\n', b'250 OK\r\n', b'250 OK\r\n', b'354 End data with .\r\n', b'250 OK\r\n', b'221 Bye\r\n'] self = temp_event_loop = <_UnixSelectorEventLoop running=False closed=False debug=False> transport_resp = (, [b'220 build-3-24-riscv64.local Python SMTP 1.4.6\r\n', b'250 build-3-24-riscv64.local\r\n', b'250 OK\r\n', b'250 OK\r\n', b'354 End data with .\r\n', b'250 OK\r\n', b'221 Bye\r\n']) aiosmtpd/tests/test_smtp.py:437: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/asyncio/base_events.py:719: in run_until_complete return future.result() ^^^^^^^^^^^^^^^ future = > new_task = False self = <_UnixSelectorEventLoop running=False closed=False debug=False> aiosmtpd/smtp.py:649: in _handle_client line: bytes = await self._reader.readuntil() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ = b'' arg = None arg_bytes = b'' bogus_budget = 5 call_limit = {} command = 'QUIT' command_bytes = b'QUIT' line = b'QUIT' max_sz = 512 method = > self = /usr/lib/python3.14/asyncio/streams.py:677: in readuntil await self._wait_for_data('readuntil') buflen = 0 max_seplen = 1 min_seplen = 1 offset = 0 self = > separator = [b'\n'] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = > func_name = 'readuntil' async def _wait_for_data(self, func_name): """Wait until feed_data() or feed_eof() is called. If stream was paused, automatically resume it. """ # StreamReader uses a future to link the protocol feed_data() method # to a read coroutine. Running two read coroutines at the same time # would have an unexpected behaviour. It would not possible to know # which coroutine would get the next data. if self._waiter is not None: raise RuntimeError( f'{func_name}() called while another coroutine is ' f'already waiting for incoming data') assert not self._eof, '_wait_for_data after EOF' # Waiting for data while paused will make deadlock, so prevent it. # This is essential for readexactly(n) for case when n > self._limit. if self._paused: self._paused = False self._transport.resume_reading() self._waiter = self._loop.create_future() try: > await self._waiter E asyncio.exceptions.CancelledError func_name = 'readuntil' self = > /usr/lib/python3.14/asyncio/streams.py:539: CancelledError During handling of the above exception, another exception occurred: self = <_SelectorSocketTransport fd=176>, _warn = def __del__(self, _warn=warnings.warn): if self._sock is not None: _warn(f"unclosed transport {self!r}", ResourceWarning, source=self) self._sock.close() if self._server is not None: > self._server._detach(self) _warn = self = <_SelectorSocketTransport fd=176> /usr/lib/python3.14/asyncio/selector_events.py:876: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/asyncio/base_events.py:303: in _detach self._wakeup() self = transport = <_SelectorSocketTransport fd=176> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _wakeup(self): waiters = self._waiters self._waiters = None > for waiter in waiters: ^^^^^^^ E TypeError: 'NoneType' object is not iterable self = waiters = None /usr/lib/python3.14/asyncio/base_events.py:308: TypeError The above exception was the direct cause of the following exception: cls = func = . at 0x3f90dad900> when = 'call' reraise = (, ) @classmethod def from_call( cls, func: Callable[[], TResult], when: Literal["collect", "setup", "call", "teardown"], reraise: type[BaseException] | tuple[type[BaseException], ...] | None = None, ) -> CallInfo[TResult]: """Call func, wrapping the result in a CallInfo. :param func: The function to call. Called without arguments. :type func: Callable[[], _pytest.runner.TResult] :param when: The phase in which the function is called. :param reraise: Exception or exceptions that shall propagate if raised by the function, instead of being wrapped in the CallInfo. """ excinfo = None instant = timing.Instant() try: > result: TResult | None = func() ^^^^^^ cls = duration = Duration(start=Instant(time=1777135054.2193472, perf_count=892736.412708177), stop=Instant(time=1777135054.877848, perf_count=892737.071215435)) excinfo = : None\n') tblen=19> func = . at 0x3f90dad900> instant = Instant(time=1777135054.2193472, perf_count=892736.412708177) reraise = (, ) result = None when = 'call' /usr/lib/python3.14/site-packages/_pytest/runner.py:353: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/site-packages/_pytest/runner.py:245: in lambda: runtest_hook(item=item, **kwds), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ item = kwds = {} runtest_hook = /usr/lib/python3.14/site-packages/pluggy/_hooks.py:512: in __call__ return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ firstresult = False kwargs = {'item': } self = /usr/lib/python3.14/site-packages/pluggy/_manager.py:120: in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ firstresult = False hook_name = 'pytest_runtest_call' kwargs = {'item': } methods = [>, >, >, >, > err=> in_=> _state='suspended' _in_suspended=False> _capture_fixture=None>>, >, >] self = <_pytest.config.PytestPluginManager object at 0x3f97afa7b0> /usr/lib/python3.14/site-packages/_pytest/logging.py:850: in pytest_runtest_call yield item = self = <_pytest.logging.LoggingPlugin object at 0x3f95eb0d70> /usr/lib/python3.14/site-packages/pluggy/_callers.py:53: in run_old_style_hookwrapper return result.get_result() ^^^^^^^^^^^^^^^^^^^ args = [] hook_impl = > hook_name = 'pytest_runtest_call' result = teardown = /usr/lib/python3.14/site-packages/pluggy/_callers.py:38: in run_old_style_hookwrapper res = yield ^^^^^ args = [] hook_impl = > hook_name = 'pytest_runtest_call' result = teardown = /usr/lib/python3.14/site-packages/_pytest/capture.py:900: in pytest_runtest_call return (yield) ^^^^^ item = self = > err=> in_=> _state='suspended' _in_suspended=False> _capture_fixture=None> /usr/lib/python3.14/site-packages/_pytest/skipping.py:268: in pytest_runtest_call return (yield) ^^^^^ item = xfailed = None /usr/lib/python3.14/site-packages/_pytest/unraisableexception.py:158: in pytest_runtest_call collect_unraisable(item.config) item = /usr/lib/python3.14/site-packages/_pytest/unraisableexception.py:79: in collect_unraisable raise errors[0] config = <_pytest.config.Config object at 0x3f976b42f0> msg = ('Exception ignored while calling deallocator : None\n' '\n' 'Traceback (most recent call last):\n' ' File ' '"/home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/aiosmtpd/tests/test_smtp.py", ' 'line 437, in test_honors_mail_delimiters\n' ' temp_event_loop.run_until_complete(protocol._handler_coroutine)\n' ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 719, in ' 'run_until_complete\n' ' return future.result()\n' ' ~~~~~~~~~~~~~^^\n' ' File ' '"/home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/aiosmtpd/smtp.py", ' 'line 649, in _handle_client\n' ' line: bytes = await self._reader.readuntil()\n' ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/streams.py", line 677, in readuntil\n' " await self._wait_for_data('readuntil')\n" ' File "/usr/lib/python3.14/asyncio/streams.py", line 539, in ' '_wait_for_data\n' ' await self._waiter\n' 'asyncio.exceptions.CancelledError\n' '\n' 'During handling of the above exception, another exception occurred:\n' '\n' 'Traceback (most recent call last):\n' ' File "/usr/lib/python3.14/asyncio/selector_events.py", line 876, in ' '__del__\n' ' self._server._detach(self)\n' ' ~~~~~~~~~~~~~~~~~~~~^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 303, in _detach\n' ' self._wakeup()\n' ' ~~~~~~~~~~~~^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 308, in _wakeup\n' ' for waiter in waiters:\n' ' ^^^^^^^\n' "TypeError: 'NoneType' object is not iterable\n" '\n') pop_unraisable = _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ config = <_pytest.config.Config object at 0x3f976b42f0> def collect_unraisable(config: Config) -> None: pop_unraisable = config.stash[unraisable_exceptions].pop errors: list[pytest.PytestUnraisableExceptionWarning | RuntimeError] = [] meta = None hook_error = None try: while True: try: meta = pop_unraisable() except IndexError: break if isinstance(meta, BaseException): hook_error = RuntimeError("Failed to process unraisable exception") hook_error.__cause__ = meta errors.append(hook_error) continue msg = meta.msg try: > warnings.warn(pytest.PytestUnraisableExceptionWarning(msg)) E pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator : None config = <_pytest.config.Config object at 0x3f976b42f0> msg = ('Exception ignored while calling deallocator : None\n' '\n' 'Traceback (most recent call last):\n' ' File ' '"/home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/aiosmtpd/tests/test_smtp.py", ' 'line 437, in test_honors_mail_delimiters\n' ' temp_event_loop.run_until_complete(protocol._handler_coroutine)\n' ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 719, in ' 'run_until_complete\n' ' return future.result()\n' ' ~~~~~~~~~~~~~^^\n' ' File ' '"/home/buildozer/aports/community/py3-aiosmtpd/src/aiosmtpd-1.4.6/aiosmtpd/smtp.py", ' 'line 649, in _handle_client\n' ' line: bytes = await self._reader.readuntil()\n' ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/streams.py", line 677, in readuntil\n' " await self._wait_for_data('readuntil')\n" ' File "/usr/lib/python3.14/asyncio/streams.py", line 539, in ' '_wait_for_data\n' ' await self._waiter\n' 'asyncio.exceptions.CancelledError\n' '\n' 'During handling of the above exception, another exception occurred:\n' '\n' 'Traceback (most recent call last):\n' ' File "/usr/lib/python3.14/asyncio/selector_events.py", line 876, in ' '__del__\n' ' self._server._detach(self)\n' ' ~~~~~~~~~~~~~~~~~~~~^^^^^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 303, in _detach\n' ' self._wakeup()\n' ' ~~~~~~~~~~~~^^\n' ' File "/usr/lib/python3.14/asyncio/base_events.py", line 308, in _wakeup\n' ' for waiter in waiters:\n' ' ^^^^^^^\n' "TypeError: 'NoneType' object is not iterable\n" '\n') pop_unraisable = /usr/lib/python3.14/site-packages/_pytest/unraisableexception.py:67: PytestUnraisableExceptionWarning ------------------------------ Captured log call ------------------------------- INFO mail.log:smtp.py:407 Available AUTH mechanisms: LOGIN(builtin) PLAIN(builtin) INFO mail.log:smtp.py:523 Peer: INFO mail.log:smtp.py:615 handling connection DEBUG mail.log:smtp.py:599 << b'220 build-3-24-riscv64.local Python SMTP 1.4.6' DEBUG mail.log:smtp.py:286 _handle_client readline: b'HELO example.org\r\n' INFO mail.log:smtp.py:286 >> b'HELO example.org' DEBUG mail.log:smtp.py:599 << b'250 build-3-24-riscv64.local' DEBUG mail.log:smtp.py:286 _handle_client readline: b'MAIL FROM: \r\n' INFO mail.log:smtp.py:286 >> b'MAIL FROM: ' INFO mail.log:smtp.py:1338 sender: anne@example.com DEBUG mail.log:smtp.py:599 << b'250 OK' DEBUG mail.log:smtp.py:286 _handle_client readline: b'RCPT TO: \r\n' INFO mail.log:smtp.py:286 >> b'RCPT TO: ' INFO mail.log:smtp.py:1391 recip: anne@example.com DEBUG mail.log:smtp.py:599 << b'250 OK' DEBUG mail.log:smtp.py:286 _handle_client readline: b'DATA\r\n' INFO mail.log:smtp.py:286 >> b'DATA' DEBUG mail.log:smtp.py:599 << b'354 End data with .' DEBUG mail.log:smtp.py:1434 DATA readline: b'test\r\n' DEBUG mail.log:smtp.py:1434 DATA readline: b'mail\rdelimiters\nsaved\r\n' DEBUG mail.log:smtp.py:1434 DATA readline: b'.\r\n' DEBUG mail.log:smtp.py:599 << b'250 OK' DEBUG mail.log:smtp.py:286 _handle_client readline: b'QUIT\r\n' INFO mail.log:smtp.py:286 >> b'QUIT' DEBUG mail.log:smtp.py:599 << b'221 Bye' INFO mail.log:smtp.py:761 Connection lost during _handle_client() ---------- coverage: platform linux, python 3.14.3-final-0 ----------- Name Stmts Miss Branch BrPart Cover ------------------------------------------------------------------------ aiosmtpd/__init__.py 15 0 2 1 94% aiosmtpd/__main__.py 3 3 2 0 0% aiosmtpd/controller.py 221 10 36 3 95% aiosmtpd/handlers.py 170 0 38 0 100% aiosmtpd/lmtp.py 12 0 0 0 100% aiosmtpd/main.py 123 2 34 0 99% aiosmtpd/proxy_protocol.py 322 0 102 0 100% aiosmtpd/qa/__init__.py 0 0 0 0 100% aiosmtpd/qa/test_0packaging.py 67 12 16 6 78% aiosmtpd/qa/test_1testsuite.py 46 2 16 2 94% aiosmtpd/smtp.py 917 6 314 1 99% aiosmtpd/testing/__init__.py 0 0 0 0 100% aiosmtpd/testing/helpers.py 36 0 2 0 100% aiosmtpd/testing/statuscodes.py 101 0 0 0 100% aiosmtpd/tests/__init__.py 0 0 0 0 100% aiosmtpd/tests/certs/__init__.py 0 0 0 0 100% aiosmtpd/tests/conftest.py 164 30 18 2 79% aiosmtpd/tests/test_handlers.py 490 24 14 6 94% aiosmtpd/tests/test_lmtp.py 33 0 0 0 100% aiosmtpd/tests/test_main.py 246 40 12 2 81% aiosmtpd/tests/test_misc.py 35 3 2 1 89% aiosmtpd/tests/test_proxyprotocol.py 666 9 30 8 97% aiosmtpd/tests/test_server.py 411 52 20 6 86% aiosmtpd/tests/test_smtp.py 1249 11 28 3 99% aiosmtpd/tests/test_smtps.py 34 0 0 0 100% aiosmtpd/tests/test_smtpsmuggling.py 60 9 16 8 78% aiosmtpd/tests/test_starttls.py 262 0 2 0 100% ------------------------------------------------------------------------ TOTAL 5683 213 704 49 96% ============================= slowest 10 durations ============================= 30.12s call aiosmtpd/tests/test_starttls.py::TestTLSEnding::test_eof_received 5.02s call aiosmtpd/tests/test_server.py::TestController::test_socket_error_default 5.01s call aiosmtpd/tests/test_server.py::TestController::test_socket_error_dupe 3.53s call aiosmtpd/tests/test_main.py::TestMainByWatcher::test_tls 3.32s call aiosmtpd/tests/test_server.py::TestUnthreaded::test_unixsocket 3.01s call aiosmtpd/tests/test_server.py::TestController::test_factory_timeout 2.81s call aiosmtpd/tests/test_main.py::TestMainByWatcher::test_tls_noreq 2.80s call aiosmtpd/tests/test_main.py::TestMainByWatcher::test_smtps 1.81s call aiosmtpd/tests/test_server.py::TestUnthreaded::test_inet_loopstop 1.53s call aiosmtpd/tests/test_main.py::TestMain::test_debug_3 =========================== short test summary info ============================ SKIPPED [1] aiosmtpd/tests/test_server.py:548: Hangs on 3.12 SKIPPED [1] aiosmtpd/tests/test_server.py:558: Hangs on 3.12 SKIPPED [1] aiosmtpd/tests/test_server.py:570: Hangs on 3.12 SKIPPED [1] aiosmtpd/tests/test_server.py:584: Hangs on 3.12 SKIPPED [1] aiosmtpd/tests/test_server.py:597: Hangs on 3.12 SKIPPED [1] aiosmtpd/qa/test_0packaging.py:46: Skipping due to git error FAILED aiosmtpd/tests/test_smtp.py::TestProtocol::test_honors_mail_delimiters - pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator : None ====== 1 failed, 557 passed, 6 skipped, 2 deselected in 113.65s (0:01:53) ====== >>> ERROR: py3-aiosmtpd: check failed >>> py3-aiosmtpd: Uninstalling dependencies... ( 1/51) Purging .makedepends-py3-aiosmtpd (20260425.163626) ( 2/51) Purging py3-attrs-pyc (26.1.0-r0) ( 3/51) Purging py3-attrs (26.1.0-r0) ( 4/51) Purging py3-atpublic-pyc (7.0.0-r1) ( 5/51) Purging py3-atpublic (7.0.0-r1) ( 6/51) Purging py3-setuptools-pyc (82.0.1-r1) ( 7/51) Purging py3-setuptools (82.0.1-r1) ( 8/51) Purging py3-gpep517-pyc (19-r2) ( 9/51) Purging py3-gpep517 (19-r2) (10/51) Purging py3-installer-pyc (1.0.0-r0) (11/51) Purging py3-installer (1.0.0-r0) (12/51) Purging py3-wheel-pyc (0.47.0-r0) (13/51) Purging py3-wheel (0.47.0-r0) (14/51) Purging py3-pytest-asyncio-pyc (1.3.0-r1) (15/51) Purging py3-pytest-asyncio (1.3.0-r1) (16/51) Purging py3-typing-extensions-pyc (4.15.0-r1) (17/51) Purging py3-typing-extensions (4.15.0-r1) (18/51) Purging py3-pytest-cov-pyc (5.0.0-r2) (19/51) Purging py3-pytest-cov (5.0.0-r2) (20/51) Purging py3-coverage-pyc (7.13.5-r1) (21/51) Purging py3-coverage (7.13.5-r1) (22/51) Purging py3-pytest-mock-pyc (3.15.1-r1) (23/51) Purging py3-pytest-mock (3.15.1-r1) (24/51) Purging py3-mock-pyc (5.2.0-r1) (25/51) Purging py3-mock (5.2.0-r1) (26/51) Purging py3-pytest-pyc (9.0.3-r0) (27/51) Purging py3-pytest (9.0.3-r0) (28/51) Purging py3-iniconfig-pyc (2.3.0-r1) (29/51) Purging py3-iniconfig (2.3.0-r1) (30/51) Purging py3-packaging-pyc (26.1-r0) (31/51) Purging py3-packaging (26.1-r0) (32/51) Purging py3-parsing-pyc (3.3.2-r1) (33/51) Purging py3-parsing (3.3.2-r1) (34/51) Purging py3-pluggy-pyc (1.6.0-r1) (35/51) Purging py3-pluggy (1.6.0-r1) (36/51) Purging py3-py-pyc (1.11.0-r5) (37/51) Purging py3-py (1.11.0-r5) (38/51) Purging py3-pygments-pyc (2.20.0-r0) (39/51) Purging py3-pygments (2.20.0-r0) (40/51) Purging python3-pyc (3.14.3-r0) (41/51) Purging python3-pycache-pyc0 (3.14.3-r0) (42/51) Purging pyc (3.14.3-r0) (43/51) Purging python3 (3.14.3-r0) (44/51) Purging gdbm (1.26-r0) (45/51) Purging libbz2 (1.0.8-r6) (46/51) Purging libffi (3.5.2-r1) (47/51) Purging libpanelw (6.6_p20260404-r0) (48/51) Purging mpdecimal (4.0.1-r0) (49/51) Purging readline (8.3.3-r1) (50/51) Purging sqlite-libs (3.53.0-r0) (51/51) Purging xz-libs (5.8.2-r0) Executing busybox-1.37.0-r31.trigger OK: 824.7 MiB in 104 packages