1717from aiohttp .web import WebSocketResponse
1818from multidict import CIMultiDict , CIMultiDictProxy
1919import pytest
20+ from webrtc_models import RTCIceServer
2021from yarl import URL
2122
2223from go2rtc_client .exceptions import Go2RtcClientError
23- from go2rtc_client .ws .client import Go2RtcWsClient
24- from go2rtc_client .ws .messages import BaseMessage , WebRTCAnswer , WebRTCCandidate
24+ from go2rtc_client .ws import (
25+ Go2RtcWsClient ,
26+ ReceiveMessages ,
27+ SendMessages ,
28+ WebRTCAnswer ,
29+ WebRTCCandidate ,
30+ WebRTCOffer ,
31+ )
2532
2633
2734class TestServer :
@@ -111,7 +118,27 @@ async def test_connect_parallel(server: TestServer) -> None:
111118 assert client .connected
112119
113120
114- async def test_send (ws_client : Go2RtcWsClient , server : TestServer ) -> None :
121+ @pytest .mark .parametrize (
122+ ("message" , "expected" ),
123+ [
124+ (WebRTCCandidate ("test" ), '{"value":"test","type":"webrtc/candidate"}' ),
125+ (
126+ WebRTCOffer ("test" , []),
127+ '{"value":{"sdp":"test","ice_servers":[],"type":"offer"},"type":"webrtc"}' ,
128+ ),
129+ (
130+ WebRTCOffer ("test" , [RTCIceServer ("url" )]),
131+ '{"value":{"sdp":"test","ice_servers":[{"urls":["url"]}],"type":"offer"},"type":"webrtc"}' ,
132+ ),
133+ (
134+ WebRTCOffer ("test" , [RTCIceServer (["url1" , "url2" ])]),
135+ '{"value":{"sdp":"test","ice_servers":[{"urls":["url1","url2"]}],"type":"offer"},"type":"webrtc"}' ,
136+ ),
137+ ],
138+ )
139+ async def test_send (
140+ ws_client : Go2RtcWsClient , server : TestServer , message : SendMessages , expected : str
141+ ) -> None :
115142 """Test sending a message through the WebSocket."""
116143 received_message = None
117144
@@ -121,28 +148,31 @@ def on_message(msg: WSMessage) -> None:
121148
122149 server .on_message = on_message
123150
124- await ws_client .send (WebRTCCandidate ( "test" ) )
151+ await ws_client .send (message )
125152 await asyncio .sleep (0.1 )
126- assert received_message == '{"value":"test","type":"webrtc/candidate"}'
153+ assert received_message == expected
127154
128155
129156@pytest .mark .parametrize (
130157 ("message" , "expected" ),
131158 [
132159 ('{"value":"test","type":"webrtc/candidate"}' , WebRTCCandidate ("test" )),
133- ('{"value":"test","type":"webrtc/answer"}' , WebRTCAnswer ("test" )),
160+ (
161+ '{"value":{"type":"answer", "sdp":"test"},"type":"webrtc"}' ,
162+ WebRTCAnswer ("test" ),
163+ ),
134164 ],
135165)
136166async def test_receive (
137167 ws_client_connected : Go2RtcWsClient ,
138168 server : TestServer ,
139169 message : str ,
140- expected : BaseMessage ,
170+ expected : ReceiveMessages ,
141171) -> None :
142172 """Test receiving a message through the WebSocket."""
143173 received_message = None
144174
145- def on_message (message : BaseMessage ) -> None :
175+ def on_message (message : ReceiveMessages ) -> None :
146176 nonlocal received_message
147177 received_message = message
148178
@@ -230,7 +260,7 @@ async def test_subscribe_unsubscribe(ws_client: Go2RtcWsClient) -> None:
230260 # pylint: disable=protected-access
231261 assert ws_client ._subscribers == []
232262
233- def on_message (_ : BaseMessage ) -> None :
263+ def on_message (_ : ReceiveMessages ) -> None :
234264 pass
235265
236266 unsub = ws_client .subscribe (on_message )
@@ -249,14 +279,14 @@ async def test_subscriber_raised(
249279) -> None :
250280 """Test any exception raised by any subscriber will be handled."""
251281
252- def on_message_raise (_ : BaseMessage ) -> None :
282+ def on_message_raise (_ : ReceiveMessages ) -> None :
253283 raise ValueError
254284
255285 ws_client_connected .subscribe (on_message_raise )
256286
257287 received_message = None
258288
259- def on_message (message : BaseMessage ) -> None :
289+ def on_message (message : ReceiveMessages ) -> None :
260290 nonlocal received_message
261291 received_message = message
262292
@@ -294,6 +324,18 @@ def on_message(message: BaseMessage) -> None:
294324 WSMessage (WSMsgType .ERROR , "error" , None ),
295325 ("go2rtc_client.ws.client" , logging .ERROR , "Error received: error" ),
296326 ),
327+ (
328+ WSMessage (
329+ WSMsgType .TEXT ,
330+ '{"value":{"sdp":"test","ice_servers":[],"type":"offer"},"type":"webrtc"}' ,
331+ None ,
332+ ),
333+ (
334+ "go2rtc_client.ws.client" ,
335+ logging .ERROR ,
336+ "Received unexpected message: WebRTCOffer(sdp='test', ice_servers=[])" ,
337+ ),
338+ ),
297339 ],
298340)
299341async def test_unexpected_messages (
0 commit comments