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

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: 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
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 if options.target:
Isaac (away) 2013/04/05 05:41:18 I think you can remove this check if we have a def
Siva Chandra 2013/04/05 20:55:31 Done.
74 PushAndLaunchAdbReboot(devices, options.target)
75 else:
76 print sys.stderr, 'Target to pick the adb_reboot from not specified.'
77 return 1
72 78
73 79
74 def main(argv): 80 def main(argv):
75 parser = optparse.OptionParser() 81 parser = optparse.OptionParser()
76 parser.add_option('-d', '--device', 82 parser.add_option('-d', '--device',
77 help='The serial number of the device to be provisioned') 83 help='The serial number of the device to be provisioned')
78 parser.add_option('-t', '--target', 84 parser.add_option('-t', '--target', help='The build target')
Isaac (away) 2013/04/05 05:41:18 let's default this to 'Debug'
Siva Chandra 2013/04/05 20:55:31 Done.
79 help='Path to the adb_reboot binary') 85 parser.add_option(
86 '-r', '--auto-reconnect', action='store_true',
87 help='Specify that the adb_reboot binary should be pushed to the devices')
Isaac (away) 2013/04/05 05:41:18 'Push binary which will reboot the device on adb d
Siva Chandra 2013/04/05 20:55:31 Done.
80 options, args = parser.parse_args(argv[1:]) 88 options, args = parser.parse_args(argv[1:])
81 89
82 if args: 90 if args:
83 print >> sys.stderr, 'Unused args %s' % args 91 print >> sys.stderr, 'Unused args %s' % args
84 return 1 92 return 1
85 93
86 if not options.target: 94 return ProvisionDevices(options)
87 print >> sys.stderr, 'Build target not specified'
88 return 1
89
90 ProvisionDevices(options)
91 95
92 96
93 if __name__ == '__main__': 97 if __name__ == '__main__':
94 sys.exit(main(sys.argv)) 98 sys.exit(main(sys.argv))
OLDNEW
« build/android/buildbot/bb_device_steps.py ('K') | « 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