Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: build/android/test_wrapper/logdog_wrapper.py

Issue 2695963003: Use logdog butler subcommand to run tests. (Closed)
Patch Set: adjust to new test_runner.py Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/test_runner.py ('k') | build/android/test_wrapper/logdog_wrapper.pydeps » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Wrapper for adding logdog streaming support to swarming tasks.""" 6 """Wrapper for adding logdog streaming support to swarming tasks."""
7 7
8 import argparse 8 import argparse
9 import logging 9 import logging
10 import os 10 import os
11 import signal 11 import signal
12 import subprocess 12 import subprocess
13 import sys 13 import sys
14 import urllib
15 14
15 _SRC_PATH = os.path.abspath(os.path.join(
16 os.path.dirname(__file__), '..', '..', '..'))
17 sys.path.append(os.path.join(_SRC_PATH, 'third_party', 'catapult', 'devil'))
18 sys.path.append(os.path.join(_SRC_PATH, 'third_party', 'catapult', 'common',
19 'py_utils'))
20
21 from devil.utils import signal_handler
22 from py_utils import tempfile_ext
23
24 PROJECT = 'chromium'
25 OUTPUT = 'logdog'
26 COORDINATOR_HOST = 'luci-logdog.appspot.com'
27 SERVICE_ACCOUNT_JSON = ('/creds/service_accounts'
28 '/service-account-luci-logdog-publisher.json')
16 29
17 def CommandParser(): 30 def CommandParser():
18 # Parses the command line arguments being passed in 31 # Parses the command line arguments being passed in
19 parser = argparse.ArgumentParser() 32 parser = argparse.ArgumentParser()
33 parser.add_argument('--target', required=True,
34 help='The test target to be run.')
20 parser.add_argument('--logdog-bin-cmd', required=True, 35 parser.add_argument('--logdog-bin-cmd', required=True,
21 help='Command for running logdog butler binary') 36 help='The logdog bin cmd.')
22 parser.add_argument('--project', required=True,
23 help='Name of logdog project')
24 parser.add_argument('--logdog-server',
25 default='services-dot-luci-logdog.appspot.com',
26 help='URL of logdog server, https:// is assumed.')
27 parser.add_argument('--service-account-json', required=True,
28 help='Location of authentication json')
29 parser.add_argument('--prefix', required=True,
30 help='Prefix to be used for logdog stream')
31 parser.add_argument('--source', required=True,
32 help='Location of file for logdog to stream')
33 parser.add_argument('--name', required=True,
34 help='Name to be used for logdog stream')
35 return parser 37 return parser
36 38
37 39 def CreateStopTestsMethod(proc):
38 def CreateUrl(server, project, prefix, name): 40 def StopTests(signum, _frame):
39 stream_name = '%s/%s/+/%s' % (project, prefix, name)
40 return 'https://%s/v/?s=%s' % (server, urllib.quote_plus(stream_name))
41
42
43 def CreateSignalForwarder(proc):
44 def handler(signum, _frame):
45 logging.error('Forwarding signal %s to test process', str(signum)) 41 logging.error('Forwarding signal %s to test process', str(signum))
46 proc.send_signal(signum) 42 proc.send_signal(signum)
47 43 return StopTests
48 return handler
49
50 44
51 def main(): 45 def main():
52 parser = CommandParser() 46 parser = CommandParser()
53 args, test_cmd = parser.parse_known_args(sys.argv[1:]) 47 args, extra_cmd_args = parser.parse_known_args(sys.argv[1:])
48
54 logging.basicConfig(level=logging.INFO) 49 logging.basicConfig(level=logging.INFO)
55 if not test_cmd: 50 with tempfile_ext.NamedTemporaryDirectory() as logcat_output_dir:
56 parser.error('Must specify command to run after the logdog flags') 51 test_cmd = [
57 test_proc = subprocess.Popen(test_cmd) 52 os.path.join('bin', 'run_%s' % args.target),
58 original_sigterm_handler = signal.signal( 53 '--logcat-output-file', os.path.join(logcat_output_dir, 'logcats'),
59 signal.SIGTERM, CreateSignalForwarder(test_proc)) 54 '--upload-logcats-file',
60 try: 55 '--target-devices-file', '${SWARMING_BOT_FILE}',
61 result = test_proc.wait() 56 '-v'] + extra_cmd_args
62 finally:
63 signal.signal(signal.SIGTERM, original_sigterm_handler)
64 if '${SWARMING_TASK_ID}' in args.prefix:
65 args.prefix = args.prefix.replace('${SWARMING_TASK_ID}',
66 os.environ.get('SWARMING_TASK_ID'))
67 url = CreateUrl('luci-logdog.appspot.com', args.project, args.prefix,
68 args.name)
69 logdog_cmd = [args.logdog_bin_cmd, '-project', args.project,
70 '-output', 'logdog,host=%s' % args.logdog_server,
71 '-prefix', args.prefix,
72 '-service-account-json', args.service_account_json,
73 'stream', '-source', args.source,
74 '-stream', '-name=%s' % args.name]
75 57
76 if not os.path.exists(args.logdog_bin_cmd): 58 with tempfile_ext.NamedTemporaryDirectory(
77 logging.error( 59 prefix='tmp_android_logdog_wrapper') as temp_directory:
78 'Logdog binary %s unavailable. Unable to upload logcats.', 60 if not os.path.exists(args.logdog_bin_cmd):
79 args.logdog_bin_cmd) 61 logging.error(
80 elif not os.path.exists(args.source): 62 'Logdog binary %s unavailable. Unable to create logdog client',
81 logging.error( 63 args.logdog_bin_cmd)
82 'Logcat sources not found at %s. Unable to upload logcats.', 64 else:
83 args.source) 65 streamserver_uri = 'unix:%s' % os.path.join(temp_directory,
84 else: 66 'butler.sock')
85 subprocess.call(logdog_cmd) 67 prefix = os.path.join('android', 'swarming', 'logcats',
86 logging.info('Logcats are located at: %s', url) 68 os.environ.get('SWARMING_TASK_ID'))
87 return result
88 69
70 # Call test_cmdline through logdog butler subcommand.
71 test_cmd = [
72 args.logdog_bin_cmd, '-project', PROJECT,
73 '-output', OUTPUT,
74 '-prefix', prefix,
75 '--service-account-json', SERVICE_ACCOUNT_JSON,
76 '-coordinator-host', COORDINATOR_HOST,
77 'run', '-streamserver-uri', streamserver_uri, '--'] + test_cmd
78
79 test_proc = subprocess.Popen(test_cmd)
80 with signal_handler.SignalHandler(signal.SIGTERM,
81 CreateStopTestsMethod(test_proc)):
82 result = test_proc.wait()
83 return result
89 84
90 if __name__ == '__main__': 85 if __name__ == '__main__':
91 sys.exit(main()) 86 sys.exit(main())
OLDNEW
« no previous file with comments | « build/android/test_runner.py ('k') | build/android/test_wrapper/logdog_wrapper.pydeps » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698