tests: Move logging into test_server.py for Casper.

This commit is contained in:
Steve Howell
2017-01-25 09:31:51 -08:00
committed by Tim Abbott
parent 6de1e8be46
commit 38f5f3a76e
2 changed files with 23 additions and 16 deletions

View File

@@ -68,11 +68,6 @@ subprocess.check_call(['mkdir', '-p', 'var/casper'])
subprocess.check_call(['rm', '-f'] + glob.glob('var/casper/casper-failure*.png')) subprocess.check_call(['rm', '-f'] + glob.glob('var/casper/casper-failure*.png'))
LOG_FILE = 'var/casper/server.log' LOG_FILE = 'var/casper/server.log'
if os.path.exists(LOG_FILE) and os.path.getsize(LOG_FILE) < 100000:
log = open(LOG_FILE, 'a')
log.write('\n\n')
else:
log = open(LOG_FILE, 'w')
def run_tests(realms_have_subdomains, files, external_host): def run_tests(realms_have_subdomains, files, external_host):
# type: (bool, Iterable[str], str) -> None # type: (bool, Iterable[str], str) -> None
@@ -98,7 +93,7 @@ def run_tests(realms_have_subdomains, files, external_host):
if options.remote_debug: if options.remote_debug:
remote_debug = "--remote-debugger-port=7777 --remote-debugger-autorun=yes" remote_debug = "--remote-debugger-port=7777 --remote-debugger-autorun=yes"
with test_server_running(options.force, external_host, log, dots=True): with test_server_running(options.force, external_host, log_file=LOG_FILE, dots=True):
ret = 1 ret = 1
for test_file in test_files: for test_file in test_files:
cmd = "node_modules/.bin/casperjs %s test --subdomains=%s %s" % ( cmd = "node_modules/.bin/casperjs %s test --subdomains=%s %s" % (

View File

@@ -33,15 +33,18 @@ def set_up_django(external_host):
django.setup() django.setup()
os.environ['PYTHONUNBUFFERED'] = 'y' os.environ['PYTHONUNBUFFERED'] = 'y'
def assert_server_running(server): def assert_server_running(server, log_file):
# type: (subprocess.Popen) -> None # type: (subprocess.Popen, str) -> None
"""Get the exit code of the server, or None if it is still running.""" """Get the exit code of the server, or None if it is still running."""
if server.poll() is not None: if server.poll() is not None:
raise RuntimeError('Server died unexpectedly!') message = 'Server died unexpectedly!'
if log_file:
message += '\nSee %s\n' % (log_file,)
raise RuntimeError(message)
def server_is_up(server): def server_is_up(server, log_file):
# type: (subprocess.Popen) -> bool # type: (subprocess.Popen, str) -> bool
assert_server_running(server) assert_server_running(server, log_file)
try: try:
# We could get a 501 error if the reverse proxy is up but the Django app isn't. # We could get a 501 error if the reverse proxy is up but the Django app isn't.
return requests.get('http://127.0.0.1:9981/accounts/home').status_code == 200 return requests.get('http://127.0.0.1:9981/accounts/home').status_code == 200
@@ -49,8 +52,17 @@ def server_is_up(server):
return False return False
@contextmanager @contextmanager
def test_server_running(force=False, external_host='testserver', log=sys.stdout, dots=False): def test_server_running(force=False, external_host='testserver', log_file=None, dots=False):
# type: (bool, str, Any, bool) -> Iterator[None] # type: (bool, str, str, bool) -> Iterator[None]
if log_file:
if os.path.exists(log_file) and os.path.getsize(log_file) < 100000:
log = open(log_file, 'a')
log.write('\n\n')
else:
log = open(log_file, 'w')
else:
log = sys.stdout # type: ignore # BinaryIO vs. IO[str]
set_up_django(external_host) set_up_django(external_host)
generate_fixtures_command = ['tools/setup/generate-fixtures'] generate_fixtures_command = ['tools/setup/generate-fixtures']
@@ -68,7 +80,7 @@ def test_server_running(force=False, external_host='testserver', log=sys.stdout,
try: try:
# Wait for the server to start up. # Wait for the server to start up.
sys.stdout.write('Waiting for test server') sys.stdout.write('Waiting for test server')
while not server_is_up(server): while not server_is_up(server, log_file):
if dots: if dots:
sys.stdout.write('.') sys.stdout.write('.')
sys.stdout.flush() sys.stdout.flush()
@@ -79,7 +91,7 @@ def test_server_running(force=False, external_host='testserver', log=sys.stdout,
yield yield
finally: finally:
assert_server_running(server) assert_server_running(server, log_file)
server.terminate() server.terminate()
if __name__ == '__main__': if __name__ == '__main__':