Skip to content

Commit 9322a01

Browse files
authored
Merge pull request #12 from justmobilize/test-updates
Update how we test modules
2 parents 0c77819 + e76b13c commit 9322a01

File tree

4 files changed

+103
-34
lines changed

4 files changed

+103
-34
lines changed

tests/conftest.py

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,55 @@
77
import sys
88

99
import mocket
10+
import pytest
1011

1112

1213
# pylint: disable=unused-argument
1314
def set_interface(iface):
1415
"""Helper to set the global internet interface"""
1516

1617

17-
socketpool_module = type(sys)("socketpool")
18-
socketpool_module.SocketPool = mocket.MocketPool
19-
sys.modules["socketpool"] = socketpool_module
20-
21-
esp32spi_module = type(sys)("adafruit_esp32spi")
22-
esp32spi_socket_module = type(sys)("adafruit_esp32spi_socket")
23-
esp32spi_socket_module.set_interface = set_interface
24-
sys.modules["adafruit_esp32spi"] = esp32spi_module
25-
sys.modules["adafruit_esp32spi.adafruit_esp32spi_socket"] = esp32spi_socket_module
26-
27-
wiznet5k_module = type(sys)("adafruit_wiznet5k")
28-
wiznet5k_socket_module = type(sys)("adafruit_wiznet5k_socket")
29-
wiznet5k_socket_module.set_interface = set_interface
30-
sys.modules["adafruit_wiznet5k"] = wiznet5k_module
31-
sys.modules["adafruit_wiznet5k.adafruit_wiznet5k_socket"] = wiznet5k_socket_module
18+
@pytest.fixture
19+
def circuitpython_socketpool_module():
20+
socketpool_module = type(sys)("socketpool")
21+
socketpool_module.SocketPool = mocket.MocketPool
22+
sys.modules["socketpool"] = socketpool_module
23+
yield
24+
del sys.modules["socketpool"]
25+
26+
27+
@pytest.fixture
28+
def adafruit_esp32spi_socket_module():
29+
esp32spi_module = type(sys)("adafruit_esp32spi")
30+
esp32spi_socket_module = type(sys)("adafruit_esp32spi_socket")
31+
esp32spi_socket_module.set_interface = set_interface
32+
sys.modules["adafruit_esp32spi"] = esp32spi_module
33+
sys.modules["adafruit_esp32spi.adafruit_esp32spi_socket"] = esp32spi_socket_module
34+
yield
35+
del sys.modules["adafruit_esp32spi"]
36+
del sys.modules["adafruit_esp32spi.adafruit_esp32spi_socket"]
37+
38+
39+
@pytest.fixture
40+
def adafruit_wiznet5k_socket_module():
41+
wiznet5k_module = type(sys)("adafruit_wiznet5k")
42+
wiznet5k_socket_module = type(sys)("adafruit_wiznet5k_socket")
43+
wiznet5k_socket_module.set_interface = set_interface
44+
wiznet5k_socket_module.SOCK_STREAM = 0x21
45+
sys.modules["adafruit_wiznet5k"] = wiznet5k_module
46+
sys.modules["adafruit_wiznet5k.adafruit_wiznet5k_socket"] = wiznet5k_socket_module
47+
yield
48+
del sys.modules["adafruit_wiznet5k"]
49+
del sys.modules["adafruit_wiznet5k.adafruit_wiznet5k_socket"]
50+
51+
52+
@pytest.fixture(autouse=True)
53+
def reset_connection_manager(monkeypatch):
54+
monkeypatch.setattr(
55+
"adafruit_connection_manager._global_socketpool",
56+
{},
57+
)
58+
monkeypatch.setattr(
59+
"adafruit_connection_manager._global_ssl_contexts",
60+
{},
61+
)

tests/get_radio_test.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,36 @@
55
""" Get socketpool and ssl_context Tests """
66

77
import ssl
8+
from unittest import mock
89

910
import mocket
1011
import pytest
1112

1213
import adafruit_connection_manager
1314

1415

15-
def test_get_radio_socketpool_wifi():
16+
def test_get_radio_socketpool_wifi( # pylint: disable=unused-argument
17+
circuitpython_socketpool_module,
18+
):
1619
radio = mocket.MockRadio.Radio()
1720
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
1821
assert isinstance(socket_pool, mocket.MocketPool)
1922

2023

21-
def test_get_radio_socketpool_esp32spi():
24+
def test_get_radio_socketpool_esp32spi( # pylint: disable=unused-argument
25+
adafruit_esp32spi_socket_module,
26+
):
2227
radio = mocket.MockRadio.ESP_SPIcontrol()
2328
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
2429
assert socket_pool.__name__ == "adafruit_esp32spi_socket"
2530

2631

27-
def test_get_radio_socketpool_wiznet5k():
32+
def test_get_radio_socketpool_wiznet5k( # pylint: disable=unused-argument
33+
adafruit_wiznet5k_socket_module,
34+
):
2835
radio = mocket.MockRadio.WIZNET5K()
29-
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
36+
with mock.patch("sys.implementation", return_value=[9, 0, 0]):
37+
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
3038
assert socket_pool.__name__ == "adafruit_wiznet5k_socket"
3139

3240

@@ -37,28 +45,37 @@ def test_get_radio_socketpool_unsupported():
3745
assert "Unsupported radio class" in str(context)
3846

3947

