[Pkg-matrix-maintainers] Bug#980647: python-matrix-nio: FTBFS: dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 returned exit code 13

Lucas Nussbaum lucas at debian.org
Wed Jan 20 20:47:12 GMT 2021


Source: python-matrix-nio
Version: 0.15.2-1
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20210120 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

Relevant part (hopefully):
> dpkg-buildpackage
> -----------------
> 
> Command: dpkg-buildpackage -us -uc -sa -rfakeroot
> dpkg-buildpackage: info: source package python-matrix-nio
> dpkg-buildpackage: info: source version 0.15.2-1
> dpkg-buildpackage: info: source distribution unstable
> dpkg-buildpackage: info: source changed by Jonas Smedegaard <dr at jones.dk>
>  dpkg-source --before-build .
> dpkg-buildpackage: info: host architecture amd64
>  debian/rules clean
> dh clean --buildsystem=pybuild
>    dh_auto_clean -O--buildsystem=pybuild
> I: pybuild base:232: python3.9 setup.py clean 
> running clean
> removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build' (and everything under it)
> 'build/bdist.linux-x86_64' does not exist -- can't clean it
> 'build/scripts-3.9' does not exist -- can't clean it
>    dh_autoreconf_clean -O--buildsystem=pybuild
>    dh_clean -O--buildsystem=pybuild
>  dpkg-source -b .
> dpkg-source: info: using source format '3.0 (quilt)'
> dpkg-source: info: building python-matrix-nio using existing ./python-matrix-nio_0.15.2.orig.tar.gz
> dpkg-source: info: using patch list from debian/patches/series
> dpkg-source: info: building python-matrix-nio in python-matrix-nio_0.15.2-1.debian.tar.xz
> dpkg-source: info: building python-matrix-nio in python-matrix-nio_0.15.2-1.dsc
>  debian/rules binary
> dh binary --buildsystem=pybuild
>    dh_update_autotools_config -O--buildsystem=pybuild
>    dh_autoreconf -O--buildsystem=pybuild
>    dh_auto_configure -O--buildsystem=pybuild
> I: pybuild base:232: python3.9 setup.py config 
> running config
>    dh_auto_build -O--buildsystem=pybuild
> I: pybuild base:232: /usr/bin/python3 setup.py build 
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/rooms.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/responses.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/api.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/_compat.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/http.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/log.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/exceptions.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/monitors.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> copying nio/schemas.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/to_device.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/misc.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/account_data.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/room_events.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/invite_events.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/presence.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/common.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> copying nio/events/ephemeral.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/events
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/client
> copying nio/client/http_client.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/client
> copying nio/client/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/client
> copying nio/client/base_client.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/client
> copying nio/client/async_client.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/client
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/key_export.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/sas.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/memorystores.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/olm_machine.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/device.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/sessions.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/log.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/attachments.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/async_attachments.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> copying nio/crypto/key_request.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/crypto
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/event_builders
> copying nio/event_builders/direct_messages.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/event_builders
> copying nio/event_builders/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/event_builders
> copying nio/event_builders/state_events.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/event_builders
> copying nio/event_builders/event_builder.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/event_builders
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
> copying nio/store/models.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
> copying nio/store/__init__.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
> copying nio/store/database.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
> copying nio/store/file_trustdb.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
> copying nio/store/log.py -> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build/nio/store
>    dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:232: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest -k-test_connect_wrapper
> ============================= test session starts ==============================
> platform linux -- Python 3.9.1+, pytest-6.0.2, py-1.10.0, pluggy-0.13.0
> benchmark: 3.2.2 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
> rootdir: /<<PKGBUILDDIR>>, configfile: setup.cfg
> plugins: benchmark-3.2.2, cov-2.10.1, hypothesis-5.43.3
> collected 381 items / 1 deselected / 380 selected
> 
> tests/async_attachment_test.py ...............                           [  3%]
> tests/async_client_test.py .................F........................... [ 15%]
> .......F...............................                                  [ 26%]
> tests/attachment_test.py .......                                         [ 27%]
> tests/client_test.py ..........................................          [ 38%]
> tests/encryption_test.py .................................               [ 47%]
> tests/event_builders_test.py .......                                     [ 49%]
> tests/event_test.py ..........................................           [ 60%]
> tests/http2_test.py ....                                                 [ 61%]
> tests/http_test.py ..                                                    [ 62%]
> tests/key_export_test.py ........                                        [ 64%]
> tests/memory_store_test.py ....                                          [ 65%]
> tests/responses_test.py ..............................                   [ 73%]
> tests/room_test.py ............................                          [ 80%]
> tests/sas_test.py ...............................                        [ 88%]
> tests/sessions_test.py ....                                              [ 89%]
> tests/store_test.py .......................................              [100%]
> 
> =================================== FAILURES ===================================
> _________________________ TestClass.test_sync[pyloop] __________________________
> 
> self = <async_client_test.TestClass object at 0x7f1bb53bfc70>
> async_client = <nio.client.async_client.AsyncClient object at 0x7f1bb555e760>
> aioresponse = <aioresponses.core.aioresponses object at 0x7f1bb555e100>
> 
>     async def test_sync(self, async_client, aioresponse):
>         aioresponse.post(
>             "https://example.org/_matrix/client/r0/login",
>             status=200,
>             payload=self.login_response
>         )
>     
>         url = (
>             r"^https://example\.org/_matrix/client/r0/"
>             r"sync\?access_token=abc123"
>         )
>     
>         aioresponse.get(
>             re.compile(fr"{url}$"),
>             status=200,
>             payload=self.sync_response
>         )
>     
>         with pytest.raises(LocalProtocolError):
>             resp2 = await async_client.sync()
>     
>         resp = await async_client.login("wordpass")
>         resp2 = await async_client.sync()
>         assert isinstance(resp, LoginResponse)
>         assert isinstance(resp2, SyncResponse)
>     
>         # Test with filter ID
>     
>         aioresponse.get(
>             re.compile(fr"{url}&filter=test_id&since=.*"),
>             status=200,
>             payload=self.sync_response
>         )
>         resp3 = await async_client.sync(sync_filter="test_id")
>         assert isinstance(resp3, SyncResponse)
>     
>         # Test with filter dict
>     
>         aioresponse.get(
>             re.compile(url + r"&filter=" + quote("{}") + "&since=.*"),
>             status=200,
>             payload=self.sync_response,
>         )
> >       resp4 = await async_client.sync(sync_filter={})
> 
> tests/async_client_test.py:756: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> nio/client/async_client.py:994: in sync
>     response = await self._send(
> nio/client/async_client.py:704: in _send
>     transport_resp = await self.send(
> nio/client/async_client.py:252: in wrapper
>     return await func(self, *args, **kwargs)
> nio/client/async_client.py:771: in send
>     return await self.client_session.request(
> /usr/lib/python3.9/unittest/mock.py:2165: in _execute_mock_call
>     result = await effect(*args, **kwargs)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> self = <aioresponses.core.aioresponses object at 0x7f1bb555e100>
> orig_self = <aiohttp.client.ClientSession object at 0x7f1bb57fb4c0>
> method = 'GET'
> url = URL('https://example.org/_matrix/client/r0/sync?access_token=abc123&filter=%257B%257D&since=s526_47314_0_7_1_1_1_11444_1')
> args = ()
> kwargs = {'data': None, 'headers': {'Content-Type': 'application/json'}, 'proxy': None, 'ssl': None, ...}
> url_origin = 'https://example.org/_matrix/client/r0/sync?access_token=abc123&since=s526_47314_0_7_1_1_1_11444_1&filter=%7B%7D'
> url_str = 'https://example.org/_matrix/client/r0/sync?access_token=abc123&filter=%257B%257D&since=s526_47314_0_7_1_1_1_11444_1'
> key = ('GET', URL('https://example.org/_matrix/client/r0/sync?access_token=abc123&filter=%257B%257D&since=s526_47314_0_7_1_1_1_11444_1'))
> kwargs_copy = {'data': None, 'headers': {'Content-Type': 'application/json'}, 'proxy': None, 'ssl': None, ...}
> response = None
> 
>     async def _request_mock(self, orig_self: ClientSession,
>                             method: str, url: 'Union[URL, str]',
>                             *args: Tuple,
>                             **kwargs: Dict) -> 'ClientResponse':
>         """Return mocked response object or raise connection error."""
>         if orig_self.closed:
>             raise RuntimeError('Session is closed')
>     
>         url_origin = url
>         url = normalize_url(merge_params(url, kwargs.get('params')))
>         url_str = str(url)
>         for prefix in self._passthrough:
>             if url_str.startswith(prefix):
>                 return (await self.patcher.temp_original(
>                     orig_self, method, url_origin, *args, **kwargs
>                 ))
>     
>         key = (method, url)
>         self.requests.setdefault(key, [])
>         try:
>             kwargs_copy = copy.deepcopy(kwargs)
>         except TypeError:
>             # Handle the fact that some values cannot be deep copied
>             kwargs_copy = kwargs
>         self.requests[key].append(RequestCall(args, kwargs_copy))
>     
>         response = await self.match(method, url, **kwargs)
>     
>         if response is None:
> >           raise ClientConnectionError(
>                 'Connection refused: {} {}'.format(method, url)
>             )
> E           aiohttp.client_exceptions.ClientConnectionError: Connection refused: GET https://example.org/_matrix/client/r0/sync?access_token=abc123&filter=%257B%257D&since=s526_47314_0_7_1_1_1_11444_1
> 
> /usr/lib/python3/dist-packages/aioresponses/core.py:393: ClientConnectionError
> _____________________ TestClass.test_traceconfig_callbacks _____________________
> 
> self = <async_client_test.TestClass object at 0x7f1bb53bfca0>
> 
>     async def test_traceconfig_callbacks(self):
>         monitor = TransferMonitor(1)
>     
>         class Context:
>             def __init__(self):
>                 self.trace_request_ctx = monitor
>     
>         session = ClientSession()
>         context = Context()
> >       params  = TraceRequestChunkSentParams(chunk=b"x")
> E       TypeError: __init__() missing 2 required positional arguments: 'method' and 'url'
> 
> tests/async_client_test.py:1798: TypeError
> =============================== warnings summary ===============================
> /usr/lib/python3/dist-packages/_pytest/config/__init__.py:1148
>   /usr/lib/python3/dist-packages/_pytest/config/__init__.py:1148: PytestConfigWarning: Unknown config ini key: flake8-ignore
>   
>     self._warn_or_fail_if_strict("Unknown config ini key: {}\n".format(key))
> 
> -- Docs: https://docs.pytest.org/en/stable/warnings.html
> 
> 
> Computing stats ...
> Computing stats ... group 1/1
> Computing stats ... group 1/1: min
> Computing stats ... group 1/1: min (1/1)
> Computing stats ... group 1/1: min (1/1)
> Computing stats ... group 1/1: max
> Computing stats ... group 1/1: max (1/1)
> Computing stats ... group 1/1: max (1/1)
> Computing stats ... group 1/1: mean
> Computing stats ... group 1/1: mean (1/1)
> Computing stats ... group 1/1: mean (1/1)
> Computing stats ... group 1/1: median
> Computing stats ... group 1/1: median (1/1)
> Computing stats ... group 1/1: median (1/1)
> Computing stats ... group 1/1: iqr
> Computing stats ... group 1/1: iqr (1/1)
> Computing stats ... group 1/1: iqr (1/1)
> Computing stats ... group 1/1: stddev
> Computing stats ... group 1/1: stddev (1/1)
> Computing stats ... group 1/1: stddev (1/1)
> Computing stats ... group 1/1: ops
> Computing stats ... group 1/1: ops (1/1)
> Computing stats ... group 1/1: ops (1/1)
> Computing stats ... group 1/1: ops: outliers
> Computing stats ... group 1/1: ops: outliers (1/1)
> Computing stats ... group 1/1: ops: rounds
> Computing stats ... group 1/1: ops: rounds (1/1)
> Computing stats ... group 1/1: ops: iterations
> Computing stats ... group 1/1: ops: iterations (1/1)
> ------------------------------------------------ benchmark: 1 tests ------------------------------------------------
> Name (time in ms)            Min       Max      Mean  StdDev    Median     IQR  Outliers     OPS  Rounds  Iterations
> --------------------------------------------------------------------------------------------------------------------
> test_encrypt_rounds     259.7579  261.8740  260.9310  0.8002  260.8767  1.0620       2;0  3.8324       5           1
> --------------------------------------------------------------------------------------------------------------------
> 
> Legend:
>   Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
>   OPS: Operations Per Second, computed as 1 / Mean
> =========================== short test summary info ============================
> FAILED tests/async_client_test.py::TestClass::test_sync[pyloop] - aiohttp.cli...
> FAILED tests/async_client_test.py::TestClass::test_traceconfig_callbacks - Ty...
> =========== 2 failed, 378 passed, 1 deselected, 1 warning in 46.05s ============
> E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.9/build; python3.9 -m pytest -k-test_connect_wrapper
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 returned exit code 13

The full build log is available from:
   http://qa-logs.debian.net/2021/01/20/python-matrix-nio_0.15.2-1_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please marking it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with me
so that we can identify if something relevant changed in the meantime.

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.



More information about the Pkg-matrix-maintainers mailing list