Skip to content

Commit 96df903

Browse files
committed
Different pool, different ConnectionManager
1 parent 0c77819 commit 96df903

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

adafruit_connection_manager.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,11 @@ def get_socket(
289289
# global helpers
290290

291291

292-
_global_connection_manager = None # pylint: disable=invalid-name
292+
_global_connection_manager = {}
293293

294294

295-
def get_connection_manager(socket_pool: SocketpoolModuleType) -> None:
296-
"""Get the ConnectionManager singleton"""
297-
global _global_connection_manager # pylint: disable=global-statement
298-
if _global_connection_manager is None:
299-
_global_connection_manager = ConnectionManager(socket_pool)
300-
return _global_connection_manager
295+
def get_connection_manager(socket_pool: SocketpoolModuleType) -> ConnectionManager:
296+
"""Get the ConnectionManager singleton for the given pool"""
297+
if socket_pool not in _global_connection_manager:
298+
_global_connection_manager[socket_pool] = ConnectionManager(socket_pool)
299+
return _global_connection_manager[socket_pool]

tests/get_connection_manager_test.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,20 @@ def test_get_connection_manager():
1616
connection_manager_2 = adafruit_connection_manager.get_connection_manager(mock_pool)
1717

1818
assert connection_manager_1 == connection_manager_2
19+
20+
21+
def test_different_connection_manager_different_pool():
22+
radio_wifi = mocket.MockRadio.Radio()
23+
radio_esp = mocket.MockRadio.ESP_SPIcontrol()
24+
25+
socket_pool_wifi = adafruit_connection_manager.get_radio_socketpool(radio_wifi)
26+
socket_pool_esp = adafruit_connection_manager.get_radio_socketpool(radio_esp)
27+
28+
connection_manager_wifi = adafruit_connection_manager.get_connection_manager(
29+
socket_pool_wifi
30+
)
31+
connection_manager_esp = adafruit_connection_manager.get_connection_manager(
32+
socket_pool_esp
33+
)
34+
35+
assert connection_manager_wifi != connection_manager_esp

tests/mocket.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
MOCK_POOL_IP = "10.10.10.10"
1111
MOCK_HOST_1 = "wifitest.adafruit.com"
1212
MOCK_HOST_2 = "wifitest2.adafruit.com"
13+
MOCK_PATH_1 = "/testwifi/index.html"
14+
MOCK_ENDPOINT_1 = MOCK_HOST_1 + MOCK_PATH_1
15+
MOCK_ENDPOINT_2 = MOCK_HOST_2 + MOCK_PATH_1
16+
MOCK_RESPONSE_TEXT = (
17+
b"This is a test of Adafruit WiFi!\r\nIf you can read this, its working :)"
18+
)
19+
MOCK_RESPONSE = b"HTTP/1.0 200 OK\r\nContent-Length: 70\r\n\r\n" + MOCK_RESPONSE_TEXT
1320

1421

1522
class MocketPool: # pylint: disable=too-few-public-methods
@@ -27,22 +34,25 @@ def __init__(self, radio=None):
2734
class Mocket: # pylint: disable=too-few-public-methods
2835
"""Mock Socket"""
2936

30-
def __init__(self, response=None):
37+
def __init__(self, response=MOCK_RESPONSE):
3138
self.settimeout = mock.Mock()
3239
self.close = mock.Mock()
3340
self.connect = mock.Mock()
3441
self.send = mock.Mock(side_effect=self._send)
3542
self.readline = mock.Mock(side_effect=self._readline)
3643
self.recv = mock.Mock(side_effect=self._recv)
3744
self.recv_into = mock.Mock(side_effect=self._recv_into)
45+
# Test helpers
3846
self._response = response
3947
self._position = 0
4048
self.fail_next_send = False
49+
self.sent_data = []
4150

4251
def _send(self, data):
4352
if self.fail_next_send:
4453
self.fail_next_send = False
4554
return 0
55+
self.sent_data.append(data)
4656
return len(data)
4757

4858
def _readline(self):

0 commit comments

Comments
 (0)