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

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

Issue 2767633003: Revert of (Reland) Use logdog butler subcommand to run tests. (Closed)
Patch Set: 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
14 15
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')
29 16
30 def CommandParser(): 17 def CommandParser():
31 # Parses the command line arguments being passed in 18 # Parses the command line arguments being passed in
32 parser = argparse.ArgumentParser() 19 parser = argparse.ArgumentParser()
33 parser.add_argument('--target', required=True,
34 help='The test target to be run.')
35 parser.add_argument('--logdog-bin-cmd', required=True, 20 parser.add_argument('--logdog-bin-cmd', required=True,
36 help='The logdog bin cmd.') 21 help='Command for running logdog butler binary')
37 parser.add_argument('--target-devices-file', required=False, 22 parser.add_argument('--project', required=True,
38 help='The target devices file.') 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')
39 return parser 35 return parser
40 36
41 def CreateStopTestsMethod(proc): 37
42 def StopTests(signum, _frame): 38 def CreateUrl(server, project, prefix, name):
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):
43 logging.error('Forwarding signal %s to test process', str(signum)) 45 logging.error('Forwarding signal %s to test process', str(signum))
44 proc.send_signal(signum) 46 proc.send_signal(signum)
45 return StopTests 47
48 return handler
49
46 50
47 def main(): 51 def main():
48 parser = CommandParser() 52 parser = CommandParser()
49 args, extra_cmd_args = parser.parse_known_args(sys.argv[1:]) 53 args, test_cmd = parser.parse_known_args(sys.argv[1:])
54 logging.basicConfig(level=logging.INFO)
55 if not test_cmd:
56 parser.error('Must specify command to run after the logdog flags')
57 test_proc = subprocess.Popen(test_cmd)
58 original_sigterm_handler = signal.signal(
59 signal.SIGTERM, CreateSignalForwarder(test_proc))
60 try:
61 result = test_proc.wait()
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]
50 75
51 logging.basicConfig(level=logging.INFO) 76 if not os.path.exists(args.logdog_bin_cmd):
52 with tempfile_ext.NamedTemporaryDirectory() as logcat_output_dir: 77 logging.error(
53 test_cmd = [ 78 'Logdog binary %s unavailable. Unable to upload logcats.',
54 os.path.join('bin', 'run_%s' % args.target), 79 args.logdog_bin_cmd)
55 '--logcat-output-file', os.path.join(logcat_output_dir, 'logcats'), 80 elif not os.path.exists(args.source):
56 '--upload-logcats-file', 81 logging.error(
57 '--target-devices-file', args.target_devices_file, 82 'Logcat sources not found at %s. Unable to upload logcats.',
58 '-v'] + extra_cmd_args 83 args.source)
84 else:
85 subprocess.call(logdog_cmd)
86 logging.info('Logcats are located at: %s', url)
87 return result
59 88
60 with tempfile_ext.NamedTemporaryDirectory(
61 prefix='tmp_android_logdog_wrapper') as temp_directory:
62 if not os.path.exists(args.logdog_bin_cmd):
63 logging.error(
64 'Logdog binary %s unavailable. Unable to create logdog client',
65 args.logdog_bin_cmd)
66 else:
67 streamserver_uri = 'unix:%s' % os.path.join(temp_directory,
68 'butler.sock')
69 prefix = os.path.join('android', 'swarming', 'logcats',
70 os.environ.get('SWARMING_TASK_ID'))
71
72 # Call test_cmdline through logdog butler subcommand.
73 test_cmd = [
74 args.logdog_bin_cmd, '-project', PROJECT,
75 '-output', OUTPUT,
76 '-prefix', prefix,
77 '--service-account-json', SERVICE_ACCOUNT_JSON,
78 '-coordinator-host', COORDINATOR_HOST,
79 'run', '-streamserver-uri', streamserver_uri, '--'] + test_cmd
80
81 test_proc = subprocess.Popen(test_cmd)
82 with signal_handler.SignalHandler(signal.SIGTERM,
83 CreateStopTestsMethod(test_proc)):
84 result = test_proc.wait()
85 return result
86 89
87 if __name__ == '__main__': 90 if __name__ == '__main__':
88 sys.exit(main()) 91 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