123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # 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.
- """Utility script to run chromoting test driver tests on the Chromoting bot."""
- from __future__ import print_function
- import argparse
- from chromoting_test_utilities import GetJidFromHostLog
- from chromoting_test_utilities import InitialiseTestMachineForLinux
- from chromoting_test_utilities import MAX_RETRIES
- from chromoting_test_utilities import PrintHostLogContents
- from chromoting_test_utilities import PROD_DIR_ID
- from chromoting_test_utilities import RunCommandInSubProcess
- from chromoting_test_utilities import TestCaseSetup
- from chromoting_test_utilities import TestMachineCleanup
- TEST_ENVIRONMENT_TEAR_DOWN_INDICATOR = 'Global test environment tear-down'
- FAILED_INDICATOR = '[ FAILED ]'
- def LaunchCTDCommand(args, command):
- """Launches the specified chromoting test driver command.
- Args:
- args: Command line args, used for test-case startup tasks.
- command: Chromoting Test Driver command line.
- Returns:
- command, host_log_file_names: Tuple of:
- "command" if there was a test-environment failure, or any failing test, and
- list of host-log file-names.
- """
- host_log_file_names = []
- host_log_file_names.append(TestCaseSetup(args))
- # Parse the me2me host log to obtain the JID that the host registered.
- host_jid = GetJidFromHostLog(host_log_file_names[-1])
- if not host_jid:
- # Host-JID not found in log. Let's not attempt to run this test.
- print('Host-JID not found in log %s.' % host_log_file_names[-1])
- return '[Command failed]: %s, %s' % (command, host_log_file_names)
- retries = 0
- failed_tests_list = []
- # TODO(anandc): Remove this retry-logic once http://crbug/570840 is fixed.
- while retries <= MAX_RETRIES:
- # In order to ensure the host is online with the expected JID, pass in the
- # jid obtained from the host-log as a command-line parameter.
- command = command.replace('\n', '') + ' --hostjid=%s' % host_jid
- results = RunCommandInSubProcess(command)
- tear_down_index = results.find(TEST_ENVIRONMENT_TEAR_DOWN_INDICATOR)
- if tear_down_index == -1:
- # The test environment did not tear down. Something went horribly wrong.
- return '[Command failed]: ' + command, host_log_file_names
- end_results_list = results[tear_down_index:].split('\n')
- test_failed = False
- for result in end_results_list:
- if result.startswith(FAILED_INDICATOR):
- test_failed = True
- if retries == MAX_RETRIES:
- # Test failed and we have no more retries left.
- failed_tests_list.append(result)
- if test_failed:
- retries += 1
- else:
- break
- if failed_tests_list:
- test_result = '[Command]: ' + command
- # Note: Skipping the first one is intentional.
- for i in range(1, len(failed_tests_list)):
- test_result += ' ' + failed_tests_list[i]
- return test_result, host_log_file_names
- # All tests passed!
- return '', host_log_file_names
- def main(args):
- InitialiseTestMachineForLinux(args.cfg_file)
- failed_tests = ''
- host_log_files = []
- with open(args.commands_file) as f:
- for line in f:
- # Replace the PROD_DIR value in the command-line with
- # the passed in value.
- line = line.replace(PROD_DIR_ID, args.prod_dir)
- # Launch specified command line for test.
- test_results, log_files = LaunchCTDCommand(args, line)
- failed_tests += test_results
- host_log_files.extend(log_files)
- # All tests completed. Include host-logs in the test results.
- PrintHostLogContents(host_log_files)
- return failed_tests, host_log_files
- if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument('-f', '--commands_file',
- help='path to file listing commands to be launched.')
- parser.add_argument('-p', '--prod_dir',
- help='path to folder having product and test binaries.')
- parser.add_argument('-c', '--cfg_file',
- help='path to test host config file.')
- parser.add_argument('--me2me_manifest_file',
- help='path to me2me host manifest file.')
- parser.add_argument('--it2me_manifest_file',
- help='path to it2me host manifest file.')
- parser.add_argument(
- '-u', '--user_profile_dir',
- help='path to user-profile-dir, used by connect-to-host tests.')
- command_line_args = parser.parse_args()
- host_logs = ''
- failing_tests = ''
- try:
- failing_tests, host_logs = main(command_line_args)
- if failing_tests:
- print('++++++++++FAILED TESTS++++++++++')
- print(failing_tests.rstrip('\n'))
- print('++++++++++++++++++++++++++++++++')
- raise Exception('At least one test failed.')
- finally:
- # Stop host and cleanup user-profile-dir.
- TestMachineCleanup(command_line_args.user_profile_dir, host_logs)
|