def test_split_unicode_message(self): text_payload = u"∂" * 64 payload = text_payload.encode("utf-8") split = 64 decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload[:split], frame_finished=False, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is False assert frame.payload == text_payload[:(split // 3)] frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=payload[split:], frame_finished=True, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is True assert frame.payload == text_payload[(split // 3):]
def test_split_message(self) -> None: text_payload = "x" * 65535 payload = text_payload.encode("utf-8") split = 32777 decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload[:split], frame_finished=False, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is False assert frame.payload == text_payload[:split] frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=payload[split:], frame_finished=True, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is True assert frame.payload == text_payload[split:]
def send_frame_to_validator(self, payload, finished): decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload, frame_finished=finished, message_finished=True, ) frame = decoder.process_frame(frame)
def test_start_with_continuation(self): payload = b"x" * 23 decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=payload, frame_finished=True, message_finished=True, ) with pytest.raises(fp.ParseFailed): decoder.process_frame(frame)
def test_missing_continuation_2(self): payload = b"x" * 23 decoder = fp.MessageDecoder() decoder.opcode = fp.Opcode.TEXT frame = fp.Frame( opcode=fp.Opcode.BINARY, payload=payload, frame_finished=True, message_finished=True, ) with pytest.raises(fp.ParseFailed): decoder.process_frame(frame)
def test_single_binary_frame(self): payload = b"x" * 23 decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.BINARY, payload=payload, frame_finished=True, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.BINARY assert frame.message_finished is True assert frame.payload == payload
def test_bad_unicode(self): payload = unhexlify("cebae1bdb9cf83cebcceb5eda080656469746564") decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload, frame_finished=True, message_finished=True, ) with pytest.raises(fp.ParseFailed) as excinfo: decoder.process_frame(frame) assert excinfo.value.code is fp.CloseReason.INVALID_FRAME_PAYLOAD_DATA
def test_not_even_unicode(self) -> None: payload = "fñörd".encode("iso-8859-1") decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload, frame_finished=True, message_finished=False, ) with pytest.raises(fp.ParseFailed) as excinfo: decoder.process_frame(frame) assert excinfo.value.code is fp.CloseReason.INVALID_FRAME_PAYLOAD_DATA
def test_missing_continuation_1(self) -> None: payload = b"x" * 23 decoder = fp.MessageDecoder() decoder.opcode = fp.Opcode.BINARY decoder.seen_first_frame = True # type: ignore frame = fp.Frame( opcode=fp.Opcode.BINARY, payload=payload, frame_finished=True, message_finished=True, ) with pytest.raises(fp.ParseFailed): decoder.process_frame(frame)
def test_single_text_frame(self): text_payload = u"fñör∂" binary_payload = text_payload.encode("utf8") decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=binary_payload, frame_finished=True, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is True assert frame.payload == text_payload
def test_incomplete_unicode(self) -> None: payload = "fñör∂".encode("utf8") payload = payload[:4] decoder = fp.MessageDecoder() frame = fp.Frame( opcode=fp.Opcode.TEXT, payload=payload, frame_finished=True, message_finished=True, ) with pytest.raises(fp.ParseFailed) as excinfo: decoder.process_frame(frame) assert excinfo.value.code is fp.CloseReason.INVALID_FRAME_PAYLOAD_DATA
def test_follow_on_binary_frame(self) -> None: payload = b"x" * 23 decoder = fp.MessageDecoder() decoder.opcode = fp.Opcode.BINARY frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=payload, frame_finished=True, message_finished=False, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.BINARY assert frame.message_finished is False assert frame.payload == payload
def test_final_text_frame(self) -> None: text_payload = "fñör∂" binary_payload = text_payload.encode("utf8") decoder = fp.MessageDecoder() decoder.opcode = fp.Opcode.TEXT decoder.decoder = getincrementaldecoder("utf-8")() assert decoder.decoder.decode(binary_payload[:-2]) == text_payload[:-1] binary_payload = binary_payload[-2:] text_payload = text_payload[-1:] frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=binary_payload, frame_finished=True, message_finished=True, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is True assert frame.payload == text_payload
def test_follow_on_text_frame(self): text_payload = u"fñör∂" binary_payload = text_payload.encode("utf8") decoder = fp.MessageDecoder() decoder.opcode = fp.Opcode.TEXT decoder.seen_first_frame = True decoder.decoder = getincrementaldecoder("utf-8")() assert decoder.decoder.decode(binary_payload[:4]) == text_payload[:2] binary_payload = binary_payload[4:-2] text_payload = text_payload[2:-1] frame = fp.Frame( opcode=fp.Opcode.CONTINUATION, payload=binary_payload, frame_finished=True, message_finished=False, ) frame = decoder.process_frame(frame) assert frame.opcode is fp.Opcode.TEXT assert frame.message_finished is False assert frame.payload == text_payload