Skip to content

Commit bcb85fd

Browse files
committed
Add support for WIZNET5K ssl
1 parent 0c77819 commit bcb85fd

File tree

4 files changed

+38
-5
lines changed

4 files changed

+38
-5
lines changed

adafruit_connection_manager.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,21 @@ def get_radio_socketpool(radio):
128128
elif class_name == "WIZNET5K":
129129
import adafruit_wiznet5k.adafruit_wiznet5k_socket as pool # pylint: disable=import-outside-toplevel
130130

131-
# Note: SSL/TLS connections are not supported by the Wiznet5k library at this time
132-
ssl_context = create_fake_ssl_context(pool, radio)
131+
# Note: At this time, SSL/TLS connections are not supported by older
132+
# versions of the Wiznet5k library or on boards withouut the ssl module
133+
# see https://docs.circuitpython.org/en/latest/shared-bindings/support_matrix.html
134+
ssl_context = None
135+
cp_version = sys.implementation[1]
136+
if pool.SOCK_STREAM == 1 and cp_version[0] >= 9 and cp_version[1] >= 1:
137+
try:
138+
import ssl # pylint: disable=import-outside-toplevel
139+
140+
ssl_context = ssl.create_default_context()
141+
except ImportError:
142+
"""SSL not on board default to fake_ssl_context"""
143+
144+
if ssl_context is None:
145+
ssl_context = create_fake_ssl_context(pool, radio)
133146

134147
else:
135148
raise AttributeError(f"Unsupported radio class: {class_name}")

tests/conftest.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import sys
88

99
import mocket
10+
import pytest
1011

1112

1213
# pylint: disable=unused-argument
@@ -27,5 +28,18 @@ def set_interface(iface):
2728
wiznet5k_module = type(sys)("adafruit_wiznet5k")
2829
wiznet5k_socket_module = type(sys)("adafruit_wiznet5k_socket")
2930
wiznet5k_socket_module.set_interface = set_interface
31+
wiznet5k_socket_module.SOCK_STREAM = 0x21
3032
sys.modules["adafruit_wiznet5k"] = wiznet5k_module
3133
sys.modules["adafruit_wiznet5k.adafruit_wiznet5k_socket"] = wiznet5k_socket_module
34+
35+
36+
@pytest.fixture(autouse=True)
37+
def reset_connection_manager(monkeypatch):
38+
monkeypatch.setattr(
39+
"adafruit_connection_manager._global_socketpool",
40+
{},
41+
)
42+
monkeypatch.setattr(
43+
"adafruit_connection_manager._global_ssl_contexts",
44+
{},
45+
)

tests/fake_ssl_context_test.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
""" FakeSLLSocket Tests """
66

7+
from unittest import mock
8+
79
import mocket
810
import pytest
911

@@ -34,7 +36,8 @@ def test_connect_https_not_supported():
3436
mock_pool.socket.return_value = mock_socket_1
3537

3638
radio = mocket.MockRadio.WIZNET5K()
37-
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
39+
with mock.patch("sys.implementation", return_value=[9, 0, 0]):
40+
ssl_context = adafruit_connection_manager.get_radio_ssl_context(radio)
3841
connection_manager = adafruit_connection_manager.ConnectionManager(mock_pool)
3942

4043
# verify a HTTPS call for a board without built in WiFi and SSL support errors

tests/get_radio_test.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
""" Get socketpool and ssl_context Tests """
66

77
import ssl
8+
from unittest import mock
89

910
import mocket
1011
import pytest
@@ -26,7 +27,8 @@ def test_get_radio_socketpool_esp32spi():
2627

2728
def test_get_radio_socketpool_wiznet5k():
2829
radio = mocket.MockRadio.WIZNET5K()
29-
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
30+
with mock.patch("sys.implementation", return_value=[9, 0, 0]):
31+
socket_pool = adafruit_connection_manager.get_radio_socketpool(radio)
3032
assert socket_pool.__name__ == "adafruit_wiznet5k_socket"
3133

3234

@@ -58,7 +60,8 @@ def test_get_radio_ssl_context_esp32spi():
5860

5961
def test_get_radio_ssl_context_wiznet5k():
6062
radio = mocket.MockRadio.WIZNET5K()
61-
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
63+
with mock.patch("sys.implementation", return_value=[9, 0, 0]):
64+
ssl_contexts = adafruit_connection_manager.get_radio_ssl_context(radio)
6265
assert isinstance(ssl_contexts, adafruit_connection_manager._FakeSSLContext)
6366

6467

0 commit comments

Comments
 (0)