zulip/zephyr/tests/frontend/run

66 lines
1.8 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env python
import subprocess
import requests
import time
import sys
import os
from os import path
import glob
os.environ["TORNADO_SERVER"] = "http://localhost:9983"
test_files = []
for file in sys.argv[1:]:
if not os.path.exists(file):
file = path.join(path.dirname(__file__), 'tests', file)
test_files.append(path.abspath(file))
os.chdir(path.join(path.dirname(__file__), '../../..'))
subprocess.check_call('zephyr/tests/generate-fixtures')
subprocess.check_call(['rm', '-f'] + glob.glob('/tmp/casper-failure*.png'))
log = open('zephyr/tests/frontend/server.log', 'w')
# Run this not through the shell, so that we have the actual PID.
server = subprocess.Popen(('tools/run-dev.py', '--test'),
stdout=log, stderr=log)
def assert_server_running():
# Get the exit code of the server, or None if it is still running.
if server.poll() is not None:
raise RuntimeError, 'Server died unexpectedly! Check zephyr/tests/frontend/server.log'
def server_is_up():
assert_server_running()
try:
# We could get a 501 error if the reverse proxy is up but the Django app isn't.
return requests.get('http://localhost:9981/accounts/home').status_code == 200
except:
return False
ret = 1
try:
# Wait for the server to start up.
sys.stdout.write('Waiting for test server')
while not server_is_up():
sys.stdout.write('.')
sys.stdout.flush()
time.sleep(0.1)
sys.stdout.write('\n')
cmd = 'zephyr/tests/frontend/casperjs/bin/casperjs test '
if test_files:
cmd += ' '.join(test_files)
else:
cmd += 'zephyr/tests/frontend/tests'
print "Running %s" % (cmd,)
ret = subprocess.call(cmd, shell=True)
finally:
assert_server_running()
server.terminate()
sys.exit(ret)