fixes Yakifo/amqtt#67 : malformed uri or incorrect scheme should raise a ConnectError (not a ClientError)

pull/201/head
Andrew Mirsky 2025-06-08 10:29:14 -04:00
rodzic 58d431f2f5
commit 52b69ee068
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: A98E67635CDF2C39
2 zmienionych plików z 18 dodań i 7 usunięć

Wyświetl plik

@ -470,6 +470,7 @@ class MQTTClient:
reader: StreamReaderAdapter | WebSocketsReader | None = None reader: StreamReaderAdapter | WebSocketsReader | None = None
writer: StreamWriterAdapter | WebSocketsWriter | None = None writer: StreamWriterAdapter | WebSocketsWriter | None = None
self._connected_state.clear() self._connected_state.clear()
# Open connection # Open connection
if scheme in ("mqtt", "mqtts"): if scheme in ("mqtt", "mqtts"):
conn_reader, conn_writer = await asyncio.open_connection( conn_reader, conn_writer = await asyncio.open_connection(
@ -489,11 +490,11 @@ class MQTTClient:
) )
reader = WebSocketsReader(websocket) reader = WebSocketsReader(websocket)
writer = WebSocketsWriter(websocket) writer = WebSocketsWriter(websocket)
elif not self.session.broker_uri:
if reader is None or writer is None: msg = "missing broker uri"
self.session.transitions.disconnect() raise ClientError(msg)
self.logger.warning("reader or writer not initialized") else:
msg = "reader or writer not initialized" msg = f"incorrect scheme defined in uri: '{scheme!r}'"
raise ClientError(msg) raise ClientError(msg)
# Start MQTT protocol # Start MQTT protocol

Wyświetl plik

@ -4,7 +4,7 @@ import logging
import pytest import pytest
from amqtt.client import MQTTClient from amqtt.client import MQTTClient
from amqtt.errors import ConnectError from amqtt.errors import ClientError, ConnectError
from amqtt.mqtt.constants import QOS_0, QOS_1, QOS_2 from amqtt.mqtt.constants import QOS_0, QOS_1, QOS_2
formatter = "[%(asctime)s] %(name)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s" formatter = "[%(asctime)s] %(name)s {%(filename)s:%(lineno)d} %(levelname)s - %(message)s"
@ -301,4 +301,14 @@ async def test_client_publish_will_with_retain(broker_fixture, client_config):
async def test_connect_broken_uri(): async def test_connect_broken_uri():
config = {"auto_reconnect": False} config = {"auto_reconnect": False}
client = MQTTClient(config=config) client = MQTTClient(config=config)
await client.connect('"mqtt://someplace') with pytest.raises(ClientError):
await client.connect('"mqtt://someplace')
@pytest.mark.asyncio
async def test_connect_incorrect_scheme():
config = {"auto_reconnect": False}
client = MQTTClient(config=config)
with pytest.raises(ClientError):
await client.connect('"mq://someplace')