| Index: tools/isolate/trace_test_cases.py
|
| diff --git a/tools/isolate/trace_test_cases.py b/tools/isolate/trace_test_cases.py
|
| deleted file mode 100755
|
| index 1cd7b3865fb4c9b5eed63fa63374e6fdb618df4f..0000000000000000000000000000000000000000
|
| --- a/tools/isolate/trace_test_cases.py
|
| +++ /dev/null
|
| @@ -1,127 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 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.
|
| -
|
| -"""Traces each test cases of a google-test executable individually.
|
| -
|
| -Gives detailed information about each test case. The logs can be read afterward
|
| -with ./trace_inputs.py read -l /path/to/executable.logs
|
| -"""
|
| -
|
| -import logging
|
| -import multiprocessing
|
| -import os
|
| -import sys
|
| -import time
|
| -
|
| -import run_test_cases
|
| -import trace_inputs
|
| -
|
| -BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
| -ROOT_DIR = os.path.dirname(os.path.dirname(BASE_DIR))
|
| -
|
| -
|
| -class Tracer(object):
|
| - def __init__(self, tracer, cmd, cwd_dir, progress):
|
| - # Constants
|
| - self.tracer = tracer
|
| - self.cmd = cmd[:]
|
| - self.cwd_dir = cwd_dir
|
| - self.progress = progress
|
| -
|
| - def map(self, test_case):
|
| - """Traces a single test case and returns its output."""
|
| - cmd = self.cmd[:]
|
| - cmd.append('--gtest_filter=%s' % test_case)
|
| - tracename = test_case.replace('/', '-')
|
| -
|
| - out = []
|
| - for retry in range(5):
|
| - start = time.time()
|
| - returncode, output = self.tracer.trace(
|
| - cmd, self.cwd_dir, tracename, True)
|
| - duration = time.time() - start
|
| - # TODO(maruel): Define a way to detect if an strace log is valid.
|
| - valid = True
|
| - out.append(
|
| - {
|
| - 'test_case': test_case,
|
| - 'returncode': returncode,
|
| - 'duration': duration,
|
| - 'valid': valid,
|
| - 'output': output,
|
| - })
|
| - logging.debug(
|
| - 'Tracing %s done: %d, %.1fs' % (test_case, returncode, duration))
|
| - if retry:
|
| - self.progress.update_item(
|
| - '%s - %d' % (test_case, retry), True, not valid)
|
| - else:
|
| - self.progress.update_item(test_case, True, not valid)
|
| - if valid:
|
| - break
|
| - return out
|
| -
|
| -
|
| -def trace_test_cases(cmd, cwd_dir, test_cases, jobs, logname):
|
| - """Traces test cases one by one."""
|
| - assert os.path.isabs(cwd_dir) and os.path.isdir(cwd_dir)
|
| -
|
| - if not test_cases:
|
| - return 0
|
| -
|
| - # Resolve any symlink.
|
| - cwd_dir = os.path.realpath(cwd_dir)
|
| - assert os.path.isdir(cwd_dir)
|
| -
|
| - progress = run_test_cases.Progress(len(test_cases))
|
| - with run_test_cases.ThreadPool(jobs or multiprocessing.cpu_count()) as pool:
|
| - api = trace_inputs.get_api()
|
| - api.clean_trace(logname)
|
| - with api.get_tracer(logname) as tracer:
|
| - function = Tracer(tracer, cmd, cwd_dir, progress).map
|
| - for test_case in test_cases:
|
| - pool.add_task(function, test_case)
|
| -
|
| - pool.join(progress, 0.1)
|
| - print('')
|
| - return 0
|
| -
|
| -
|
| -def main():
|
| - """CLI frontend to validate arguments."""
|
| - parser = run_test_cases.OptionParserTestCases(
|
| - usage='%prog <options> [gtest]',
|
| - description=sys.modules['__main__'].__doc__)
|
| - parser.format_description = lambda *_: parser.description
|
| - parser.add_option(
|
| - '-o', '--out',
|
| - help='output file, defaults to <executable>.test_cases')
|
| - options, args = parser.parse_args()
|
| -
|
| - if not args:
|
| - parser.error(
|
| - 'Please provide the executable line to run, if you need fancy things '
|
| - 'like xvfb, start this script from *inside* xvfb, it\'ll be much faster'
|
| - '.')
|
| -
|
| - cmd = run_test_cases.fix_python_path(args)
|
| -
|
| - if not options.out:
|
| - options.out = '%s.test_cases' % cmd[-1]
|
| -
|
| - test_cases = parser.process_gtest_options(cmd, options)
|
| -
|
| - # Then run them.
|
| - return trace_test_cases(
|
| - cmd,
|
| - os.getcwd(),
|
| - test_cases,
|
| - options.jobs,
|
| - # TODO(maruel): options.timeout,
|
| - options.out)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|