From 0c4866420a3d5d8eafd3b6f381ccf582f933752d Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Sun, 12 Jan 2020 21:32:26 -0800 Subject: [PATCH] test broadcast server --- .../python/websockets/broadcast_server.py | 36 ++++++++++++++++ .../python/websockets/broadcast_server_ssl.py | 43 +++++++++++++++++++ .../python/websockets/entrypoint.sh | 6 +++ test/compatibility/python/websockets/makefile | 10 ++++- ws/ws_transfer.cpp | 2 +- 5 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 test/compatibility/python/websockets/broadcast_server.py create mode 100644 test/compatibility/python/websockets/broadcast_server_ssl.py diff --git a/test/compatibility/python/websockets/broadcast_server.py b/test/compatibility/python/websockets/broadcast_server.py new file mode 100644 index 00000000..58f14102 --- /dev/null +++ b/test/compatibility/python/websockets/broadcast_server.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +# WS server example + +import asyncio +import os +import websockets + + +clients = set() + + +async def echo(websocket, path): + clients.add(websocket) + + try: + while True: + msg = await websocket.recv() + + for ws in clients: + if ws != websocket: + print(f'Sending {len(msg)} bytes to {ws}') + await ws.send(msg) + except websockets.exceptions.ConnectionClosedOK: + print('Client terminating') + clients.remove(websocket) + + +host = os.getenv('BIND_HOST', 'localhost') +print(f'Serving on {host}:8766') + +start_server = websockets.serve(echo, host, 8766, max_size=2 ** 30) + +asyncio.get_event_loop().run_until_complete(start_server) +asyncio.get_event_loop().run_forever() + diff --git a/test/compatibility/python/websockets/broadcast_server_ssl.py b/test/compatibility/python/websockets/broadcast_server_ssl.py new file mode 100644 index 00000000..2949223d --- /dev/null +++ b/test/compatibility/python/websockets/broadcast_server_ssl.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +# WS server example + +import asyncio +import os +import pathlib +import ssl +import websockets + + +clients = set() + + +async def echo(websocket, path): + clients.add(websocket) + + try: + while True: + msg = await websocket.recv() + + for ws in clients: + if ws != websocket: + print(f'Sending {len(msg)} bytes to {ws}') + await ws.send(msg) + except websockets.exceptions.ConnectionClosedOK: + print('Client terminating') + clients.remove(websocket) + + +ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) +ssl_context.load_cert_chain('trusted-server-crt.pem', + 'trusted-server-key.pem') + +host = os.getenv('BIND_HOST', 'localhost') +print(f'Serving on {host}:8766') + +start_server = websockets.serve(echo, host, 8766, max_size=2 ** 30, ssl=ssl_context) + +asyncio.get_event_loop().run_until_complete(start_server) +asyncio.get_event_loop().run_forever() + + diff --git a/test/compatibility/python/websockets/entrypoint.sh b/test/compatibility/python/websockets/entrypoint.sh index 65309b50..9e148118 100644 --- a/test/compatibility/python/websockets/entrypoint.sh +++ b/test/compatibility/python/websockets/entrypoint.sh @@ -7,4 +7,10 @@ case $MODE in echo_server_ssl) python /usr/bin/echo_server_ssl.py ;; + broadcast_server) + python /usr/bin/broadcast_server.py + ;; + broadcast_server_ssl) + python /usr/bin/broadcast_server_ssl.py + ;; esac diff --git a/test/compatibility/python/websockets/makefile b/test/compatibility/python/websockets/makefile index fd6454a0..7fbe0272 100644 --- a/test/compatibility/python/websockets/makefile +++ b/test/compatibility/python/websockets/makefile @@ -22,8 +22,14 @@ docker_push: docker push ${LATEST} docker push ${IMG} -server: +echo_server: docker run -p 8766:8766 -e BIND_HOST=0.0.0.0 -e MODE=echo_server -it --rm bsergean/echo_server:build -server_ssl: +echo_server_ssl: docker run -p 8766:8766 -e BIND_HOST=0.0.0.0 -e MODE=echo_server_ssl -it --rm bsergean/echo_server:build + +broadcast_server: + docker run -p 8766:8766 -e BIND_HOST=0.0.0.0 -e MODE=broadcast_server -it --rm bsergean/echo_server:build + +broadcast_server_ssl: + docker run -p 8766:8766 -e BIND_HOST=0.0.0.0 -e MODE=broadcast_server_ssl -it --rm bsergean/echo_server:build diff --git a/ws/ws_transfer.cpp b/ws/ws_transfer.cpp index c294659b..cf4984d1 100644 --- a/ws/ws_transfer.cpp +++ b/ws/ws_transfer.cpp @@ -102,7 +102,7 @@ namespace ix size_t bufferedAmount = client->bufferedAmount(); spdlog::info( - "{}: [client {}]: has readystate {} bytes left to be sent", + "{}: [client {}]: has readystate {} bytes left to be sent {}", "ws_transfer", id, readyStateString,