#!/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)