Beispiel #1
0
    def test_recv_ordered(self):
        stream = QuicStream()

        # add data at start
        stream.add_frame(QuicStreamFrame(offset=0, data=b"01234567"))
        self.assertEqual(bytes(stream._recv_buffer), b"01234567")
        self.assertEqual(list(stream._recv_ranges), [range(0, 8)])
        self.assertEqual(stream._recv_buffer_start, 0)

        # pull data
        self.assertEqual(stream.pull_data(), b"01234567")
        self.assertEqual(bytes(stream._recv_buffer), b"")
        self.assertEqual(list(stream._recv_ranges), [])
        self.assertEqual(stream._recv_buffer_start, 8)

        # add more data
        stream.add_frame(QuicStreamFrame(offset=8, data=b"89012345"))
        self.assertEqual(bytes(stream._recv_buffer), b"89012345")
        self.assertEqual(list(stream._recv_ranges), [range(8, 16)])
        self.assertEqual(stream._recv_buffer_start, 8)

        # pull data
        self.assertEqual(stream.pull_data(), b"89012345")
        self.assertEqual(bytes(stream._recv_buffer), b"")
        self.assertEqual(list(stream._recv_ranges), [])
        self.assertEqual(stream._recv_buffer_start, 16)
Beispiel #2
0
    def test_recv_fin_twice(self):
        stream = QuicStream(stream_id=0)
        stream.add_frame(QuicStreamFrame(offset=0, data=b"01234567"))
        stream.add_frame(QuicStreamFrame(offset=8, data=b"89012345", fin=True))
        stream.add_frame(QuicStreamFrame(offset=8, data=b"89012345", fin=True))

        self.assertEqual(stream.pull_data(), b"0123456789012345")
Beispiel #3
0
    def test_recv_already_partially_consumed(self):
        stream = QuicStream()

        stream.add_frame(QuicStreamFrame(offset=0, data=b"01234567"))
        self.assertEqual(stream.pull_data(), b"01234567")

        stream.add_frame(QuicStreamFrame(offset=0, data=b"0123456789012345"))
        self.assertEqual(bytes(stream._recv_buffer), b"89012345")
        self.assertEqual(list(stream._recv_ranges), [range(8, 16)])
        self.assertEqual(stream._recv_buffer_start, 8)

        self.assertEqual(stream.pull_data(), b"89012345")
        self.assertEqual(stream._recv_buffer_start, 16)
Beispiel #4
0
    def test_recv_offset_only(self):
        stream = QuicStream()

        # add data at offset 0
        stream.add_frame(QuicStreamFrame(offset=0, data=b""))
        self.assertEqual(bytes(stream._recv_buffer), b"")
        self.assertEqual(list(stream._recv_ranges), [])
        self.assertEqual(stream._recv_buffer_start, 0)

        # add data at offset 8
        stream.add_frame(QuicStreamFrame(offset=8, data=b""))
        self.assertEqual(bytes(stream._recv_buffer),
                         b"\x00\x00\x00\x00\x00\x00\x00\x00")
        self.assertEqual(list(stream._recv_ranges), [])
        self.assertEqual(stream._recv_buffer_start, 0)
Beispiel #5
0
    def test_recv_fin_without_data(self):
        stream = QuicStream(stream_id=0)
        stream.add_frame(QuicStreamFrame(offset=0, data=b"", fin=True))

        self.assertEqual(stream.pull_data(), b"")
Beispiel #6
0
 def test_recv_fin_then_data(self):
     stream = QuicStream(stream_id=0)
     stream.add_frame(QuicStreamFrame(offset=0, data=b"", fin=True))
     with self.assertRaises(Exception) as cm:
         stream.add_frame(QuicStreamFrame(offset=0, data=b"01234567"))
     self.assertEqual(str(cm.exception), "Data received beyond FIN")
Beispiel #7
0
    def test_recv_fin_out_of_order(self):
        stream = QuicStream(stream_id=0)
        stream.add_frame(QuicStreamFrame(offset=8, data=b"89012345", fin=True))
        stream.add_frame(QuicStreamFrame(offset=0, data=b"01234567"))

        self.assertEqual(run(stream.reader.read()), b"0123456789012345")