summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py')
-rw-r--r--testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py b/testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py
new file mode 100644
index 0000000000..1ed4d711e9
--- /dev/null
+++ b/testing/web-platform/tests/tools/third_party/websockets/compliance/test_client.py
@@ -0,0 +1,48 @@
+import json
+import logging
+import urllib.parse
+
+import asyncio
+import websockets
+
+
+logging.basicConfig(level=logging.WARNING)
+
+# Uncomment this line to make only websockets more verbose.
+# logging.getLogger('websockets').setLevel(logging.DEBUG)
+
+
+SERVER = "ws://127.0.0.1:8642"
+AGENT = "websockets"
+
+
+async def get_case_count(server):
+ uri = f"{server}/getCaseCount"
+ async with websockets.connect(uri) as ws:
+ msg = ws.recv()
+ return json.loads(msg)
+
+
+async def run_case(server, case, agent):
+ uri = f"{server}/runCase?case={case}&agent={agent}"
+ async with websockets.connect(uri, max_size=2 ** 25, max_queue=1) as ws:
+ async for msg in ws:
+ await ws.send(msg)
+
+
+async def update_reports(server, agent):
+ uri = f"{server}/updateReports?agent={agent}"
+ async with websockets.connect(uri):
+ pass
+
+
+async def run_tests(server, agent):
+ cases = await get_case_count(server)
+ for case in range(1, cases + 1):
+ print(f"Running test case {case} out of {cases}", end="\r")
+ await run_case(server, case, agent)
+ print(f"Ran {cases} test cases ")
+ await update_reports(server, agent)
+
+
+asyncio.run(run_tests(SERVER, urllib.parse.quote(AGENT)))