def test_binary_output_length_larger_than_127(frame_factory, monkeypatch):
# even shorter test, as we don't want to repeat ourselves.
monkeypatch.setattr(
'lomond.frame.make_masking_key', lambda: b'\x00\x00\x00\x00')
large_length = 1 << 16
frame = frame_factory(Opcode.BINARY, payload=b'\x01' * large_length)
frame_binary = frame.to_bytes()
expected_length = 1 + 1 + 8 + 4 + large_length
# ^ ^ ^ ^ ^
# | | | | +-- payload length (128 bytes)
# | | | +------- mask length (4 bytes )
# | | +----------- length as uint64_t (4 bytes )
# | +--------------- masking byte
# +------------------- opcode byte
assert len(frame_binary) == expected_length
assert six.indexbytes(frame_binary, 0) == 0b10000010
_length = six.indexbytes(frame_binary, 1) & 0b01111111
assert _length == 127
# we can decode the real length as well:
decoded_length = unpack('!Q', frame_binary[2:10])
assert len(decoded_length) == 1
assert decoded_length[0] == large_length
assert frame_binary[10:14] == b'\x00\x00\x00\x00'
assert frame_binary[14:] == frame.payload
评论列表
文章目录