@@ -395,6 +395,58 @@ async def test_get_iter_fails_after_close(self):
395
395
async for _ in self .assembler .get_iter ():
396
396
self .fail ("no fragment expected" )
397
397
398
+ async def test_get_queued_message_after_close (self ):
399
+ """get returns a message after close is called."""
400
+ self .assembler .put (Frame (OP_TEXT , b"caf\xc3 \xa9 " ))
401
+ self .assembler .close ()
402
+ message = await self .assembler .get ()
403
+ self .assertEqual (message , "café" )
404
+
405
+ async def test_get_iter_queued_message_after_close (self ):
406
+ """get_iter yields a message after close is called."""
407
+ self .assembler .put (Frame (OP_TEXT , b"caf\xc3 \xa9 " ))
408
+ self .assembler .close ()
409
+ fragments = await alist (self .assembler .get_iter ())
410
+ self .assertEqual (fragments , ["café" ])
411
+
412
+ async def test_get_queued_fragmented_message_after_close (self ):
413
+ """get reassembles a fragmented message after close is called."""
414
+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
415
+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
416
+ self .assembler .put (Frame (OP_CONT , b"a" ))
417
+ self .assembler .close ()
418
+ self .assembler .close ()
419
+ message = await self .assembler .get ()
420
+ self .assertEqual (message , b"tea" )
421
+
422
+ async def test_get_iter_queued_fragmented_message_after_close (self ):
423
+ """get_iter yields a fragmented message after close is called."""
424
+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
425
+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
426
+ self .assembler .put (Frame (OP_CONT , b"a" ))
427
+ self .assembler .close ()
428
+ fragments = await alist (self .assembler .get_iter ())
429
+ self .assertEqual (fragments , [b"t" , b"e" , b"a" ])
430
+
431
+ async def test_get_partially_queued_fragmented_message_after_close (self ):
432
+ """get raises EOF on a partial fragmented message after close is called."""
433
+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
434
+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
435
+ self .assembler .close ()
436
+ with self .assertRaises (EOFError ):
437
+ await self .assembler .get ()
438
+
439
+ async def test_get_iter_partially_queued_fragmented_message_after_close (self ):
440
+ """get_iter yields a partial fragmented message after close is called."""
441
+ self .assembler .put (Frame (OP_BINARY , b"t" , fin = False ))
442
+ self .assembler .put (Frame (OP_CONT , b"e" , fin = False ))
443
+ self .assembler .close ()
444
+ fragments = []
445
+ with self .assertRaises (EOFError ):
446
+ async for fragment in self .assembler .get_iter ():
447
+ fragments .append (fragment )
448
+ self .assertEqual (fragments , [b"t" , b"e" ])
449
+
398
450
async def test_put_fails_after_close (self ):
399
451
"""put raises EOFError after close is called."""
400
452
self .assembler .close ()
0 commit comments