Only setting session username/password if it is not already set. This is to prevent failures when the broker is reconnecting without username/password

pull/8/head
Thinh Nguyen 2018-10-29 13:55:09 +11:00
rodzic 7eb86d9eee
commit 5a241d7739
2 zmienionych plików z 27 dodań i 2 usunięć

Wyświetl plik

@ -349,8 +349,8 @@ class MQTTClient:
uri_attributes = urlparse(self.session.broker_uri)
scheme = uri_attributes.scheme
secure = True if scheme in ('mqtts', 'wss') else False
self.session.username = uri_attributes.username
self.session.password = uri_attributes.password
self.session.username = self.session.username if self.session.username else uri_attributes.username
self.session.password = self.session.password if self.session.password else uri_attributes.password
self.session.remote_address = uri_attributes.hostname
self.session.remote_port = uri_attributes.port
if scheme in ('mqtt', 'mqtts') and not self.session.remote_port:

Wyświetl plik

@ -111,6 +111,31 @@ class MQTTClientTest(unittest.TestCase):
except Exception as ae:
future.set_exception(ae)
future = asyncio.Future(loop=self.loop)
self.loop.run_until_complete(test_coro())
if future.exception():
raise future.exception()
raise future.exception()
def test_reconnect_ws_retain_username_password(self):
@asyncio.coroutine
def test_coro():
try:
broker = Broker(broker_config, plugin_namespace="hbmqtt.test.plugins")
yield from broker.start()
client = MQTTClient()
yield from client.connect('ws://fred:password@127.0.0.1:8080/')
self.assertIsNotNone(client.session)
yield from client.disconnect()
yield from client.reconnect()
self.assertIsNotNone(client.session.username)
self.assertIsNotNone(client.session.password)
yield from broker.shutdown()
future.set_result(True)
except Exception as ae:
future.set_exception(ae)
future = asyncio.Future(loop=self.loop)
self.loop.run_until_complete(test_coro())
if future.exception():