def test_send_data_lost_fin(self): stream = QuicStream() # nothing to send yet frame = stream.get_frame(8) self.assertIsNone(frame) # write data and EOF stream.write(b"0123456789012345", end_stream=True) self.assertEqual(list(stream._send_pending), [range(0, 16)]) self.assertEqual(stream.next_send_offset, 0) # send a chunk self.assertEqual( stream.get_frame(8), QuicStreamFrame(data=b"01234567", fin=False, offset=0) ) self.assertEqual(list(stream._send_pending), [range(8, 16)]) self.assertEqual(stream.next_send_offset, 8) # send another chunk self.assertEqual( stream.get_frame(8), QuicStreamFrame(data=b"89012345", fin=True, offset=8) ) self.assertEqual(list(stream._send_pending), []) self.assertEqual(stream.next_send_offset, 16) # nothing more to send self.assertIsNone(stream.get_frame(8)) self.assertEqual(list(stream._send_pending), []) self.assertEqual(stream.next_send_offset, 16) # a chunk gets lost stream.on_data_delivery(QuicDeliveryState.LOST, 8, 16) self.assertEqual(list(stream._send_pending), [range(8, 16)]) self.assertEqual(stream.next_send_offset, 8) # send chunk again self.assertEqual( stream.get_frame(8), QuicStreamFrame(data=b"89012345", fin=True, offset=8) ) self.assertEqual(list(stream._send_pending), []) self.assertEqual(stream.next_send_offset, 16)
def test_send_data(self): stream = QuicStream() self.assertEqual(stream.next_send_offset, 0) # nothing to send yet frame = stream.get_frame(8) self.assertIsNone(frame) # write data stream.write(b"0123456789012345") self.assertEqual(list(stream._send_pending), [range(0, 16)]) self.assertEqual(stream.next_send_offset, 0) # send a chunk frame = stream.get_frame(8) self.assertEqual(frame.data, b"01234567") self.assertFalse(frame.fin) self.assertEqual(frame.offset, 0) self.assertEqual(list(stream._send_pending), [range(8, 16)]) self.assertEqual(stream.next_send_offset, 8) # send another chunk frame = stream.get_frame(8) self.assertEqual(frame.data, b"89012345") self.assertFalse(frame.fin) self.assertEqual(frame.offset, 8) self.assertEqual(list(stream._send_pending), []) self.assertEqual(stream.next_send_offset, 16) # nothing more to send frame = stream.get_frame(8) self.assertIsNone(frame) self.assertEqual(list(stream._send_pending), []) self.assertEqual(stream.next_send_offset, 16) # first chunk gets acknowledged stream.on_data_delivery(QuicDeliveryState.ACKED, 0, 8) # second chunk gets acknowledged stream.on_data_delivery(QuicDeliveryState.ACKED, 8, 16)