| Index: testing/chromoting/multi_machine_example/example_test_controller.py
|
| diff --git a/testing/chromoting/multi_machine_example/example_test_controller.py b/testing/chromoting/multi_machine_example/example_test_controller.py
|
| deleted file mode 100755
|
| index 2ba2024c1c7faf671ab08b27f44d788e443f0734..0000000000000000000000000000000000000000
|
| --- a/testing/chromoting/multi_machine_example/example_test_controller.py
|
| +++ /dev/null
|
| @@ -1,143 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# 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.
|
| -
|
| -"""The test controller for the chromoting localhost browser_tests.
|
| -
|
| -This test uses the legion framework to setup this controller which will run
|
| -the chromoting_integration_tests on a task machine. This is intended to be an
|
| -example Legion-based test for the chromoting team.
|
| -
|
| -The controller will start a task machine to run browser_tests_launcher on. The
|
| -output of these tests are streamed back to the test controller to be output
|
| -on the controller's stdout and stderr channels. The final test output is then
|
| -read and becomes the final output of the controller, mirroring the test's
|
| -pass/fail result.
|
| -"""
|
| -
|
| -import argparse
|
| -import logging
|
| -import os
|
| -import sys
|
| -import time
|
| -
|
| -# Map the legion directory so we can import the host controller.
|
| -SRC_DIR = os.path.join('..', '..', '..')
|
| -sys.path.append(os.path.join(SRC_DIR, 'testing'))
|
| -from legion import test_controller
|
| -
|
| -
|
| -class ExampleController(test_controller.TestController):
|
| - """The test controller for the Chromoting browser_tests."""
|
| -
|
| - def __init__(self):
|
| - super(ExampleController, self).__init__()
|
| - self.task = None
|
| - self.args = None
|
| -
|
| - def RunTest(self):
|
| - """Main method to run the test code."""
|
| - self.ParseArgs()
|
| - self.CreateTask()
|
| - self.TestIntegrationTests()
|
| -
|
| - def CreateBrowserTestsLauncherCommand(self):
|
| - return [
|
| - 'python',
|
| - self.TaskAbsPath('../browser_tests_launcher.py'),
|
| - '--commands_file', self.TaskAbsPath(self.args.commands_file),
|
| - '--prod_dir', self.TaskAbsPath(self.args.prod_dir),
|
| - '--cfg_file', self.TaskAbsPath(self.args.cfg_file),
|
| - '--me2me_manifest_file', self.TaskAbsPath(
|
| - self.args.me2me_manifest_file),
|
| - '--it2me_manifest_file', self.TaskAbsPath(
|
| - self.args.it2me_manifest_file),
|
| - '--user_profile_dir', self.args.user_profile_dir,
|
| - ]
|
| -
|
| - def TaskAbsPath(self, path):
|
| - """Returns the absolute path to the resource on the task machine.
|
| -
|
| - Args:
|
| - path: The relative path to the resource.
|
| -
|
| - Since the test controller and the task machines run in different tmp dirs
|
| - on different machines the absolute path cannot be calculated correctly on
|
| - this machine. This function maps the relative path (from this directory)
|
| - to an absolute path on the task machine.
|
| - """
|
| - return self.task.rpc.AbsPath(path)
|
| -
|
| - def CreateTask(self):
|
| - """Creates a task object and sets the proper values."""
|
| - self.task = self.CreateNewTask(
|
| - isolated_hash=self.args.task_machine,
|
| - dimensions={'os': 'Ubuntu-14.04', 'pool': 'Chromoting'})
|
| - self.task.Create()
|
| - self.task.WaitForConnection()
|
| -
|
| - def ParseArgs(self):
|
| - """Gets the command line args."""
|
| - parser = argparse.ArgumentParser()
|
| - parser.add_argument('--task_machine',
|
| - help='isolated hash of the task machine.')
|
| - # The rest of the args are taken from
|
| - # testing/chromoting/browser_tests_launcher.py.
|
| - 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.')
|
| - self.args, _ = parser.parse_known_args()
|
| -
|
| - def TestIntegrationTests(self):
|
| - """Runs the integration tests via browser_tests_launcher.py."""
|
| - # Create a process object, configure it, and start it.
|
| - # All interactions with the process are based on this "proc" key.
|
| - proc = self.task.rpc.subprocess.Process(
|
| - self.CreateBrowserTestsLauncherCommand())
|
| - # Set the cwd to browser_tests_launcher relative to this directory.
|
| - # This allows browser_test_launcher to use relative paths.
|
| - self.task.rpc.subprocess.SetCwd(proc, '../')
|
| - # Set the task verbosity to true to allow stdout/stderr to be echo'ed to
|
| - # run_task's stdout/stderr on the task machine. This can assist in
|
| - # debugging.
|
| - self.task.rpc.subprocess.SetVerbose(proc)
|
| - # Set the process as detached to create it in a new process group.
|
| - self.task.rpc.subprocess.SetDetached(proc)
|
| - # Start the actual process on the task machine.
|
| - self.task.rpc.subprocess.Start(proc)
|
| -
|
| - # Collect the stdout/stderr and emit it from this controller while the
|
| - # process is running.
|
| - while self.task.rpc.subprocess.Poll(proc) is None:
|
| - # Output the test's stdout and stderr in semi-realtime.
|
| - # This is not true realtime due to the RPC calls and the 1s sleep.
|
| - stdout, stderr = self.task.rpc.subprocess.ReadOutput(proc)
|
| - if stdout:
|
| - sys.stdout.write(stdout)
|
| - if stderr:
|
| - sys.stderr.write(stderr)
|
| - time.sleep(1)
|
| -
|
| - # Get the return code, clean up the process object.
|
| - returncode = self.task.rpc.subprocess.GetReturncode(proc)
|
| - self.task.rpc.subprocess.Delete(proc)
|
| -
|
| - # Pass or fail depending on the return code from the browser_tests_launcher.
|
| - if returncode != 0:
|
| - raise AssertionError('browser_tests_launcher failed with return code '
|
| - '%i' % returncode)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - ExampleController().RunController()
|
|
|