from .._receivebuffer import ReceiveBuffer def test_receivebuffer(): b = ReceiveBuffer() assert not b assert len(b) == 0 assert bytes(b) == b"" b += b"123" assert b assert len(b) == 3 assert bytes(b) == b"123" b.compress() assert bytes(b) == b"123" assert b.maybe_extract_at_most(2) == b"12" assert b assert len(b) == 1 assert bytes(b) == b"3" b.compress() assert bytes(b) == b"3" assert b.maybe_extract_at_most(10) == b"3" assert bytes(b) == b"" assert b.maybe_extract_at_most(10) is None assert not b ################################################################ # maybe_extract_until_next ################################################################ b += b"12345a6789aa" assert b.maybe_extract_until_next(b"a") == b"12345a" assert bytes(b) == b"6789aa" assert b.maybe_extract_until_next(b"aaa") is None assert bytes(b) == b"6789aa" b += b"a12" assert b.maybe_extract_until_next(b"aaa") == b"6789aaa" assert bytes(b) == b"12" # check repeated searches for the same needle, triggering the # pickup-where-we-left-off logic b += b"345" assert b.maybe_extract_until_next(b"aaa") is None b += b"6789aaa123" assert b.maybe_extract_until_next(b"aaa") == b"123456789aaa" assert bytes(b) == b"123" ################################################################ # maybe_extract_lines ################################################################ b += b"\r\na: b\r\nfoo:bar\r\n\r\ntrailing" lines = b.maybe_extract_lines() assert lines == [b"123", b"a: b", b"foo:bar"] assert bytes(b) == b"trailing" assert b.maybe_extract_lines() is None b += b"\r\n\r" assert b.maybe_extract_lines() is None assert b.maybe_extract_at_most(100) == b"trailing\r\n\r" assert not b # Empty body case (as happens at the end of chunked encoding if there are # no trailing headers, e.g.) b += b"\r\ntrailing" assert b.maybe_extract_lines() == [] assert bytes(b) == b"trailing"