79 lines
2.0 KiB
Python
79 lines
2.0 KiB
Python
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"
|