def serve_wsgi(host, port, app, quiet=False): server = WSGIServer((host, port), app, handler_class=WebSocketHandler) if not quiet: server.logger = create_logger('geventwebsocket.logging') server.logger.setLevel(logging.INFO) server.logger.addHandler(logging.StreamHandler()) server.logger.info(f'Listening on http://{host}:{port}/\nHit Ctrl-C to quit.\n') server.serve_forever()
def test_low_level_echo(self): data = [] data.append("") data.append("0123456789") data.append("0123456789" * 20) data.append("0123456789" * 2000) data.append("0123456789" * 20000) data.append("0123456789" * 200000) data.append(b"") data.append(b"0123456789") data.append(b"0123456789" * 20) data.append(b"0123456789" * 2000) data.append(b"0123456789" * 20000) data.append(b"0123456789" * 200000) def test_echo_actual(environ, start_response): try: websocket = environ.get("wsgi.websocket") if websocket is None: return http_handler(environ, start_response) while True: message = websocket.receive() if message is None: break websocket.send(message) websocket.close() except Exception as e: self.err.append(e) server = WSGIServer(self.s_socket, application=test_echo_actual, handler_class=TestWebSocketHandler) server.logger = getLogger(__name__) server.start() self.server = server try: self.server_thread = Thread(target=self.start_server) self.server_thread.start() ws = create_connection("ws://%s:%s/" % (self.server.environ["SERVER_NAME"], self.server.environ["SERVER_PORT"])) try: for i in range(2): if i == 1: ws.set_mask_key(lambda _: b'1234') for d in data: if isinstance(d, bytes): ws.send_binary(d) else: ws.send(d) self.assertEqual(ws.recv(), d) ws.ping("ping") pong = ws.recv_data_frame(10) self.assertEqual(pong[0], pong[1].OPCODE_PONG) self.assertEqual(pong[1].data, b'ping') ping = ws.recv_data_frame(9) self.assertEqual(ping[0], ping[1].OPCODE_PING) self.assertEqual(ping[1].data, b'') ws.pong(ping[1].data) ping = ws.recv_data_frame(9) self.assertEqual(ping[0], ping[1].OPCODE_PING) self.assertEqual(ping[1].data, b'') ws.pong(ping[1].data) ping = ws.recv_data_frame(9) self.assertEqual(ping[0], ping[1].OPCODE_PING) self.assertEqual(ping[1].data, b'ping') ws.pong(ping[1].data) ping = ws.recv_data_frame(9) self.assertEqual(ping[0], ping[1].OPCODE_PING) self.assertEqual(ping[1].data, b'ping') ws.pong(ping[1].data) self.assertFalse(self.err) finally: ws.close(timeout=10) finally: server.close()