Skip to content

Commit fc33375

Browse files
authored
Merge pull request #8 from justmobilize/different-pool-different-connection-manager
Different pool, different ConnectionManager
2 parents 513cb12 + aeed34c commit fc33375

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

adafruit_connection_manager.py

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

308308

309-
_global_connection_manager = None # pylint: disable=invalid-name
309+
_global_connection_manager = {}
310310

311311

312-
def get_connection_manager(socket_pool: SocketpoolModuleType) -> None:
313-
"""Get the ConnectionManager singleton"""
314-
global _global_connection_manager # pylint: disable=global-statement
315-
if _global_connection_manager is None:
316-
_global_connection_manager = ConnectionManager(socket_pool)
317-
return _global_connection_manager
312+
def get_connection_manager(socket_pool: SocketpoolModuleType) -> ConnectionManager:
313+
"""Get the ConnectionManager singleton for the given pool"""
314+
if socket_pool not in _global_connection_manager:
315+
_global_connection_manager[socket_pool] = ConnectionManager(socket_pool)
316+
return _global_connection_manager[socket_pool]

tests/get_connection_manager_test.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,22 @@ 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( # pylint: disable=unused-argument
22+
circuitpython_socketpool_module, adafruit_esp32spi_socket_module
23+
):
24+
radio_wifi = mocket.MockRadio.Radio()
25+
radio_esp = mocket.MockRadio.ESP_SPIcontrol()
26+
27+
socket_pool_wifi = adafruit_connection_manager.get_radio_socketpool(radio_wifi)
28+
socket_pool_esp = adafruit_connection_manager.get_radio_socketpool(radio_esp)
29+
30+
connection_manager_wifi = adafruit_connection_manager.get_connection_manager(
31+
socket_pool_wifi
32+
)
33+
connection_manager_esp = adafruit_connection_manager.get_connection_manager(
34+
socket_pool_esp
35+
)
36+
37+
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)