blob: 59e23e2e007b9e301bf7a52805801151e9d5c1fe [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Apptest is a Mojo application that interacts with another Mojo application
and verifies assumptions about behavior of the app being tested.
"""
import logging
import time
_logger = logging.getLogger()
def _build_shell_arguments(shell_args, apptest_url, apptest_args):
"""Builds the list of arguments for the shell.
Args:
shell_args: List of arguments for the shell run.
apptest_url: Url of the apptest app to run.
apptest_args: Parameters to be passed to the apptest app.
Returns:
Single list of shell arguments.
"""
result = list(shell_args)
if apptest_args:
result.append("--args-for=%s %s" % (apptest_url, " ".join(apptest_args)))
result.append(apptest_url)
return result
def run_apptest(shell, shell_args, apptest_url, apptest_args, timeout,
output_test):
"""Runs shell with the given arguments, retrieves the output and applies
|output_test| to determine if the run was successful.
Args:
shell: Wrapper around concrete Mojo shell, implementing devtools Shell
interface.
shell_args: List of arguments for the shell run.
apptest_url: Url of the apptest app to run.
apptest_args: Parameters to be passed to the apptest app.
output_test: Function accepting the shell output and returning True iff
the output indicates a successful run.
Returns:
True iff the test succeeded, False otherwise.
"""
arguments = _build_shell_arguments(shell_args, apptest_url, apptest_args)
command_line = "mojo_shell " + " ".join(["%r" % x for x in arguments])
_logger.debug("Starting: " + command_line)
start_time = time.time()
(exit_code, output, did_time_out) = shell.run_and_get_output(arguments,
timeout)
run_time = time.time() - start_time
_logger.debug("Completed: " + command_line)
# Only log if it took more than 3 second.
if run_time >= 3:
_logger.info("Test took %.3f seconds: %s" % (run_time, command_line))
if exit_code or did_time_out or not output_test(output):
print 'Failed test: %r' % command_line
if exit_code:
print ' due to shell exit code %d' % exit_code
elif did_time_out:
print ' due to exceeded timeout of %fs' % timeout
else:
print ' due to test results'
print 72 * '-'
print output
print 72 * '-'
return False
return True