From 96df903d22324d4d9404df45167fc688c5ec40f7 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Sat, 20 Apr 2024 13:21:34 -0700 Subject: [PATCH 1/2] Different pool, different ConnectionManager --- adafruit_connection_manager.py | 13 ++++++------- tests/get_connection_manager_test.py | 17 +++++++++++++++++ tests/mocket.py | 12 +++++++++++- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/adafruit_connection_manager.py b/adafruit_connection_manager.py index cc70f3f..b924b1f 100644 --- a/adafruit_connection_manager.py +++ b/adafruit_connection_manager.py @@ -289,12 +289,11 @@ def get_socket( # global helpers -_global_connection_manager = None # pylint: disable=invalid-name +_global_connection_manager = {} -def get_connection_manager(socket_pool: SocketpoolModuleType) -> None: - """Get the ConnectionManager singleton""" - global _global_connection_manager # pylint: disable=global-statement - if _global_connection_manager is None: - _global_connection_manager = ConnectionManager(socket_pool) - return _global_connection_manager +def get_connection_manager(socket_pool: SocketpoolModuleType) -> ConnectionManager: + """Get the ConnectionManager singleton for the given pool""" + if socket_pool not in _global_connection_manager: + _global_connection_manager[socket_pool] = ConnectionManager(socket_pool) + return _global_connection_manager[socket_pool] diff --git a/tests/get_connection_manager_test.py b/tests/get_connection_manager_test.py index 0efdbfd..ce09dcb 100644 --- a/tests/get_connection_manager_test.py +++ b/tests/get_connection_manager_test.py @@ -16,3 +16,20 @@ def test_get_connection_manager(): connection_manager_2 = adafruit_connection_manager.get_connection_manager(mock_pool) assert connection_manager_1 == connection_manager_2 + + +def test_different_connection_manager_different_pool(): + radio_wifi = mocket.MockRadio.Radio() + radio_esp = mocket.MockRadio.ESP_SPIcontrol() + + socket_pool_wifi = adafruit_connection_manager.get_radio_socketpool(radio_wifi) + socket_pool_esp = adafruit_connection_manager.get_radio_socketpool(radio_esp) + + connection_manager_wifi = adafruit_connection_manager.get_connection_manager( + socket_pool_wifi + ) + connection_manager_esp = adafruit_connection_manager.get_connection_manager( + socket_pool_esp + ) + + assert connection_manager_wifi != connection_manager_esp diff --git a/tests/mocket.py b/tests/mocket.py index 6740a1a..3155231 100644 --- a/tests/mocket.py +++ b/tests/mocket.py @@ -10,6 +10,13 @@ MOCK_POOL_IP = "10.10.10.10" MOCK_HOST_1 = "wifitest.adafruit.com" MOCK_HOST_2 = "wifitest2.adafruit.com" +MOCK_PATH_1 = "/testwifi/index.html" +MOCK_ENDPOINT_1 = MOCK_HOST_1 + MOCK_PATH_1 +MOCK_ENDPOINT_2 = MOCK_HOST_2 + MOCK_PATH_1 +MOCK_RESPONSE_TEXT = ( + b"This is a test of Adafruit WiFi!\r\nIf you can read this, its working :)" +) +MOCK_RESPONSE = b"HTTP/1.0 200 OK\r\nContent-Length: 70\r\n\r\n" + MOCK_RESPONSE_TEXT class MocketPool: # pylint: disable=too-few-public-methods @@ -27,7 +34,7 @@ def __init__(self, radio=None): class Mocket: # pylint: disable=too-few-public-methods """Mock Socket""" - def __init__(self, response=None): + def __init__(self, response=MOCK_RESPONSE): self.settimeout = mock.Mock() self.close = mock.Mock() self.connect = mock.Mock() @@ -35,14 +42,17 @@ def __init__(self, response=None): self.readline = mock.Mock(side_effect=self._readline) self.recv = mock.Mock(side_effect=self._recv) self.recv_into = mock.Mock(side_effect=self._recv_into) + # Test helpers self._response = response self._position = 0 self.fail_next_send = False + self.sent_data = [] def _send(self, data): if self.fail_next_send: self.fail_next_send = False return 0 + self.sent_data.append(data) return len(data) def _readline(self): From aeed34c5c21eac8aa3b2ec987c01b91adcd24669 Mon Sep 17 00:00:00 2001 From: Justin Myers Date: Wed, 24 Apr 2024 21:31:14 -0700 Subject: [PATCH 2/2] Merge fixes --- tests/get_connection_manager_test.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/get_connection_manager_test.py b/tests/get_connection_manager_test.py index ce09dcb..324d032 100644 --- a/tests/get_connection_manager_test.py +++ b/tests/get_connection_manager_test.py @@ -18,7 +18,9 @@ def test_get_connection_manager(): assert connection_manager_1 == connection_manager_2 -def test_different_connection_manager_different_pool(): +def test_different_connection_manager_different_pool( # pylint: disable=unused-argument + circuitpython_socketpool_module, adafruit_esp32spi_socket_module +): radio_wifi = mocket.MockRadio.Radio() radio_esp = mocket.MockRadio.ESP_SPIcontrol()