@@ -138,23 +138,23 @@ async def test_parsing_in_streams(
138138 (delete , 'delete' ),
139139])
140140async def test_direct_timeout_in_requests (
141- resp_mocker , aresponses , hostname , fn , method , settings , logger , timer ):
141+ resp_mocker , aresponses , hostname , fn , method , settings , logger , looptime ):
142142
143143 async def serve_slowly ():
144- await asyncio .sleep (1.0 )
144+ await asyncio .sleep (10 )
145145 return aiohttp .web .json_response ({})
146146
147147 mock = resp_mocker (side_effect = serve_slowly )
148148 aresponses .add (hostname , '/url' , method , mock )
149149
150- with timer , pytest .raises (asyncio .TimeoutError ):
151- timeout = aiohttp .ClientTimeout (total = 0.1 )
150+ with pytest .raises (asyncio .TimeoutError ):
151+ timeout = aiohttp .ClientTimeout (total = 1.23 )
152152 # aiohttp raises an asyncio.TimeoutError which is automatically retried.
153153 # To reduce the test duration we disable retries for this test.
154154 settings .networking .error_backoffs = None
155155 await fn ('/url' , timeout = timeout , settings = settings , logger = logger )
156156
157- assert 0.1 < timer . seconds < 0.2
157+ assert looptime == 1.23
158158
159159 # Let the server request finish and release all resources (tasks).
160160 # TODO: Remove when fixed: https://github.com/aio-libs/aiohttp/issues/7551
@@ -168,23 +168,23 @@ async def serve_slowly():
168168 (delete , 'delete' ),
169169])
170170async def test_settings_timeout_in_requests (
171- resp_mocker , aresponses , hostname , fn , method , settings , logger , timer ):
171+ resp_mocker , aresponses , hostname , fn , method , settings , logger , looptime ):
172172
173173 async def serve_slowly ():
174- await asyncio .sleep (1.0 )
174+ await asyncio .sleep (10 )
175175 return aiohttp .web .json_response ({})
176176
177177 mock = resp_mocker (side_effect = serve_slowly )
178178 aresponses .add (hostname , '/url' , method , mock )
179179
180- with timer , pytest .raises (asyncio .TimeoutError ):
181- settings .networking .request_timeout = 0.1
180+ with pytest .raises (asyncio .TimeoutError ):
181+ settings .networking .request_timeout = 1.23
182182 # aiohttp raises an asyncio.TimeoutError which is automatically retried.
183183 # To reduce the test duration we disable retries for this test.
184184 settings .networking .error_backoffs = None
185185 await fn ('/url' , settings = settings , logger = logger )
186186
187- assert 0.1 < timer . seconds < 0.2
187+ assert looptime == 1.23
188188
189189 # Let the server request finish and release all resources (tasks).
190190 # TODO: Remove when fixed: https://github.com/aio-libs/aiohttp/issues/7551
@@ -193,24 +193,24 @@ async def serve_slowly():
193193
194194@pytest .mark .parametrize ('method' , ['get' ]) # the only supported method at the moment
195195async def test_direct_timeout_in_streams (
196- resp_mocker , aresponses , hostname , method , settings , logger , timer ):
196+ resp_mocker , aresponses , hostname , method , settings , logger , looptime ):
197197
198198 async def serve_slowly ():
199- await asyncio .sleep (1.0 )
199+ await asyncio .sleep (10 )
200200 return "{}"
201201
202202 mock = resp_mocker (side_effect = serve_slowly )
203203 aresponses .add (hostname , '/url' , method , mock )
204204
205- with timer , pytest .raises (asyncio .TimeoutError ):
206- timeout = aiohttp .ClientTimeout (total = 0.1 )
205+ with pytest .raises (asyncio .TimeoutError ):
206+ timeout = aiohttp .ClientTimeout (total = 1.23 )
207207 # aiohttp raises an asyncio.TimeoutError which is automatically retried.
208208 # To reduce the test duration we disable retries for this test.
209209 settings .networking .error_backoffs = None
210210 async for _ in stream ('/url' , timeout = timeout , settings = settings , logger = logger ):
211211 pass
212212
213- assert 0.1 < timer . seconds < 0.2
213+ assert looptime == 1.23
214214
215215 # Let the server request finish and release all resources (tasks).
216216 # TODO: Remove when fixed: https://github.com/aio-libs/aiohttp/issues/7551
@@ -219,46 +219,47 @@ async def serve_slowly():
219219
220220@pytest .mark .parametrize ('method' , ['get' ]) # the only supported method at the moment
221221async def test_settings_timeout_in_streams (
222- resp_mocker , aresponses , hostname , method , settings , logger , timer ):
222+ resp_mocker , aresponses , hostname , method , settings , logger , looptime ):
223223
224224 async def serve_slowly ():
225- await asyncio .sleep (1.0 )
225+ await asyncio .sleep (10 )
226226 return "{}"
227227
228228 mock = resp_mocker (side_effect = serve_slowly )
229229 aresponses .add (hostname , '/url' , method , mock )
230230
231- with timer , pytest .raises (asyncio .TimeoutError ):
232- settings .networking .request_timeout = 0.1
231+ with pytest .raises (asyncio .TimeoutError ):
232+ settings .networking .request_timeout = 1.23
233233 # aiohttp raises an asyncio.TimeoutError which is automatically retried.
234234 # To reduce the test duration we disable retries for this test.
235235 settings .networking .error_backoffs = None
236236 async for _ in stream ('/url' , settings = settings , logger = logger ):
237237 pass
238238
239- assert 0.1 < timer . seconds < 0.2
239+ assert looptime == 1.23
240240
241241 # Let the server request finish and release all resources (tasks).
242242 # TODO: Remove when fixed: https://github.com/aio-libs/aiohttp/issues/7551
243243 await asyncio .sleep (1.0 )
244244
245245
246- @pytest .mark .parametrize ('delay, expected ' , [
247- pytest .param (0.0 , [], id = 'instant-none' ),
248- pytest .param (0.1 , [{'fake' : 'result1' }], id = 'fast-single' ),
249- pytest .param (9.9 , [{'fake' : 'result1' }, {'fake' : 'result2' }], id = 'inf-double' ),
246+ @pytest .mark .parametrize ('delay, expected_times, expected_items ' , [
247+ pytest .param (0 , [] , [], id = 'instant-none' ),
248+ pytest .param (2 , [ 1 ] , [{'fake' : 'result1' }], id = 'fast-single' ),
249+ pytest .param (9 , [ 1 , 4 ] , [{'fake' : 'result1' }, {'fake' : 'result2' }], id = 'inf-double' ),
250250])
251251@pytest .mark .parametrize ('method' , ['get' ]) # the only supported method at the moment
252252async def test_stopper_in_streams (
253- resp_mocker , aresponses , hostname , method , delay , expected , settings , logger ):
253+ resp_mocker , aresponses , hostname , method , delay , settings , logger , looptime ,
254+ expected_items , expected_times ):
254255
255256 async def stream_slowly (request : aiohttp .web .Request ) -> aiohttp .web .StreamResponse :
256257 response = aiohttp .web .StreamResponse ()
257258 await response .prepare (request )
258259 try :
259- await asyncio .sleep (0.05 )
260+ await asyncio .sleep (1 )
260261 await response .write (b'{"fake": "result1"}\n ' )
261- await asyncio .sleep (0.15 )
262+ await asyncio .sleep (3 )
262263 await response .write (b'{"fake": "result2"}\n ' )
263264 await response .write_eof ()
264265 except ConnectionError :
@@ -271,9 +272,13 @@ async def stream_slowly(request: aiohttp.web.Request) -> aiohttp.web.StreamRespo
271272 asyncio .get_running_loop ().call_later (delay , stopper .set_result , None )
272273
273274 items = []
275+ times = []
274276 async for item in stream ('/url' , stopper = stopper , settings = settings , logger = logger ):
275277 items .append (item )
278+ times .append (float (looptime ))
276279
277- assert items == expected
280+ assert items == expected_items
281+ assert times == expected_times
278282
279- await asyncio .sleep (0.2 ) # give the response some time to be cancelled and its tasks closed
283+ # Give the response some time to be cancelled and its tasks closed. That is aiohttp's issue.
284+ await asyncio .sleep (30 )
0 commit comments