Package: src:python-proton-core
Version: 0.4.0-3
Severity: serious
Tags: ftbfs forky sid

Dear maintainer:

During a rebuild of all packages in unstable, this package failed to build.

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

https://people.debian.org/~sanvila/build-logs/202511/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:python-proton-core, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --with sphinxdoc --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
I: pybuild base:311: python3.13 setup.py clean 
/usr/lib/python3/dist-packages/setuptools/dist.py:759: 
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        
********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX 
license expression:

        License :: OSI Approved :: GNU General Public License v3 (GPLv3)

        See 
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license 
for details.
        
********************************************************************************

!!
  self._finalize_license_expression()
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build' (and 
everything under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.13' does not exist -- can't clean it
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --with sphinxdoc --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
I: pybuild base:311: python3.13 setup.py config 
/usr/lib/python3/dist-packages/setuptools/dist.py:759: 
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        
********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX 
license expression:

        License :: OSI Approved :: GNU General Public License v3 (GPLv3)

        See 
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license 
for details.
        
********************************************************************************

!!
  self._finalize_license_expression()
running config
   dh_auto_build -O--buildsystem=pybuild
I: pybuild base:311: /usr/bin/python3 setup.py build 
/usr/lib/python3/dist-packages/setuptools/dist.py:759: 
SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        
********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX 
license expression:

        License :: OSI Approved :: GNU General Public License v3 (GPLv3)

        See 
https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license 
for details.
        
********************************************************************************

!!
  self._finalize_license_expression()
running build
running build_py
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/_base.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
copying proton/views/basiccli.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/views
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/metaclasses.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
copying proton/utils/environment.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/utils
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/sso.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
copying proton/sso/__main__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/sso
creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/__main__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
copying proton/loader/loader.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/loader
creating 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/api.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/formdata.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/exceptions.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
copying proton/session/environments.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session
creating 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/textfile.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/_base.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
copying proton/keyring/exceptions.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/keyring
creating 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/base.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/auto.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/alternativerouting.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/aiohttp.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
copying proton/session/transports/requests.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports
creating 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/__init__.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/_ctsrp.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/util.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/pmhash.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
copying proton/session/srp/_pysrp.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/srp
creating 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports/utils
copying proton/session/transports/utils/dns.py -> 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build/proton/session/transports/utils
running egg_info
creating proton_core.egg-info
writing proton_core.egg-info/PKG-INFO
writing dependency_links to proton_core.egg-info/dependency_links.txt
writing entry points to proton_core.egg-info/entry_points.txt
writing requirements to proton_core.egg-info/requires.txt
writing top-level names to proton_core.egg-info/top_level.txt
writing manifest file 'proton_core.egg-info/SOURCES.txt'
reading manifest file 'proton_core.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'proton_core.egg-info/SOURCES.txt'
   dh_auto_test -O--buildsystem=pybuild
I: pybuild base:311: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build; python3.13 -m pytest 
-v -k 'not test_bad_pinning_fingerprint_changed and not 
test_alternative_routing_works_on_prod and not test_bad_pinning_url_changed and 
not test_without_pinning and not test_auto_works_on_prod and not test_ping and 
not test_successful'
============================= test session starts ==============================
platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0 -- 
/usr/bin/python3.13
cachedir: .pytest_cache
rootdir: /<<PKGBUILDDIR>>
configfile: setup.cfg
plugins: typeguard-4.4.4, cov-5.0.0
collecting ... collected 125 items / 8 deselected / 117 selected

tests/test_aiohttp_transport.py::TestAiohttpTransport::test_async_api_request_posts_form_data_with_data_param
 PASSED [  0%]
tests/test_aiohttp_transport.py::TestFormDataTransformer::test_to_aiohttp_form_data
 PASSED [  1%]
tests/test_aiohttp_transport.py::TestAiohttpTransportRawResult::test_async_api_request_get_raw
 PASSED [  2%]
tests/test_aiohttp_transport.py::TestAiohttpTransportRawResult::test_async_api_request_last_modified
 PASSED [  3%]
