mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00

We're using the existing test suite for websocket servers from the Autobahn project to verify that out websockets implementation is sane. A CT test suite and python module wrapping the test suite has been added. The test suite is run when the 'make inttests' target is executed.
76 lines
2.2 KiB
Python
Executable file
76 lines
2.2 KiB
Python
Executable file
#!/usr/bin/env python
|
|
import os
|
|
import os.path
|
|
import sys
|
|
import subprocess
|
|
|
|
|
|
AB_TESTS_ENV = os.getenv("AB_TESTS_ENV")
|
|
AB_TESTS_PRIV = os.getenv("AB_TESTS_PRIV")
|
|
|
|
VIRTUALENV_URL = 'https://raw.github.com/pypa/virtualenv/master/virtualenv.py'
|
|
VIRTUALENV_BIN = os.path.join(AB_TESTS_ENV, "virtualenv.py")
|
|
PIP_BIN = os.path.join(AB_TESTS_ENV, "bin", "pip")
|
|
|
|
|
|
def activate_env(env):
|
|
"""
|
|
See 'Using Virtualenv without bin/python' at http://www.virtualenv.org
|
|
"""
|
|
activate_this = os.path.join(env, 'bin', 'activate_this.py')
|
|
exec(compile(open(activate_this).read(), activate_this, 'exec'),
|
|
dict(__file__=activate_this))
|
|
|
|
def install_env(env):
|
|
"""
|
|
Install a new virtualenv at a path and also install the Autobahn package.
|
|
"""
|
|
os.makedirs(env) if not os.path.isdir(env) else None
|
|
subprocess.check_call(["curl", "-sS", VIRTUALENV_URL, "-o", VIRTUALENV_BIN])
|
|
subprocess.check_call(["python", VIRTUALENV_BIN, env])
|
|
activate_env(env)
|
|
subprocess.check_call([PIP_BIN, "install", "Autobahn"])
|
|
|
|
def client_config():
|
|
"""
|
|
See comment on SUPPORTED_SPEC_VERSIONS in Autobahn/.../websocket.py
|
|
"""
|
|
base = {
|
|
'options': {'failByDrop': False},
|
|
'enable-ssl': False,
|
|
'servers': [{
|
|
'agent': 'Cowboy/10',
|
|
'url': 'ws://localhost:33080/echo',
|
|
'options': {'version': 10}}, # hybi-10
|
|
{'agent': 'Cowboy/18',
|
|
'url': 'ws://localhost:33080/echo',
|
|
'options': {'version': 18}} # RFC6455
|
|
],
|
|
'cases': ['*'],
|
|
'exclude-cases': [] }
|
|
return base
|
|
|
|
def run_test(env, config):
|
|
activate_env(env)
|
|
from twisted.python import log
|
|
from twisted.internet import reactor
|
|
from autobahn.fuzzing import FuzzingClientFactory
|
|
os.chdir(AB_TESTS_PRIV)
|
|
log.startLogging(sys.stdout)
|
|
fuzzer = FuzzingClientFactory(config)
|
|
return reactor.run()
|
|
|
|
|
|
def main():
|
|
cmd = sys.argv[1]
|
|
if cmd == 'setup':
|
|
install_env(AB_TESTS_ENV)
|
|
print('AB-TESTS-SETUP-OK')
|
|
elif cmd == 'test':
|
|
run_test(AB_TESTS_ENV, client_config())
|
|
print('AB-TESTS-TEST-OK')
|
|
else:
|
|
return 1
|
|
|
|
if __name__ == '__main__':
|
|
main()
|