55
66import aiohttp
77from aiohttp import hdrs , web
8+ from aiohttp .client_ws import ClientWSTimeout
89
910
1011@pytest .fixture
@@ -340,7 +341,7 @@ async def handler(request):
340341 assert resp .closed
341342
342343
343- async def test_close_timeout (aiohttp_client ) -> None :
344+ async def test_close_timeout_sock_close_read (aiohttp_client ) -> None :
344345
345346 async def handler (request ):
346347 ws = web .WebSocketResponse ()
@@ -353,7 +354,39 @@ async def handler(request):
353354 app = web .Application ()
354355 app .router .add_route ('GET' , '/' , handler )
355356 client = await aiohttp_client (app )
356- resp = await client .ws_connect ('/' , timeout = 0.2 , autoclose = False )
357+ timeout = ClientWSTimeout (ws_close = 0.2 )
358+ resp = await client .ws_connect ('/' , timeout = timeout , autoclose = False )
359+
360+ await resp .send_bytes (b'ask' )
361+
362+ msg = await resp .receive ()
363+ assert msg .data == 'test'
364+ assert msg .type == aiohttp .WSMsgType .TEXT
365+
366+ msg = await resp .close ()
367+ assert resp .closed
368+ assert isinstance (resp .exception (), asyncio .TimeoutError )
369+
370+
371+ async def test_close_timeout_deprecated (aiohttp_client ) -> None :
372+
373+ async def handler (request ):
374+ ws = web .WebSocketResponse ()
375+ await ws .prepare (request )
376+ await ws .receive_bytes ()
377+ await ws .send_str ('test' )
378+ await asyncio .sleep (1 )
379+ return ws
380+
381+ app = web .Application ()
382+ app .router .add_route ('GET' , '/' , handler )
383+ client = await aiohttp_client (app )
384+ with pytest .warns (DeprecationWarning ,
385+ match = "parameter 'timeout' of type 'float' "
386+ "is deprecated, please use "
387+ r"'timeout=ClientWSTimeout\(ws_close=...\)'"
388+ ):
389+ resp = await client .ws_connect ('/' , timeout = 0.2 , autoclose = False )
357390
358391 await resp .send_bytes (b'ask' )
359392
@@ -485,7 +518,7 @@ async def handler(request):
485518 await resp .close ()
486519
487520
488- async def test_receive_timeout (aiohttp_client ) -> None :
521+ async def test_receive_timeout_sock_read (aiohttp_client ) -> None :
489522
490523 async def handler (request ):
491524 ws = web .WebSocketResponse ()
@@ -498,10 +531,38 @@ async def handler(request):
498531 app .router .add_route ('GET' , '/' , handler )
499532
500533 client = await aiohttp_client (app )
501- resp = await client .ws_connect ('/' , receive_timeout = 0.1 )
534+ receive_timeout = ClientWSTimeout (ws_receive = 0.1 )
535+ resp = await client .ws_connect ('/' , timeout = receive_timeout )
502536
503537 with pytest .raises (asyncio .TimeoutError ):
504- await resp .receive (0.05 )
538+ await resp .receive (timeout = 0.05 )
539+
540+ await resp .close ()
541+
542+
543+ async def test_receive_timeout_deprecation (aiohttp_client ) -> None :
544+
545+ async def handler (request ):
546+ ws = web .WebSocketResponse ()
547+ await ws .prepare (request )
548+ await ws .receive ()
549+ await ws .close ()
550+ return ws
551+
552+ app = web .Application ()
553+ app .router .add_route ('GET' , '/' , handler )
554+
555+ client = await aiohttp_client (app )
556+ with pytest .warns (
557+ DeprecationWarning ,
558+ match = "float parameter 'receive_timeout' "
559+ "is deprecated, please use parameter "
560+ r"'timeout=ClientWSTimeout\(ws_receive=...\)'"
561+ ):
562+ resp = await client .ws_connect ('/' , receive_timeout = 0.1 )
563+
564+ with pytest .raises (asyncio .TimeoutError ):
565+ await resp .receive (timeout = 0.05 )
505566
506567 await resp .close ()
507568
0 commit comments