def test_frame_protocol_somehow_loses_its_mind(self): class FailFrame(object): opcode = object() class DoomProtocol(object): def receive_bytes(self, data): return None def received_frames(self): return [FailFrame()] connection = WSConnection(CLIENT, host='localhost', resource='foo') connection._proto = DoomProtocol() connection._state = ConnectionState.OPEN connection.bytes_to_send() connection.receive_bytes(b'') with pytest.raises(StopIteration): next(connection.events()) assert not connection.bytes_to_send()
def test_data_events(self, text, payload, full_message, full_frame): if text: opcode = 0x01 encoded_payload = payload.encode('utf8') else: opcode = 0x02 encoded_payload = payload if full_message: opcode = bytearray([opcode | 0x80]) else: opcode = bytearray([opcode]) if full_frame: length = bytearray([len(encoded_payload)]) else: length = bytearray([len(encoded_payload) + 100]) frame = opcode + length + encoded_payload connection = WSConnection(CLIENT, host='localhost', resource='foo') connection._proto = FrameProtocol(True, []) connection._state = ConnectionState.OPEN connection.bytes_to_send() connection.receive_bytes(frame) event = next(connection.events()) if text: assert isinstance(event, TextReceived) else: assert isinstance(event, BytesReceived) assert event.data == payload assert event.frame_finished is full_frame assert event.message_finished is full_message assert not connection.bytes_to_send()