11"""Tests for SSL context passthrough in C4Websocket."""
22
3- import ssl
4- from unittest .mock import AsyncMock , MagicMock , patch , call
3+ from unittest .mock import AsyncMock , MagicMock , patch
54
6- import aiohttp
75import socketio_v4
86import pytest
97
108from pyControl4 .websocket import C4Websocket
119
1210
13- def test_default_no_ssl_context ():
14- """Test that C4Websocket defaults to no ssl_context (backward compat)."""
15- ws = C4Websocket ("192.168.1.1" )
16- assert ws .ssl_context is None
17-
18-
19- def test_ssl_context_stored ():
20- """Test that a provided ssl_context is stored."""
21- ctx = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
22- ctx .check_hostname = False
23- ctx .verify_mode = ssl .CERT_NONE
24- ws = C4Websocket ("192.168.1.1" , ssl_context = ctx )
25- assert ws .ssl_context is ctx
26-
27-
2811@pytest .mark .asyncio
29- async def test_sio_connect_without_ssl_context ():
30- """Test that sio_connect uses ssl_verify=False when no ssl_context."""
12+ async def test_sio_connect_without_session ():
13+ """Test that sio_connect uses ssl_verify=False without http_session when
14+ no session is provided."""
3115 ws = C4Websocket ("192.168.1.1" )
3216 with patch .object (
3317 socketio_v4 .AsyncClient , "__init__" , return_value = None
@@ -41,29 +25,16 @@ async def test_sio_connect_without_ssl_context():
4125
4226
4327@pytest .mark .asyncio
44- async def test_sio_connect_with_ssl_context ():
45- """Test that sio_connect uses ssl_verify=False and http_session when
46- ssl_context is provided."""
47- ctx = ssl .SSLContext (ssl .PROTOCOL_TLS_CLIENT )
48- ctx .check_hostname = False
49- ctx .verify_mode = ssl .CERT_NONE
50- ws = C4Websocket ("192.168.1.1" , ssl_context = ctx )
28+ async def test_sio_connect_with_session ():
29+ """Test that sio_connect passes the caller's session as http_session."""
30+ mock_session = MagicMock ()
31+ ws = C4Websocket ("192.168.1.1" , session_no_verify_ssl = mock_session )
5132 with patch .object (
5233 socketio_v4 .AsyncClient , "__init__" , return_value = None
5334 ) as mock_init , patch .object (
5435 socketio_v4 .AsyncClient , "register_namespace"
5536 ), patch .object (
5637 socketio_v4 .AsyncClient , "connect" , new_callable = AsyncMock
57- ), patch .object (
58- aiohttp , "TCPConnector"
59- ) as mock_connector_cls , patch .object (
60- aiohttp , "ClientSession"
61- ) as mock_session_cls :
62- mock_conn = MagicMock ()
63- mock_connector_cls .return_value = mock_conn
64- mock_sess = MagicMock ()
65- mock_session_cls .return_value = mock_sess
38+ ):
6639 await ws .sio_connect ("test-token" )
67- mock_connector_cls .assert_called_once_with (ssl = ctx )
68- mock_session_cls .assert_called_once_with (connector = mock_conn )
69- mock_init .assert_called_once_with (ssl_verify = False , http_session = mock_sess )
40+ mock_init .assert_called_once_with (ssl_verify = False , http_session = mock_session )
0 commit comments