"""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))
host_jid = GetJidFromHostLog(host_log_file_names[-1])
if not host_jid:
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 = []
while retries <= MAX_RETRIES:
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:
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:
failed_tests_list.append(result)
if test_failed:
retries += 1
else:
break
if failed_tests_list:
test_result = '[Command]: ' + command
for i in range(1, len(failed_tests_list)):
test_result += ' ' + failed_tests_list[i]
return test_result, host_log_file_names
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:
line = line.replace(PROD_DIR_ID, args.prod_dir)
test_results, log_files = LaunchCTDCommand(args, line)
failed_tests += test_results
host_log_files.extend(log_files)
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:
TestMachineCleanup(command_line_args.user_profile_dir, host_logs)