def test_close_frame_no_payload(self): reader = asyncio.StreamReader(loop=self.loop) parser = WebSocketParser(reader) task = asyncio.Task(parser.parse_frame(reader), loop=self.loop) self.loop.call_soon(lambda: reader.feed_data(FrameBuilder.close())) frame = self.loop.run_until_complete(task) self.assertEqual(frame.opcode, OpCode.close)
def test_reject_unmasked_frames(self): reader = asyncio.StreamReader(loop=self.loop) parser = WebSocketParser(reader) frame = FrameBuilder.close(masked=False) self.loop.call_soon(lambda: reader.feed_data(frame)) task = asyncio.Task(parser.get_message(), loop=self.loop) self.assertRaises(WebSocketFormatException, self.loop.run_until_complete, task)
def test_control_frame_too_long(self): reader = asyncio.StreamReader(loop=self.loop) parser = WebSocketParser(reader) frame = FrameBuilder.close(1000, payload=' '*126) self.loop.call_soon(lambda: reader.feed_data(frame)) task = asyncio.Task(parser.get_message(), loop=self.loop) self.assertRaises(WebSocketFormatException, self.loop.run_until_complete, task)
def test_invalid_opcode(self): reader = asyncio.StreamReader(loop=self.loop) parser = WebSocketParser(reader) frame = FrameBuilder.close() frame = b'\xff' + frame[1:] self.loop.call_soon(lambda: reader.feed_data(frame)) task = asyncio.Task(parser.get_message(), loop=self.loop) self.assertRaises(WebSocketFormatException, self.loop.run_until_complete, task)
def test_close_frame(self, _build_method): data = b"Hello" code = 1002 expected_data = struct.pack("!H", code) + data FrameBuilder.close(1002, payload=data) _build_method.assert_called_with(opcode=OpCode.close, fin=True, masked=True, payload=expected_data) FrameBuilder.close() _build_method.assert_called_with(opcode=OpCode.close, fin=True, masked=True, payload=b'') frame = FrameBuilder.close(payload=data) expected_payload = struct.pack('!H', 1000) + data _build_method.assert_called_with(opcode=OpCode.close, fin=True, masked=True, payload=expected_payload) frame = FrameBuilder.close(code, payload=data.decode('utf-8')) expected_payload = struct.pack('!H', code) + data _build_method.assert_called_with(opcode=OpCode.close, fin=True, masked=True, payload=expected_payload)
def test_writer_close(self): transport = BytesIO() ww = WebSocketWriter(transport) ww.close() transport.seek(0) self.assertEqual(transport.read(), FrameBuilder.close(masked=False))