1010from gql import Client , gql
1111from gql .transport .exceptions import TransportConnectionClosed , TransportServerError
1212
13- from .conftest import MS , WebSocketServerHelper
13+ from .conftest import MS , PyPy , WebSocketServerHelper
1414
1515# Marking all tests in this file with the aiohttp AND websockets marker
1616pytestmark = [pytest .mark .aiohttp , pytest .mark .websockets ]
@@ -260,7 +260,8 @@ async def test_aiohttp_websocket_graphqlws_subscription_break(
260260 count = 10
261261 subscription = gql (subscription_str .format (count = count ))
262262
263- async for result in session .subscribe (subscription ):
263+ generator = session .subscribe (subscription )
264+ async for result in generator :
264265
265266 number = result ["number" ]
266267 print (f"Number received: { number } " )
@@ -274,6 +275,9 @@ async def test_aiohttp_websocket_graphqlws_subscription_break(
274275
275276 assert count == 5
276277
278+ # Using aclose here to make it stop cleanly on pypy
279+ await generator .aclose ()
280+
277281
278282@pytest .mark .asyncio
279283@pytest .mark .parametrize ("graphqlws_server" , [server_countdown ], indirect = True )
@@ -847,30 +851,42 @@ async def test_aiohttp_websocket_graphqlws_subscription_reconnecting_session(
847851 # Then with the same session handle, we make a subscription or an execute
848852 # which will detect that the transport is closed so that the client could
849853 # try to reconnect
854+ generator = None
850855 try :
851856 if execute_instead_of_subscribe :
852857 print ("\n EXECUTION_2\n " )
853858 await session .execute (subscription )
854859 else :
855860 print ("\n SUBSCRIPTION_2\n " )
856- async for result in session .subscribe (subscription ):
861+ generator = session .subscribe (subscription )
862+ async for result in generator :
857863 pass
858- except TransportClosed :
864+ except (TransportClosed , TransportConnectionClosed ):
865+ if generator :
866+ await generator .aclose ()
859867 pass
860868
861- await asyncio .sleep (50 * MS )
869+ timeout = 50
870+
871+ if PyPy :
872+ timeout = 500
873+
874+ await asyncio .sleep (timeout * MS )
862875
863876 # And finally with the same session handle, we make a subscription
864877 # which works correctly
865878 print ("\n SUBSCRIPTION_3\n " )
866- async for result in session .subscribe (subscription ):
879+ generator = session .subscribe (subscription )
880+ async for result in generator :
867881
868882 number = result ["number" ]
869883 print (f"Number received: { number } " )
870884
871885 assert number == count
872886 count -= 1
873887
888+ await generator .aclose ()
889+
874890 assert count == - 1
875891
876892 await client .close_async ()
0 commit comments