From 0297a4dc65144b3e54a9b70b04ccce0d6c774f4c Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Fri, 25 Aug 2023 22:25:39 +0200 Subject: [PATCH 1/4] check is_connected in loop() --- adafruit_minimqtt/adafruit_minimqtt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_minimqtt/adafruit_minimqtt.py b/adafruit_minimqtt/adafruit_minimqtt.py index 6b974dd..7e4f182 100644 --- a/adafruit_minimqtt/adafruit_minimqtt.py +++ b/adafruit_minimqtt/adafruit_minimqtt.py @@ -986,7 +986,7 @@ def loop(self, timeout: float = 0) -> Optional[list[int]]: :param float timeout: return after this timeout, in seconds. """ - + self._connected() self.logger.debug(f"waiting for messages for {timeout} seconds") if self._timestamp == 0: self._timestamp = time.monotonic() From 324940d748dd4b4b0b460ab27800e2af1aa117db Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Fri, 25 Aug 2023 22:37:58 +0200 Subject: [PATCH 2/4] fix test --- tests/test_loop.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_loop.py b/tests/test_loop.py index 80ffc22..e5b0748 100644 --- a/tests/test_loop.py +++ b/tests/test_loop.py @@ -44,8 +44,11 @@ def test_loop_basic(self) -> None: ssl_context=ssl.create_default_context(), ) - with patch.object(mqtt_client, "_wait_for_msg") as mock_method: - mock_method.side_effect = self.fake_wait_for_msg + with patch.object(mqtt_client, "_wait_for_msg") as wait_for_msg_mock, \ + patch.object(mqtt_client, "is_connected") as is_connected_mock: + + wait_for_msg_mock.side_effect = self.fake_wait_for_msg + is_connected_mock.side_effect = lambda: True time_before = time.monotonic() timeout = random.randint(3, 8) @@ -53,7 +56,7 @@ def test_loop_basic(self) -> None: time_after = time.monotonic() assert time_after - time_before >= timeout - mock_method.assert_called() + wait_for_msg_mock.assert_called() # Check the return value. assert rcs is not None From 52a04c3b1180327a067163b7211deb3aa959791c Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Fri, 25 Aug 2023 22:49:48 +0200 Subject: [PATCH 3/4] add test --- tests/test_loop.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/tests/test_loop.py b/tests/test_loop.py index e5b0748..6014c01 100644 --- a/tests/test_loop.py +++ b/tests/test_loop.py @@ -44,8 +44,11 @@ def test_loop_basic(self) -> None: ssl_context=ssl.create_default_context(), ) - with patch.object(mqtt_client, "_wait_for_msg") as wait_for_msg_mock, \ - patch.object(mqtt_client, "is_connected") as is_connected_mock: + with patch.object( + mqtt_client, "_wait_for_msg" + ) as wait_for_msg_mock, patch.object( + mqtt_client, "is_connected" + ) as is_connected_mock: wait_for_msg_mock.side_effect = self.fake_wait_for_msg is_connected_mock.side_effect = lambda: True @@ -66,6 +69,22 @@ def test_loop_basic(self) -> None: assert ret_code == expected_rc expected_rc += 1 + def test_loop_is_connected(self): + """ + loop() should throw MMQTTException if not connected + """ + mqtt_client = MQTT.MQTT( + broker="127.0.0.1", + port=1883, + socket_pool=socket, + ssl_context=ssl.create_default_context(), + ) + + with self.assertRaises(MQTT.MMQTTException) as context: + mqtt_client.loop(timeout=1) + + assert "not connected" in str(context.exception) + if __name__ == "__main__": main() From 6b345de31ef37bdb0d297b856ece0e890acab9c4 Mon Sep 17 00:00:00 2001 From: Vladimir Kotal Date: Fri, 25 Aug 2023 22:58:50 +0200 Subject: [PATCH 4/4] apply black --- tests/test_loop.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_loop.py b/tests/test_loop.py index 6014c01..6a762fd 100644 --- a/tests/test_loop.py +++ b/tests/test_loop.py @@ -49,7 +49,6 @@ def test_loop_basic(self) -> None: ) as wait_for_msg_mock, patch.object( mqtt_client, "is_connected" ) as is_connected_mock: - wait_for_msg_mock.side_effect = self.fake_wait_for_msg is_connected_mock.side_effect = lambda: True