Skip to content

Commit

Permalink
Merge pull request #8 from justmobilize/different-pool-different-conn…
Browse files Browse the repository at this point in the history
…ection-manager

Different pool, different ConnectionManager
  • Loading branch information
dhalbert authored Apr 25, 2024
2 parents 513cb12 + aeed34c commit fc33375
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 8 deletions.
13 changes: 6 additions & 7 deletions adafruit_connection_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,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]
19 changes: 19 additions & 0 deletions tests/get_connection_manager_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,22 @@ 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( # pylint: disable=unused-argument
circuitpython_socketpool_module, adafruit_esp32spi_socket_module
):
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
12 changes: 11 additions & 1 deletion tests/mocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -27,22 +34,25 @@ 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()
self.send = mock.Mock(side_effect=self._send)
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):
Expand Down

0 comments on commit fc33375

Please sign in to comment.