tests/test_api.py::TestCTSRPClass::test_compute_v SKIPPED (Couldn't ...) [  4%]
tests/test_api.py::TestCTSRPClass::test_generate_v SKIPPED (Couldn't...) [  5%]
tests/test_api.py::TestCTSRPClass::test_invalid_version SKIPPED (Cou...) [  5%]
tests/test_api.py::TestCTSRPClass::test_srp SKIPPED (Couldn't load C...) [  6%]
tests/test_api.py::TestPYSRPClass::test_compute_v FAILED                 [  7%]
tests/test_api.py::TestPYSRPClass::test_generate_v FAILED                [  8%]
tests/test_api.py::TestPYSRPClass::test_invalid_version PASSED           [  9%]
tests/test_api.py::TestPYSRPClass::test_srp FAILED                       [ 10%]
tests/test_api.py::TestModulus::test_modulus_verification PASSED         [ 11%]
tests/test_autotransport.py::TestAuto::test_auto_transport_is_not_available_when_all_transport_choices_receive_an_unexpected_ping_response
 PASSED [ 11%]
tests/test_autotransport.py::TestAuto::test_auto_transport_is_not_available_when_all_transports_choices_time_out_pinging_rest_api
 PASSED [ 12%]
tests/test_basekeyring.py::test_get_item_from_keyring PASSED             [ 13%]
tests/test_basekeyring.py::test_set_item PASSED                          [ 14%]
tests/test_basekeyring.py::test_del_item PASSED                          [ 15%]
tests/test_basekeyring.py::test_raise_exception_not_implemented_methods PASSED 
[ 16%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[1] 
PASSED [ 17%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key1]
 PASSED [ 17%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key2]
 PASSED [ 18%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[None]
 PASSED [ 19%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_type[key4]
 PASSED [ 20%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[!] 
PASSED [ 21%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[A] 
PASSED [ 22%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\xe7]
 PASSED [ 23%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[+] 
PASSED [ 23%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[*] 
PASSED [ 24%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\xe3]
 PASSED [ 25%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[\\] 
PASSED [ 26%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[?] 
PASSED [ 27%]
tests/test_basekeyring.py::test_get_item_raises_exception_invalid_key_value[=] 
PASSED [ 28%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[1] 
PASSED [ 29%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key1]
 PASSED [ 29%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key2]
 PASSED [ 30%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[None]
 PASSED [ 31%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_type[key4]
 PASSED [ 32%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[!] 
PASSED [ 33%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[A] 
PASSED [ 34%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\xe7]
 PASSED [ 35%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[+] 
PASSED [ 35%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[*] 
PASSED [ 36%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\xe3]
 PASSED [ 37%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[\\] 
PASSED [ 38%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[?] 
PASSED [ 39%]
tests/test_basekeyring.py::test_del_item_raises_exception_invalid_key_value[=] 
PASSED [ 40%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[1] 
PASSED [ 41%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key1]
 PASSED [ 41%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key2]
 PASSED [ 42%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[None]
 PASSED [ 43%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_type[key4]
 PASSED [ 44%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[!] 
PASSED [ 45%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[A] 
PASSED [ 46%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\xe7]
 PASSED [ 47%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[+] 
PASSED [ 47%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[*] 
PASSED [ 48%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\xe3]
 PASSED [ 49%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[\\] 
PASSED [ 50%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[?] 
PASSED [ 51%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_key_value[=] 
PASSED [ 52%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[1] 
PASSED [ 52%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[test]
 PASSED [ 53%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[None]
 PASSED [ 54%]
tests/test_basekeyring.py::test_set_item_raises_exception_invalid_value_type[value3]
 PASSED [ 55%]
tests/test_basekeyring.py::test_get_from_factory_raises_exception_due_to_non_existent_backend
 PASSED [ 56%]
tests/test_dns_requests.py::TestDNSParser::test_ar_legacy_domain PASSED  [ 57%]
tests/test_dns_requests.py::TestDNSParser::test_ar_current_domain1 PASSED [ 58%]
tests/test_dns_requests.py::TestDNSParser::test_ar_current_domain2 PASSED [ 58%]
tests/test_dns_requests.py::TestDNSParser::test_normal_query_legacy_domain 
PASSED [ 59%]
tests/test_dns_requests.py::TestDNSParser::test_normal_query_current_domain 
PASSED [ 60%]
tests/test_dns_requests.py::TestDNSParser::test_generic_parsing PASSED   [ 61%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Empty reply-] 
PASSED [ 62%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Super small 
reply (1)-x] PASSED [ 63%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Super small 
reply (7)-\xfa\x83\x81\x80\x00\x01\x00] PASSED [ 64%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Unicode 
Decode 
error-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\tprotonpro\x03xyz\x00\x00\x10\x00\x01\xc0\x0c\x00\x10\x00\x01\x00\x00\x00x\x0032ec2\xcc3-127-37-78.eu-central-1.compute.amazonaws.com\xc0\x0c\x00\x10\x00\x01\x00\x00\x00x\x0054ec2-54-93-234-150.eu-central-1.compute.amazonaws.com]
 PASSED [ 64%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Wrong query 
reply-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\nprotonpro\x03xyz]
 PASSED [ 65%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated 
query 
reply-\xfa\x83\x81\x80\x00\x01\x00\x02\x00\x00\x00\x00\x1bdMFYGSLTQOJXXI33OOZYG4LTDNA\tproto]
 PASSED [ 66%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated TXT 
record 
value-\x00\x00\x81\x80\x00\x01\x00\x03\x00\x00\x00\x00\x1ddOZYG4LLBOBUS44DSN52G63RONVSQ\tprotonpro\x03xyz\x00\x00\x10\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x00x\x00\x06\x03vpn\xc0*\xc0I\x00\x10\x00\x01\x00\x00\x00x\x00\x0e\r35.15]
 PASSED [ 67%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated A 
record 
value-jW\x81\x80\x00\x01\x00\x01\x00\x03\x00\x03\x07vpn-api\x06proton\x02me\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x04\xb0\x00\x04\xb9\x9f\x9f]
 PASSED [ 68%]
tests/test_dns_requests.py::TestDNSParser::test_incorrect_records[Truncated A 
record 
headers-jW\x81\x80\x00\x01\x00\x01\x00\x03\x00\x03\x07vpn-api\x06proton\x02me\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00]
 PASSED [ 69%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[ec2-3-127-37-78.eu-central-1.compute.amazonaws.com-True]
 PASSED [ 70%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[hostnames.can.end.with.one.period.-True]
 PASSED [ 70%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-False]
 PASSED [ 71%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[-hostname-False]
 PASSED [ 72%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[hostname--False]
 PASSED [ 73%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.blah.com-False]
 PASSED [ 74%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[blah..com-False]
 PASSED [ 75%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[special-chars!.com-False]
 PASSED [ 76%]
tests/test_dns_requests.py::TestDNSParser::test_valid_hostname_in_A_record[vpn-api.proton.me/malicious/-False]
 PASSED [ 76%]
tests/test_environment.py::test_raises_exception_when_creating_new_product_class_and_not_setting_product_class_property
 PASSED [ 77%]
tests/test_loader.py::LoaderTest::test_default PASSED                    [ 78%]
tests/test_loader.py::LoaderTest::test_environments PASSED               [ 79%]
tests/test_loader.py::LoaderTest::test_environments_explicit PASSED      [ 80%]
tests/test_protonsso.py::TestProtonSSO::test_additional_data SKIPPED     [ 81%]
tests/test_protonsso.py::TestProtonSSO::test_broken_data PASSED          [ 82%]
tests/test_protonsso.py::TestProtonSSO::test_broken_index PASSED         [ 82%]
tests/test_protonsso.py::TestProtonSSO::test_default_session SKIPPED     [ 83%]
tests/test_protonsso.py::TestProtonSSO::test_sessions PASSED             [ 84%]
tests/test_protonsso.py::TestProtonSSO::test_with_real_session SKIPPED   [ 85%]
tests/test_requests_transport.py::TestRequestsTransport::test_async_api_request_posts_form_data_with_data_param
 PASSED [ 86%]
tests/test_requests_transport.py::TestRequestsTransportRawResult::test_async_api_request_get_raw
 PASSED [ 87%]
tests/test_requests_transport.py::TestRequestsTransportRawResult::test_async_api_request_last_modified
 PASSED [ 88%]
tests/test_session.py::TestSession::test_session_refresh PASSED          [ 88%]
tests/test_session.py::TestSessionUsingApi::test_session_fork_not_ok SKIPPED [ 
89%]
tests/test_session.py::TestSessionUsingApi::test_session_fork_ok SKIPPED [ 90%]
tests/test_session_pickle.py::TestSessionPickle::test_pickle PASSED      [ 91%]
tests/test_textfilekeyring.py::test_get_item PASSED                      [ 92%]
tests/test_textfilekeyring.py::test_del_item PASSED                      [ 93%]
tests/test_textfilekeyring.py::test_set_item PASSED                      [ 94%]
tests/test_textfilekeyring.py::test_get_item_raises_exception_filepath_does_not_exist
 PASSED [ 94%]
tests/test_textfilekeyring.py::test_get_item_raises_exception_corrupted_json_data
 PASSED [ 95%]
tests/test_textfilekeyring.py::test_del_item_raises_exception_filepath_does_not_exist
 PASSED [ 96%]
tests/test_textfilekeyring.py::test_set_item_raises_exception_unable_to_write_in_path
 PASSED [ 97%]
tests/test_textfilekeyring.py::test_set_item_serialize_invalid_json_object_raises_exception
 PASSED [ 98%]
tests/test_tlsverification.py::TestTLSValidation::test_bad_ssl PASSED    [ 99%]
tests/test_tlsverification.py::TestTLSValidation::test_pinning_disabled PASSED 
[100%]

=================================== FAILURES ===================================
________________________ TestPYSRPClass.test_compute_v _________________________

self = <test_api.TestPYSRPClass testMethod=test_compute_v>

    def test_compute_v(self):
        for instance in srp_instances:
            if instance["Exception"] is not None:
                with self.assertRaises(instance['Exception']):
                    usr = self.user(
                        instance["Password"],
                        bytes.fromhex(instance["Modulus"])
                    )
                    usr.compute_v(
                        base64.b64decode(instance["Salt"]), PM_VERSION
                    )
            else:
                usr = self.user(
                    instance["Password"],
                    bytes.fromhex(instance["Modulus"])
                )
>               salt, v = usr.compute_v(
                    base64.b64decode(instance["Salt"]), PM_VERSION
                )

tests/test_api.py:59: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
proton/session/srp/_pysrp.py:158: in compute_v
    self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
    exp = hash_password(
proton/session/srp/util.py:48: in hash_password
    return hash_password_3(hash_class, password, salt, modulus)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hash_class = <function pmhash at 0x7fd8f491c360>
password = 
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'jQGE9ZrERiIQ2V/wZ1PtZe'
modulus = 
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'

    def hash_password_3(hash_class, password, salt, modulus):
        salt = (salt + b"proton")[:16]
        salt = bcrypt_b64_encode(salt)[:22]
>       hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       ValueError: password cannot be longer than 72 bytes, truncate manually 
if necessary (e.g. my_password[:72])

proton/session/srp/util.py:42: ValueError
________________________ TestPYSRPClass.test_generate_v ________________________

self = <test_api.TestPYSRPClass testMethod=test_generate_v>

    def test_generate_v(self):
        for instance in srp_instances:
            if instance["Exception"] is not None:
                continue
    
            usr = self.user(
                instance["Password"],
                bytes.fromhex(instance["Modulus"])
            )
>           generated_salt, generated_v = usr.compute_v()
                                          ^^^^^^^^^^^^^^^

tests/test_api.py:86: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
proton/session/srp/_pysrp.py:158: in compute_v
    self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
    exp = hash_password(
proton/session/srp/util.py:48: in hash_password
    return hash_password_3(hash_class, password, salt, modulus)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hash_class = <function pmhash at 0x7fd8f491c360>
password = 
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'FkiTC7Rj00ma61/wZ1PtZe'
modulus = 
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'

    def hash_password_3(hash_class, password, salt, modulus):
        salt = (salt + b"proton")[:16]
        salt = bcrypt_b64_encode(salt)[:22]
>       hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       ValueError: password cannot be longer than 72 bytes, truncate manually 
if necessary (e.g. my_password[:72])

proton/session/srp/util.py:42: ValueError
___________________________ TestPYSRPClass.test_srp ____________________________

self = <test_api.TestPYSRPClass testMethod=test_srp>

    def test_srp(self):
        for instance in srp_instances:
            if instance["Exception"]:
                continue
    
            server = TestServer()
    
            server.setup(
                instance["Username"],
                bytes.fromhex(instance["Modulus"]),
                base64.b64decode(instance["Verifier"])
            )
    
            server_challenge = server.get_challenge()
            usr = self.user(
                instance["Password"], bytes.fromhex(instance["Modulus"])
            )
    
            client_challenge = usr.get_challenge()
>           client_proof = usr.process_challenge(
                base64.b64decode(instance["Salt"]),
                server_challenge,
                PM_VERSION
            )

tests/test_api.py:123: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
proton/session/srp/_pysrp.py:136: in process_challenge
    self.x = calculate_x(self.hash_class, self.bytes_s, self.p, self.N, version)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
proton/session/srp/_pysrp.py:50: in calculate_x
    exp = hash_password(
proton/session/srp/util.py:48: in hash_password
    return hash_password_3(hash_class, password, salt, modulus)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hash_class = <function pmhash at 0x7fd8f491c360>
password = 
b'PasswordThatIsLongerThan72CharsAndContainsSomeRandomStuffThatNoOneCaresAbout'
salt = b'jQGE9ZrERiIQ2V/wZ1PtZe'
modulus = 
b'\xc3v7z\xc6\xc6&\x97\xe2\x11\xc0\xbe\x80\xda<_{s\x81\xab\x92\xd9E6\xb4\x06YJ\xd0\xc1\xbf\xe9\nBN6\x08\\\xd2\xf5S\xf3...xf7!\xeb\xf1\xd9\x10[\xe3<\xdc\x19\xa0\x10\x80\xa9B\x7fOv\xb2}?\xcf\x89&\xa5\xc4\x88LB\xd1\xb6\xd0R\xc2\xf7DE"\x83\xdb'

    def hash_password_3(hash_class, password, salt, modulus):
        salt = (salt + b"proton")[:16]
        salt = bcrypt_b64_encode(salt)[:22]
>       hashed = bcrypt.hashpw(password, b"$2y$10$" + salt)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       ValueError: password cannot be longer than 72 bytes, truncate manually 
if necessary (e.g. my_password[:72])

proton/session/srp/util.py:42: ValueError

---------- coverage: platform linux, python 3.13.9-final-0 -----------
Name                                              Stmts   Miss  Cover
---------------------------------------------------------------------
proton/keyring/__init__.py                            2      0   100%
proton/keyring/_base.py                              40      2    95%
proton/keyring/exceptions.py                          6      0   100%
proton/keyring/textfile.py                           45      2    96%
proton/loader/__init__.py                             3      0   100%
proton/loader/__main__.py                             7      7     0%
proton/loader/loader.py                              92     14    85%
proton/session/__init__.py                            3      0   100%
proton/session/api.py                               363    165    55%
proton/session/environments.py                       40      5    88%
proton/session/exceptions.py                         46      5    89%
proton/session/formdata.py                           12      0   100%
proton/session/srp/__init__.py                       10      1    90%
proton/session/srp/_ctsrp.py                        206    190     8%
proton/session/srp/_pysrp.py                         80      6    92%
proton/session/srp/pmhash.py                         16      2    88%
proton/session/srp/util.py                           37      0   100%
proton/session/transports/__init__.py                 4      0   100%
proton/session/transports/aiohttp.py                 99     31    69%
proton/session/transports/alternativerouting.py     108     25    77%
proton/session/transports/auto.py                    79     19    76%
proton/session/transports/base.py                    40      6    85%
proton/session/transports/requests.py                58     14    76%
proton/session/transports/utils/dns.py              110      9    92%
proton/sso/__init__.py                                2      0   100%
proton/sso/__main__.py                              137    137     0%
proton/sso/sso.py                                   134     29    78%
proton/utils/__init__.py                              3      0   100%
proton/utils/environment.py                          89     29    67%
proton/utils/metaclasses.py                           6      0   100%
proton/views/__init__.py                              2      2     0%
proton/views/_base.py                                18     18     0%
proton/views/basiccli.py                             66     66     0%
---------------------------------------------------------------------
TOTAL                                              1963    784    60%
Coverage HTML written to dir htmlcov

=========================== short test summary info ============================
FAILED tests/test_api.py::TestPYSRPClass::test_compute_v - ValueError: passwo...
FAILED tests/test_api.py::TestPYSRPClass::test_generate_v - ValueError: passw...
FAILED tests/test_api.py::TestPYSRPClass::test_srp - ValueError: password can...
=========== 3 failed, 105 passed, 9 skipped, 8 deselected in 14.29s ============
E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13_proton-core/build; python3.13 -m pytest 
-v -k 'not test_bad_pinning_fingerprint_changed and not 
test_alternative_routing_works_on_prod and not test_bad_pinning_url_changed and 
not test_without_pinning and not test_auto_works_on_prod and not test_ping and 
not test_successful'
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 
returned exit code 13
make: *** [debian/rules:18: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------


Reply via email to