@@ -267,11 +267,14 @@ def generate():
267267 'insecure' : False ,
268268 'stream' : True ,
269269 },
270- ).respond_with_json ({} )
270+ ).respond_with_handler ( stream_handler )
271271
272272 client = Client (httpserver .url_for ('/' ))
273273 response = client .pull ('dummy' , stream = True )
274- assert isinstance (response , types .GeneratorType )
274+
275+ it = iter (['pulling manifest' , 'verifying sha256 digest' , 'writing manifest' , 'removing any unused layers' , 'success' ])
276+ for part in response :
277+ assert part ['status' ] == next (it )
275278
276279
277280def test_client_push (httpserver : HTTPServer ):
@@ -291,6 +294,14 @@ def test_client_push(httpserver: HTTPServer):
291294
292295
293296def test_client_push_stream (httpserver : HTTPServer ):
297+ def stream_handler (_ : Request ):
298+ def generate ():
299+ yield json .dumps ({'status' : 'retrieving manifest' }) + '\n '
300+ yield json .dumps ({'status' : 'pushing manifest' }) + '\n '
301+ yield json .dumps ({'status' : 'success' }) + '\n '
302+
303+ return Response (generate ())
304+
294305 httpserver .expect_ordered_request (
295306 '/api/push' ,
296307 method = 'POST' ,
@@ -299,11 +310,14 @@ def test_client_push_stream(httpserver: HTTPServer):
299310 'insecure' : False ,
300311 'stream' : True ,
301312 },
302- ).respond_with_json ({} )
313+ ).respond_with_handler ( stream_handler )
303314
304315 client = Client (httpserver .url_for ('/' ))
305316 response = client .push ('dummy' , stream = True )
306- assert isinstance (response , types .GeneratorType )
317+
318+ it = iter (['retrieving manifest' , 'pushing manifest' , 'success' ])
319+ for part in response :
320+ assert part ['status' ] == next (it )
307321
308322
309323def test_client_create_path (httpserver : HTTPServer ):
@@ -642,6 +656,16 @@ async def test_async_client_pull(httpserver: HTTPServer):
642656
643657@pytest .mark .asyncio
644658async def test_async_client_pull_stream (httpserver : HTTPServer ):
659+ def stream_handler (_ : Request ):
660+ def generate ():
661+ yield json .dumps ({'status' : 'pulling manifest' }) + '\n '
662+ yield json .dumps ({'status' : 'verifying sha256 digest' }) + '\n '
663+ yield json .dumps ({'status' : 'writing manifest' }) + '\n '
664+ yield json .dumps ({'status' : 'removing any unused layers' }) + '\n '
665+ yield json .dumps ({'status' : 'success' }) + '\n '
666+
667+ return Response (generate ())
668+
645669 httpserver .expect_ordered_request (
646670 '/api/pull' ,
647671 method = 'POST' ,
@@ -650,11 +674,14 @@ async def test_async_client_pull_stream(httpserver: HTTPServer):
650674 'insecure' : False ,
651675 'stream' : True ,
652676 },
653- ).respond_with_json ({} )
677+ ).respond_with_handler ( stream_handler )
654678
655679 client = AsyncClient (httpserver .url_for ('/' ))
656680 response = await client .pull ('dummy' , stream = True )
657- assert isinstance (response , types .AsyncGeneratorType )
681+
682+ it = iter (['pulling manifest' , 'verifying sha256 digest' , 'writing manifest' , 'removing any unused layers' , 'success' ])
683+ async for part in response :
684+ assert part ['status' ] == next (it )
658685
659686
660687@pytest .mark .asyncio
@@ -676,6 +703,14 @@ async def test_async_client_push(httpserver: HTTPServer):
676703
677704@pytest .mark .asyncio
678705async def test_async_client_push_stream (httpserver : HTTPServer ):
706+ def stream_handler (_ : Request ):
707+ def generate ():
708+ yield json .dumps ({'status' : 'retrieving manifest' }) + '\n '
709+ yield json .dumps ({'status' : 'pushing manifest' }) + '\n '
710+ yield json .dumps ({'status' : 'success' }) + '\n '
711+
712+ return Response (generate ())
713+
679714 httpserver .expect_ordered_request (
680715 '/api/push' ,
681716 method = 'POST' ,
@@ -684,11 +719,14 @@ async def test_async_client_push_stream(httpserver: HTTPServer):
684719 'insecure' : False ,
685720 'stream' : True ,
686721 },
687- ).respond_with_json ({} )
722+ ).respond_with_handler ( stream_handler )
688723
689724 client = AsyncClient (httpserver .url_for ('/' ))
690725 response = await client .push ('dummy' , stream = True )
691- assert isinstance (response , types .AsyncGeneratorType )
726+
727+ it = iter (['retrieving manifest' , 'pushing manifest' , 'success' ])
728+ async for part in response :
729+ assert part ['status' ] == next (it )
692730
693731
694732@pytest .mark .asyncio
0 commit comments