]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Add autobahn tests for client side of websockets.
authorBen Darnell <ben@bendarnell.com>
Sun, 17 Feb 2013 05:20:01 +0000 (00:20 -0500)
committerBen Darnell <ben@bendarnell.com>
Sun, 17 Feb 2013 05:20:01 +0000 (00:20 -0500)
maint/test/websocket/client.py
maint/test/websocket/fuzzingclient.json [new file with mode: 0644]
maint/test/websocket/fuzzingserver.json [new file with mode: 0644]
maint/test/websocket/run-client.sh [new file with mode: 0755]
maint/test/websocket/run-server.sh [moved from maint/test/websocket/run.sh with 81% similarity]

index 6d80ee565feab4a6f2dcce836df2acca06beccd8..71624552631a9547e0e8e19450134f957707fa81 100644 (file)
@@ -1,32 +1,46 @@
 #!/usr/bin/env python
-import sys
-from tornado.options import options, define, parse_command_line
-from twisted.python import log
-from twisted.internet import reactor
-from autobahntestsuite.fuzzing import FuzzingClientFactory
 
-define('servers', type=str, multiple=True,
-       default=['Tornado=ws://localhost:9000'])
+import logging
 
-define('cases', type=str, multiple=True,
-       default=["*"])
-define('exclude', type=str, multiple=True,
-       default=["9.*"])
+from tornado import gen
+from tornado.ioloop import IOLoop
+from tornado.options import define, options, parse_command_line
+from tornado.websocket import WebSocketConnect
+
+define('url', default='ws://localhost:9001')
+define('name', default='Tornado')
+
+@gen.engine
+def run_tests():
+    url = options.url + '/getCaseCount'
+    control_ws = yield WebSocketConnect(url, None)
+    num_tests = int((yield control_ws.read_message()))
+    logging.info('running %d cases', num_tests)
+    msg = yield control_ws.read_message()
+    assert msg is None
+
+    for i in range(1, num_tests + 1):
+        logging.info('running test case %d', i)
+        url = options.url + '/runCase?case=%d&agent=%s' % (i, options.name)
+        test_ws = yield WebSocketConnect(url, None)
+        while True:
+            message = yield test_ws.read_message()
+            if message is None:
+                break
+            test_ws.write_message(message, binary=isinstance(message, bytes))
+
+    url = options.url + '/updateReports?agent=%s' % options.name
+    update_ws = yield WebSocketConnect(url, None)
+    msg = yield update_ws.read_message()
+    assert msg is None
+    IOLoop.instance().stop()
+
+def main():
+    parse_command_line()
+
+    IOLoop.instance().add_callback(run_tests)
+
+    IOLoop.instance().start()
 
 if __name__ == '__main__':
-   parse_command_line()
-   log.startLogging(sys.stdout)
-   servers = []
-   for server in options.servers:
-      name, _, url = server.partition('=')
-      servers.append({"agent": name, "url": url, "options": {"version": 17}})
-   spec = {
-       "options": {"failByDrop": False},
-       "enable-ssl": False,
-       "servers": servers,
-       "cases": options.cases,
-       "exclude-cases": options.exclude,
-       "exclude-agent-cases": {},
-       }
-   fuzzer = FuzzingClientFactory(spec)
-   reactor.run()
+    main()
diff --git a/maint/test/websocket/fuzzingclient.json b/maint/test/websocket/fuzzingclient.json
new file mode 100644 (file)
index 0000000..759963f
--- /dev/null
@@ -0,0 +1,19 @@
+{
+   "options": {"failByDrop": false},
+   "outdir": "./reports/servers",
+
+   "servers": [
+       {"agent": "Tornado/py26", "url": "ws://localhost:9001",
+        "options": {"version": 18}},
+       {"agent": "Tornado/py27", "url": "ws://localhost:9002",
+        "options": {"version": 18}},
+       {"agent": "Tornado/py32", "url": "ws://localhost:9003",
+        "options": {"version": 18}},
+       {"agent": "Tornado/pypy", "url": "ws://localhost:9004",
+        "options": {"version": 18}}
+       ],
+
+   "cases": ["*"],
+   "exclude-cases": ["9.*"],
+   "exclude-agent-cases": {}
+}
diff --git a/maint/test/websocket/fuzzingserver.json b/maint/test/websocket/fuzzingserver.json
new file mode 100644 (file)
index 0000000..8fc4ab6
--- /dev/null
@@ -0,0 +1,12 @@
+
+{
+   "url": "ws://localhost:9001",
+
+   "options": {"failByDrop": false},
+   "outdir": "./reports/clients",
+   "webport": 8080,
+
+   "cases": ["*"],
+   "exclude-cases": ["9.*"],
+   "exclude-agent-cases": {}
+}
diff --git a/maint/test/websocket/run-client.sh b/maint/test/websocket/run-client.sh
new file mode 100755 (executable)
index 0000000..9ed974a
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+
+tox
+
+.tox/py27/bin/wstest -m fuzzingserver &
+FUZZING_SERVER_PID=$!
+
+sleep 1
+
+.tox/py26/bin/python client.py --name='Tornado/py26'
+.tox/py27/bin/python client.py --name='Tornado/py27'
+.tox/py32/bin/python client.py --name='Tornado/py32'
+.tox/pypy/bin/python client.py --name='Tornado/pypy'
+
+kill $FUZZING_SERVER_PID
+wait
+
+echo "Tests complete.  Output is in ./reports/clients/index.html"
similarity index 81%
rename from maint/test/websocket/run.sh
rename to maint/test/websocket/run-server.sh
index ae686b1acacdcf49089e8f388d4ddcc2d360e651..95a14ea3b60c90caba42d3564de7d9b683e50966 100755 (executable)
@@ -26,7 +26,7 @@ PYPY_SERVER_PID=$!
 
 sleep 1
 
-.tox/py27/bin/python ./client.py --servers=Tornado/py26=ws://localhost:9001,Tornado/py27=ws://localhost:9002,Tornado/py32=ws://localhost:9003,Tornado/pypy=ws://localhost:9004 "$@" || true
+.tox/py27/bin/wstest -m fuzzingclient
 
 kill $PY26_SERVER_PID
 kill $PY27_SERVER_PID