40-
def test_get_radio_socketpool_returns_same_one():
48+
def test_get_radio_socketpool_returns_same_one( # pylint: disable=unused-argument
49+
circuitpython_socketpool_module,
50+
):
4151
radio = mocket.MockRadio.Radio()
4252
socket_pool_1 = adafruit_connection_manager.get_radio_socketpool(radio)
4353
socket_pool_2 = adafruit_connection_manager.get_radio_socketpool(radio)
4454
assert socket_pool_1 == socket_pool_2
4555

4656

47-
def test_get_radio_ssl_context_wifi():
57+
def test_get_radio_ssl_context_wifi( # pylint: disable=unused-argument
58+
circuitpython_socketpool_module,
59+
):
4860
radio = mocket.MockRadio.Radio()
4961
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
5062
assert isinstance(ssl_contexts, ssl.SSLContext)
5163

5264

53-
def test_get_radio_ssl_context_esp32spi():
65+
def test_get_radio_ssl_context_esp32spi( # pylint: disable=unused-argument
66+
adafruit_esp32spi_socket_module,
67+
):
5468
radio = mocket.MockRadio.ESP_SPIcontrol()
5569
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
5670
assert isinstance(ssl_contexts, adafruit_connection_manager._FakeSSLContext)
5771

5872

59-
def test_get_radio_ssl_context_wiznet5k():
73+
def test_get_radio_ssl_context_wiznet5k( # pylint: disable=unused-argument
74+
adafruit_wiznet5k_socket_module,
75+
):
6076
radio = mocket.MockRadio.WIZNET5K()
61-
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
77+
with mock.patch("sys.implementation", return_value=[9, 0, 0]):
78+
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
6279
assert isinstance(ssl_contexts, adafruit_connection_manager._FakeSSLContext)
6380

6481

@@ -69,7 +86,9 @@ def test_get_radio_ssl_context_unsupported():
6986
assert "Unsupported radio class" in str(context)
7087

7188

72-
def test_get_radio_ssl_context_returns_same_one():
89+
def test_get_radio_ssl_context_returns_same_one( # pylint: disable=unused-argument
90+
circuitpython_socketpool_module,
91+
):
7392
radio = mocket.MockRadio.Radio()
7493
ssl_contexts_1 = adafruit_connection_manager.get_radio_ssl_context(radio)
7594
ssl_contexts_2 = adafruit_connection_manager.get_radio_ssl_context(radio)

tests/get_socket_test.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,9 @@ def test_get_socket_runtime_error_ties_again_only_once():
217217
free_sockets_mock.assert_called_once()
218218

219219

220-
def test_fake_ssl_context_connect():
220+
def test_fake_ssl_context_connect( # pylint: disable=unused-argument
221+
adafruit_esp32spi_socket_module,
222+
):
221223
mock_pool = mocket.MocketPool()
222224
mock_socket_1 = mocket.Mocket()
223225
mock_pool.socket.return_value = mock_socket_1
@@ -234,7 +236,9 @@ def test_fake_ssl_context_connect():
234236
socket._socket.connect.assert_called_once()
235237

236238

237-
def test_fake_ssl_context_connect_error():
239+
def test_fake_ssl_context_connect_error( # pylint: disable=unused-argument
240+
adafruit_esp32spi_socket_module,
241+
):
238242
mock_pool = mocket.MocketPool()
239243
mock_socket_1 = mocket.Mocket()
240244
mock_pool.socket.return_value = mock_socket_1

tests/fake_ssl_context_test.py renamed to tests/ssl_context_test.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,26 @@
22
#
33
# SPDX-License-Identifier: Unlicense
44

5-
""" FakeSLLSocket Tests """
5+
""" SLL Context Tests """
6+
7+
import ssl
68

79
import mocket
810
import pytest
911

1012
import adafruit_connection_manager
1113

1214

13-
def test_connect_https():
15+
def test_connect_esp32spi_https( # pylint: disable=unused-argument
16+
adafruit_esp32spi_socket_module,
17+
):
1418
mock_pool = mocket.MocketPool()
1519
mock_socket_1 = mocket.Mocket()
16-
mock_pool.socket.return_value = mock_socket_1
20+
mock_socket_2 = mocket.Mocket()
21+
mock_pool.socket.side_effect = [
22+
mock_socket_1,
23+
mock_socket_2,
24+
]
1725

1826
radio = mocket.MockRadio.ESP_SPIcontrol()
1927
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
@@ -24,15 +32,23 @@ def test_connect_https():
2432
mocket.MOCK_HOST_1, 443, "https:", ssl_context=ssl_context
2533
)
2634
assert socket != mock_socket_1
35+
assert socket != mock_socket_2
2736
assert socket._socket == mock_socket_1
2837
assert isinstance(socket, adafruit_connection_manager._FakeSSLSocket)
2938

3039

31-
def test_connect_https_not_supported():
32-
mock_pool = mocket.MocketPool()
33-
mock_socket_1 = mocket.Mocket()
34-
mock_pool.socket.return_value = mock_socket_1
40+
def test_connect_wifi_https( # pylint: disable=unused-argument
41+
circuitpython_socketpool_module,
42+
):
43+
radio = mocket.MockRadio.Radio()
44+
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
45+
assert isinstance(ssl_context, ssl.SSLContext)
46+
3547

48+
def test_connect_wiznet5k_https_not_supported( # pylint: disable=unused-argument
49+
adafruit_wiznet5k_socket_module,
50+
):
51+
mock_pool = mocket.MocketPool()
3652
radio = mocket.MockRadio.WIZNET5K()
3753
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
3854
connection_manager = adafruit_connection_manager.ConnectionManager(mock_pool)

0 commit comments

Comments
 (0)