| Index: testing/legion/tools/legion.py
|
| diff --git a/testing/legion/tools/legion.py b/testing/legion/tools/legion.py
|
| deleted file mode 100755
|
| index 7b671335eeb86928b1a244ed740e10bd8a5f88b4..0000000000000000000000000000000000000000
|
| --- a/testing/legion/tools/legion.py
|
| +++ /dev/null
|
| @@ -1,159 +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.
|
| -
|
| -"""A helper module to run Legion multi-machine tests.
|
| -
|
| -Example usage with 1 task machine:
|
| -$ testing/legion/tools/legion.py run \
|
| - --controller-isolated out/Release/example_test_controller.isolated \
|
| - --dimension os Ubuntu-14.04 \
|
| - --task-name test-task-name \
|
| - --task task_machine out/Release/example_task_machine.isolated
|
| -
|
| -Example usage with 2 task machines with the same isolated file:
|
| -$ testing/legion/tools/legion.py run \
|
| - --controller-isolated out/Release/example_test_controller.isolated \
|
| - --dimension os Ubuntu-14.04 \
|
| - --task-name test-task-name \
|
| - --task task_machine_1 out/Release/example_task_machine.isolated \
|
| - --task task_machine_2 out/Release/example_task_machine.isolated
|
| -
|
| -Example usage with 2 task machines with different isolated file:
|
| -$ testing/legion/tools/legion.py run \
|
| - --controller-isolated out/Release/example_test_controller.isolated \
|
| - --dimension os Ubuntu-14.04 \
|
| - --task-name test-task-name \
|
| - --task task_machine_1 out/Release/example_task_machine_1.isolated \
|
| - --task task_machine_2 out/Release/example_task_machine_2.isolated
|
| -"""
|
| -
|
| -import argparse
|
| -import logging
|
| -import os
|
| -import subprocess
|
| -import sys
|
| -
|
| -
|
| -THIS_DIR = os.path.split(__file__)[0]
|
| -SWARMING_DIR = os.path.join(THIS_DIR, '..', '..', '..', 'tools',
|
| - 'swarming_client')
|
| -ISOLATE_PY = os.path.join(SWARMING_DIR, 'isolate.py')
|
| -SWARMING_PY = os.path.join(SWARMING_DIR, 'swarming.py')
|
| -LOGGING_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR']
|
| -
|
| -
|
| -class Error(Exception):
|
| - pass
|
| -
|
| -
|
| -def GetArgs():
|
| - parser = argparse.ArgumentParser(description=__doc__)
|
| - parser.add_argument('action', choices=['run', 'trigger'],
|
| - help='The swarming action to perform.')
|
| - parser.add_argument('-f', '--format-only', action='store_true',
|
| - help='If true the .isolated files are archived but '
|
| - 'swarming is not called, only the command line is built.')
|
| - parser.add_argument('--controller-isolated', required=True,
|
| - help='The isolated file for the test controller.')
|
| - parser.add_argument('--isolate-server', help='Optional. The isolated server '
|
| - 'to use.')
|
| - parser.add_argument('--swarming-server', help='Optional. The swarming server '
|
| - 'to use.')
|
| - parser.add_argument('--task-name', help='Optional. The swarming task name '
|
| - 'to use.')
|
| - parser.add_argument('--dimension', action='append', dest='dimensions',
|
| - nargs=2, default=[], help='Dimensions to pass to '
|
| - 'swarming.py. This is in the form of --dimension key '
|
| - 'value. The minimum required is --dimension os <OS>')
|
| - parser.add_argument('--task', action='append', dest='tasks',
|
| - nargs=2, default=[], help='List of task names used in '
|
| - 'the test controller. This is in the form of --task name '
|
| - '.isolated and is passed to the controller as --name '
|
| - '<ISOLATED HASH>.')
|
| - parser.add_argument('--controller-var', action='append',
|
| - dest='controller_vars', nargs=2, default=[],
|
| - help='Command line vars to pass to the controller. These '
|
| - 'are in the form of --controller-var name value and are '
|
| - 'passed to the controller as --name value.')
|
| - parser.add_argument('-v', '--verbosity', default=0, action='count')
|
| - return parser.parse_args()
|
| -
|
| -
|
| -def RunCommand(cmd, stream_stdout=False):
|
| - """Runs the command line and streams stdout if requested."""
|
| - kwargs = {
|
| - 'args': cmd,
|
| - 'stderr': subprocess.PIPE,
|
| - }
|
| - if not stream_stdout:
|
| - kwargs['stdout'] = subprocess.PIPE
|
| -
|
| - p = subprocess.Popen(**kwargs)
|
| - stdout, stderr = p.communicate()
|
| - if p.returncode:
|
| - raise Error(stderr)
|
| - if not stream_stdout:
|
| - logging.debug(stdout)
|
| - return stdout
|
| -
|
| -
|
| -def Archive(isolated, isolate_server=None):
|
| - """Calls isolate.py archive with the given args."""
|
| - cmd = [
|
| - sys.executable,
|
| - ISOLATE_PY,
|
| - 'archive',
|
| - '--isolated', isolated,
|
| - ]
|
| - if isolate_server:
|
| - cmd.extend(['--isolate-server', isolate_server])
|
| - print ' '.join(cmd)
|
| - return RunCommand(cmd).split()[0] # The isolated hash
|
| -
|
| -
|
| -def GetSwarmingCommandLine(args):
|
| - """Builds and returns the command line for swarming.py run|trigger."""
|
| - cmd = [
|
| - sys.executable,
|
| - SWARMING_PY,
|
| - args.action,
|
| - args.controller_isolated,
|
| - ]
|
| - if args.isolate_server:
|
| - cmd.extend(['--isolate-server', args.isolate_server])
|
| - if args.swarming_server:
|
| - cmd.extend(['--swarming', args.swarming_server])
|
| - if args.task_name:
|
| - cmd.extend(['--task-name', args.task_name])
|
| - # swarming.py dimensions
|
| - for name, value in args.dimensions:
|
| - cmd.extend(['--dimension', name, value])
|
| -
|
| - cmd.append('--')
|
| -
|
| - # Task name/hash values
|
| - for name, isolated in args.tasks:
|
| - cmd.extend(['--' + name, Archive(isolated, args.isolate_server)])
|
| - # Test controller args
|
| - for name, value in args.controller_vars:
|
| - cmd.extend(['--' + name, value])
|
| - print ' '.join(cmd)
|
| - return cmd
|
| -
|
| -
|
| -def main():
|
| - args = GetArgs()
|
| - logging.basicConfig(
|
| - format='%(asctime)s %(filename)s:%(lineno)s %(levelname)s] %(message)s',
|
| - datefmt='%H:%M:%S',
|
| - level=LOGGING_LEVELS[len(LOGGING_LEVELS)-args.verbosity-1])
|
| - cmd = GetSwarmingCommandLine(args)
|
| - if not args.format_only:
|
| - RunCommand(cmd, True)
|
| - return 0
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|