Package: src:amqtt
Version: 0.11.4-1
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/202608/

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:amqtt, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 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
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:142: Building wheel for python3.13 with "build" 
module
I: pybuild base:385: python3.13 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13  
* Building wheel...
Successfully built amqtt-0.11.4-py3-none-any.whl

[... snipped ...]

            raise TypeError('ssl argument must be an SSLContext or None')
    
        if ssl_handshake_timeout is not None and ssl is None:
            raise ValueError(
                'ssl_handshake_timeout is only meaningful with ssl')
    
        if ssl_shutdown_timeout is not None and ssl is None:
            raise ValueError(
                'ssl_shutdown_timeout is only meaningful with ssl')
    
        if sock is not None:
            _check_ssl_socket(sock)
    
        if host is not None or port is not None:
            if sock is not None:
                raise ValueError(
                    'host/port and sock can not be specified at the same time')
    
            if reuse_address is None:
                reuse_address = os.name == "posix" and sys.platform != "cygwin"
            sockets = []
            if host == '':
                hosts = [None]
            elif (isinstance(host, str) or
                  not isinstance(host, collections.abc.Iterable)):
                hosts = [host]
            else:
                hosts = host
    
            fs = [self._create_server_getaddrinfo(host, port, family=family,
                                                  flags=flags)
                  for host in hosts]
            infos = await tasks.gather(*fs)
            infos = set(itertools.chain.from_iterable(infos))
    
            completed = False
            try:
                for res in infos:
                    af, socktype, proto, canonname, sa = res
                    try:
                        sock = socket.socket(af, socktype, proto)
                    except socket.error:
                        # Assume it's a bad family/type/protocol combination.
                        if self._debug:
                            logger.warning('create_server() failed to create '
                                           'socket.socket(%r, %r, %r)',
                                           af, socktype, proto, exc_info=True)
                        continue
                    sockets.append(sock)
                    if reuse_address:
                        sock.setsockopt(
                            socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
                    # Since Linux 6.12.9, SO_REUSEPORT is not allowed
                    # on other address families than AF_INET/AF_INET6.
                    if reuse_port and af in (socket.AF_INET, socket.AF_INET6):
                        _set_reuseport(sock)
                    if keep_alive:
                        sock.setsockopt(
                            socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)
                    # Disable IPv4/IPv6 dual stack support (enabled by
                    # default on Linux) which makes a single socket
                    # listen on both address families.
                    if (_HAS_IPv6 and
                            af == socket.AF_INET6 and
                            hasattr(socket, 'IPPROTO_IPV6')):
                        sock.setsockopt(socket.IPPROTO_IPV6,
                                        socket.IPV6_V6ONLY,
                                        True)
                    try:
                        sock.bind(sa)
                    except OSError as err:
                        msg = ('error while attempting '
                               'to bind on address %r: %s'
                               % (sa, str(err).lower()))
                        if err.errno == errno.EADDRNOTAVAIL:
                            # Assume the family is not enabled (bpo-30945)
                            sockets.pop()
                            sock.close()
                            if self._debug:
                                logger.warning(msg)
                            continue
>                       raise OSError(err.errno, msg) from None
E                       OSError: [Errno 98] error while attempting to bind on 
address ('127.0.0.1', 1883): [errno 98] address already in use

/usr/lib/python3.14/asyncio/base_events.py:1637: OSError

The above exception was the direct cause of the following exception:

caplog = <_pytest.logging.LogCaptureFixture object at 0x7fa0c80a38c0>
session_broker_config = BrokerConfig(listeners={'default': 
ListenerConfig(type="tcp", bind='127.0.0.1:1883', max_connections=0, ssl=False, 
caf..., auth=None, topic_check=None, 
plugins={'amqtt.plugins.authentication.AnonymousAuthPlugin': 
{'allow_anonymous': True}})
username = '', clean_session = False, session_count = 0, expiration = None

    @pytest.mark.parametrize("username,clean_session,expiration,session_count",
                             [
                                 # session expiration disabled
                                 ("", True, None, 0),  # anonymous and clean 
session
                                 ("", False, None, 0), # anonymous
                                 ("myuser@", True, None, 0), # named user, 
clean session
                                 ("myuser@", False, None, 1), # named user
    
                                 # session expiration enabled
                                 ("myuser@", False, 1, 0), # named user, quick 
expiration
                                 ("myuser@", False, 20, 1), # named user, long 
expiration
                             ])
    @pytest.mark.asyncio
    async def test_clear_session_expiration(caplog, session_broker_config, 
username, clean_session, session_count, expiration):
        caplog.set_level(logging.DEBUG)
    
        session_broker_config.session_expiry_interval = expiration
        session_broker_config.plugins = 
{'amqtt.plugins.authentication.AnonymousAuthPlugin': {'allow_anonymous': 
username == ""}}
    
        broker = Broker(config=session_broker_config)
>       await broker.start()

tests/test_session_monitor.py:44: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <amqtt.broker.Broker object at 0x7fa0c42c6c30>

    async def start(self) -> None:
        """Start the broker to serve with the given configuration.
    
        Start method opens network sockets and will start listening for 
incoming connections.
        """
        try:
            self._sessions.clear()
            self._subscriptions.clear()
            self._retained_messages.clear()
            self.transitions.start()
            self.logger.debug("Broker starting")
        except (MachineError, ValueError) as exc:
            # Backwards compat: MachineError is raised by transitions < 0.5.0.
            self.logger.warning(f"[WARN-0001] Invalid method call at this 
moment: {exc}")
            msg = f"Broker instance can't be started: {exc}"
            raise BrokerError(msg) from exc
    
        await self.plugins_manager.fire_event(BrokerEvents.PRE_START)
        try:
            await self._start_listeners()
            self.transitions.starting_success()
            await self.plugins_manager.fire_event(BrokerEvents.POST_START)
            self._broadcast_task = asyncio.ensure_future(self._broadcast_loop())
            self._session_monitor_task = 
asyncio.create_task(self._session_monitor())
            self.logger.debug("Broker started")
        except Exception as e:
            self.logger.exception("Broker startup failed")
            self.transitions.starting_fail()
            msg = f"Broker instance can't be started: {e}"
>           raise BrokerError(msg) from e
E           amqtt.errors.BrokerError: Broker instance can't be started: [Errno 
98] error while attempting to bind on address ('127.0.0.1', 1883): [errno 98] 
address already in use

amqtt/broker.py:265: BrokerError
---------------------------- Captured stdout setup -----------------------------
[2026-08-01 20:57:14,167] DEBUG asyncio: Using selector: EpollSelector
------------------------------ Captured log setup ------------------------------
DEBUG    asyncio:selector_events.py:64 Using selector: EpollSelector
----------------------------- Captured stdout call -----------------------------
[2026-08-01 20:57:14,168] INFO amqtt.broker.plugins: Loading plugins from config
[2026-08-01 20:57:14,168] DEBUG amqtt.broker.plugins: Loading plugin 
amqtt.plugins.authentication.AnonymousAuthPlugin
[2026-08-01 20:57:14,168] DEBUG amqtt.broker: State transition: new
[2026-08-01 20:57:14,168] DEBUG amqtt.broker: Broker starting
[2026-08-01 20:57:14,168] ERROR amqtt.broker: Broker startup failed
Traceback (most recent call last):
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
255, in start
    await self._start_listeners()
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
291, in _start_listeners
    instance = await self._create_server_instance(listener_name, listener.type, 
address, port, ssl_context)
               
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
327, in _create_server_instance
    return await asyncio.start_server(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/usr/lib/python3.14/asyncio/streams.py", line 84, in start_server
    return await loop.create_server(factory, host, port, **kwds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/asyncio/base_events.py", line 1637, in create_server
    raise OSError(err.errno, msg) from None
OSError: [Errno 98] error while attempting to bind on address ('127.0.0.1', 
1883): [errno 98] address already in use
------------------------------ Captured log call -------------------------------
INFO     amqtt.broker.plugins:manager.py:203 Loading plugins from config
DEBUG    amqtt.broker.plugins:manager.py:252 Loading plugin 
amqtt.plugins.authentication.AnonymousAuthPlugin
DEBUG    amqtt.broker:broker.py:234 State transition: new
DEBUG    amqtt.broker:broker.py:246 Broker starting
ERROR    amqtt.broker:broker.py:262 Broker startup failed
Traceback (most recent call last):
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
255, in start
    await self._start_listeners()
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
291, in _start_listeners
    instance = await self._create_server_instance(listener_name, listener.type, 
address, port, ssl_context)
               
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/broker.py", line 
327, in _create_server_instance
    return await asyncio.start_server(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<5 lines>...
    )
    ^
  File "/usr/lib/python3.14/asyncio/streams.py", line 84, in start_server
    return await loop.create_server(factory, host, port, **kwds)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.14/asyncio/base_events.py", line 1637, in create_server
    raise OSError(err.errno, msg) from None
OSError: [Errno 98] error while attempting to bind on address ('127.0.0.1', 
1883): [errno 98] address already in use
=============================== warnings summary ===============================
../../../../../../usr/lib/python3/dist-packages/_pytest/config/__init__.py:885
  /usr/lib/python3/dist-packages/_pytest/config/__init__.py:885: 
PytestAssertRewriteWarning: Module already imported so cannot be rewritten; 
pytest_logdog
    self.import_plugin(import_spec)

.pybuild/cpython3_3.14/build/tests/contrib/test_cert.py::test_client_broker_cert_authentication
  <string>:18: UserWarning: The 'broker' option is deprecated, please use 
'connection' instead.

.pybuild/cpython3_3.14/build/tests/mqtt/protocol/test_handler.py: 10 warnings
  /usr/lib/python3.14/unittest/case.py:612: DeprecationWarning: Loading plugins 
from EntryPoints is deprecated and will be removed in a future version. Use 
`plugins` section of config instead.
    self.setUp()

.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_fire_event
.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_fire_event_wait
.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_load_plugin
.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_plugin_auth_coro
.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_plugin_close_coro
.pybuild/cpython3_3.14/build/tests/plugins/test_manager.py::TestPluginManager::test_plugin_topic_coro
  /usr/lib/python3.14/unittest/case.py:615: DeprecationWarning: Loading plugins 
from EntryPoints is deprecated and will be removed in a future version. Use 
`plugins` section of config instead.
    result = method()

.pybuild/cpython3_3.14/build/tests/plugins/test_plugins.py::test_plugins_correct_has_attr
  
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/plugins/persistence.py:11: 
UserWarning: SQLitePlugin is deprecated, use 
amqtt.contrib.persistence.SessionDBPlugin
    warnings.warn("SQLitePlugin is deprecated, use 
amqtt.contrib.persistence.SessionDBPlugin", stacklevel=1)

.pybuild/cpython3_3.14/build/tests/plugins/test_topic_checking.py: 10 warnings
.pybuild/cpython3_3.14/build/tests/test_broker.py: 3 warnings
.pybuild/cpython3_3.14/build/tests/test_samples.py: 1 warning
  
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/amqtt/plugins/topic_checking.py:33:
 UserWarning: The 'acl' option is deprecated, please use 'subscribe-acl' 
instead.
    warnings.warn("The 'acl' option is deprecated, please use 'subscribe-acl' 
instead.", stacklevel=1)

.pybuild/cpython3_3.14/build/tests/test_broker.py::test_client_publish_acl_permitted
.pybuild/cpython3_3.14/build/tests/test_broker.py::test_client_publish_acl_forbidden
.pybuild/cpython3_3.14/build/tests/test_broker.py::test_client_publish_acl_permitted_sub_forbidden
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/conftest.py:128: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(

.pybuild/cpython3_3.14/build/tests/test_broker.py::test_broker_with_legacy_config
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_broker.py:1088: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=std_legacy_config)

.pybuild/cpython3_3.14/build/tests/test_broker.py::test_broker_without_auth_plugin[test_config0]
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_broker.py:1125: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=test_config)

.pybuild/cpython3_3.14/build/tests/test_broker.py::test_broker_with_absent_auth_plugin_filter
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_broker.py:1153: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=legacy_config_with_absent_auth_plugin_filter)

.pybuild/cpython3_3.14/build/tests/test_samples.py::test_client_publish_ssl
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_samples.py:144: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=broker_ssl_config)

.pybuild/cpython3_3.14/build/tests/test_samples.py::test_client_publish_ws
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_samples.py:194: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=broker_ws_config)

.pybuild/cpython3_3.14/build/tests/test_samples.py::test_client_subscribe
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build/tests/test_samples.py:229: 
DeprecationWarning: Loading plugins from EntryPoints is deprecated and will be 
removed in a future version. Use `plugins` section of config instead.
    broker = Broker(config=broker_std_config)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/contrib/test_db_scripts.py::test_cli_mgr_no_params[app0-user cli]
FAILED tests/contrib/test_db_scripts.py::test_cli_mgr_no_params[app1-topic cli]
FAILED tests/test_samples.py::test_client_subscribe_plugin_acl - assert 'Subs...
FAILED tests/test_samples.py::test_client_subscribe_plugin_taboo - amqtt.erro...
FAILED 
tests/test_session_monitor.py::test_clear_session_expiration[-True-None-0]
FAILED 
tests/test_session_monitor.py::test_clear_session_expiration[-False-None-0]
===== 6 failed, 507 passed, 6 deselected, 42 warnings in 187.69s (0:03:07) =====
E: pybuild pybuild:485: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.14/build; python3.14 -m pytest --no-cov -k 
" not test_external_http_server and not test_broker_sys_plugin_config and not 
test_connect_ws and not test_reconnect_ws_retain_username_password and not 
test_broker_sys_plugin_deprecated_config"
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 
3.14" --parallel=2 returned exit code 13
make: *** [debian/rules:10: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit 
status 2
--------------------------------------------------------------------------------

Reply via email to