ranchimallflo-api/py3.7/lib/python3.7/site-packages/h11/tests/test_receivebuffer.py

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"