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

Side by Side Diff: build/android/provision_devices.py

Issue 13649010: Add provision_devices step to all Android testers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address ilevy's comments Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « build/android/buildbot/bb_device_steps.py ('k') | no next file » | 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 # 2 #
3 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Provisions Android devices with settings required for bots. 7 """Provisions Android devices with settings required for bots.
8 8
9 Usage: 9 Usage:
10 ./provision_devices.py [-d <device serial number>] 10 ./provision_devices.py [-d <device serial number>]
11 """ 11 """
12 12
13 import optparse 13 import optparse
14 import os 14 import os
15 import re 15 import re
16 import subprocess 16 import subprocess
17 import sys 17 import sys
18 import time 18 import time
19 19
20 from pylib import android_commands 20 from pylib import android_commands
21 from pylib import constants 21 from pylib import constants
22 22
23 23
24 def PushAndLaunchAdbReboot(device, target):
25 """Pushes and launches the adb_reboot binary on the device.
26
27 Arguments:
28 device: The serial number of the device to which the
29 adb_reboot binary should be pushed.
30 target: The build target (example, Debug or Release) which helps in
31 locating the adb_reboot binary.
32 """
33 print 'Will push and launch adb_reboot on %s' % device
34 android_cmd = android_commands.AndroidCommands(device)
35 # Kill if adb_reboot is already running.
36 android_cmd.KillAllBlocking('adb_reboot', 2)
37 # Push adb_reboot
38 print ' Pushing adb_reboot ...'
39 adb_reboot = os.path.join(constants.CHROME_DIR,
40 'out/%s/adb_reboot' % target)
41 android_cmd.PushIfNeeded(adb_reboot, '/data/local/')
42 # Launch adb_reboot
43 print ' Launching adb_reboot ...'
44 p = subprocess.Popen(['adb', '-s', device, 'shell'], stdin=subprocess.PIPE)
45 p.communicate('/data/local/adb_reboot; exit\n')
46
47
48 def LaunchHostHeartbeat(): 24 def LaunchHostHeartbeat():
49 ps = subprocess.Popen(['ps', 'aux'], stdout = subprocess.PIPE) 25 ps = subprocess.Popen(['ps', 'aux'], stdout = subprocess.PIPE)
50 stdout, _ = ps.communicate() 26 stdout, _ = ps.communicate()
51 matches = re.findall('\\n.*host_heartbeat.*', stdout) 27 matches = re.findall('\\n.*host_heartbeat.*', stdout)
52 for match in matches: 28 for match in matches:
53 print 'An instance of host heart beart already running... will kill' 29 print 'An instance of host heart beart already running... will kill'
54 pid = re.findall('(\d+)', match)[1] 30 pid = re.findall('(\d+)', match)[1]
55 subprocess.call(['kill', str(pid)]) 31 subprocess.call(['kill', str(pid)])
56 # Launch a new host_heartbeat 32 # Launch a new host_heartbeat
57 print 'Spawing host heartbeat...' 33 print 'Spawning host heartbeat...'
58 subprocess.Popen([os.path.join(constants.CHROME_DIR, 34 subprocess.Popen([os.path.join(constants.CHROME_DIR,
59 'build/android/host_heartbeat.py')]) 35 'build/android/host_heartbeat.py')])
60 36
61 37
38 def PushAndLaunchAdbReboot(devices, target):
39 """Pushes and launches the adb_reboot binary on the device.
40
41 Arguments:
42 devices: The list of serial numbers of the device to which the
43 adb_reboot binary should be pushed.
44 target : The build target (example, Debug or Release) which helps in
45 locating the adb_reboot binary.
46 """
47 for device in devices:
48 print 'Will push and launch adb_reboot on %s' % device
49 android_cmd = android_commands.AndroidCommands(device)
50 # Kill if adb_reboot is already running.
51 android_cmd.KillAllBlocking('adb_reboot', 2)
52 # Push adb_reboot
53 print ' Pushing adb_reboot ...'
54 adb_reboot = os.path.join(constants.CHROME_DIR,
55 'out/%s/adb_reboot' % target)
56 android_cmd.PushIfNeeded(adb_reboot, '/data/local/')
57 # Launch adb_reboot
58 print ' Launching adb_reboot ...'
59 p = subprocess.Popen(['adb', '-s', device, 'shell'], stdin=subprocess.PIPE)
60 p.communicate('/data/local/adb_reboot; exit\n')
61 LaunchHostHeartbeat()
62
63
62 def ProvisionDevices(options): 64 def ProvisionDevices(options):
63 if options.device is not None: 65 if options.device is not None:
64 devices = [options.device] 66 devices = [options.device]
65 else: 67 else:
66 devices = android_commands.GetAttachedDevices() 68 devices = android_commands.GetAttachedDevices()
67 for device in devices: 69 for device in devices:
68 android_cmd = android_commands.AndroidCommands(device) 70 android_cmd = android_commands.AndroidCommands(device)
69 android_cmd.RunShellCommand('su -c date -u %f' % time.time()) 71 android_cmd.RunShellCommand('su -c date -u %f' % time.time())
70 PushAndLaunchAdbReboot(device, options.target) 72 if options.auto_reconnect:
71 LaunchHostHeartbeat() 73 PushAndLaunchAdbReboot(devices, options.target)
72 74
73 75
74 def main(argv): 76 def main(argv):
75 parser = optparse.OptionParser() 77 parser = optparse.OptionParser()
76 parser.add_option('-d', '--device', 78 parser.add_option('-d', '--device',
77 help='The serial number of the device to be provisioned') 79 help='The serial number of the device to be provisioned')
78 parser.add_option('-t', '--target', 80 parser.add_option('-t', '--target', default='Debug', help='The build target')
79 help='Path to the adb_reboot binary') 81 parser.add_option(
82 '-r', '--auto-reconnect', action='store_true',
83 help='Push binary which will reboot the device on adb disconnections.')
80 options, args = parser.parse_args(argv[1:]) 84 options, args = parser.parse_args(argv[1:])
81 85
82 if args: 86 if args:
83 print >> sys.stderr, 'Unused args %s' % args 87 print >> sys.stderr, 'Unused args %s' % args
84 return 1 88 return 1
85 89
86 if not options.target:
87 print >> sys.stderr, 'Build target not specified'
88 return 1
89
90 ProvisionDevices(options) 90 ProvisionDevices(options)
91 91
92 92
93 if __name__ == '__main__': 93 if __name__ == '__main__':
94 sys.exit(main(sys.argv)) 94 sys.exit(main(sys.argv))
OLDNEW
« no previous file with comments | « build/android/buildbot/bb_device_steps.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698