| #!/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. |
| |
| import argparse |
| import sys |
| |
| |
| def _ExtractQueuedTestName(line): |
| _, test_name, _ = line.split(' ') |
| return test_name |
| |
| |
| def _ExtractPassedTestNameAndTime(line): |
| _, test_name, _, test_time_string = line.split(' ') |
| if test_time_string.endswith(':'): |
| test_time = float(test_time_string[:-2]) |
| else: |
| test_time = float(test_time_string[:-1]) |
| return test_name, test_time |
| |
| |
| def _IsQueued(line): |
| return line.endswith(' queued') |
| |
| |
| def _IsPassed(line): |
| return 'passed' in line.split(' ') |
| |
| |
| def _ProcessLogFile(file_path): |
| passed_unittests = [] |
| queued_unittests = [] |
| with open(file_path, 'r') as f: |
| for line in f: |
| line = line.strip() |
| if not line.startswith('['): |
| continue |
| if _IsQueued(line): |
| queued_unittests.append(_ExtractQueuedTestName(line)) |
| elif _IsPassed(line): |
| passed_unittests.append(_ExtractPassedTestNameAndTime(line)) |
| queued_unittests.sort() |
| passed_unittests.sort(key=lambda v: -v[1]) |
| return queued_unittests, passed_unittests |
| |
| |
| def main(args): |
| parser = argparse.ArgumentParser( |
| description=('Process telemetry unittests log to print out passed ' |
| 'or queued tests.')) |
| parser.add_argument( |
| 'filepath', help='path to log file of telemetry unittest') |
| parser.add_argument( |
| '-q', '--list-queued-tests', action='store_true', |
| help='Also list all the queued telemetry unittests') |
| options = parser.parse_args(args) |
| queued_unittests, passed_unittests = _ProcessLogFile(options.filepath) |
| print 'All passed telemetry unittests:\n' |
| for test, time in passed_unittests: |
| print test, time |
| if options.list_queued_tests: |
| print 'All queued telemetry unittests:\n' |
| print '\n'.join(queued_unittests) |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv[1:])) |