xref: /aosp_15_r20/development/tools/labpretest/labpretest.sh (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker#!/bin/bash
2*90c8c64dSAndroid Build Coastguard Worker#
3*90c8c64dSAndroid Build Coastguard Worker# Copyright 2010 Google Inc. All Rights Reserved.
4*90c8c64dSAndroid Build Coastguard Worker# Author: [email protected] (Bruce Gay)
5*90c8c64dSAndroid Build Coastguard Worker#
6*90c8c64dSAndroid Build Coastguard Worker# The labpretest.sh script is designed to emulate a typical automated test lab
7*90c8c64dSAndroid Build Coastguard Worker# session.  It puts a device into bootloader mode, reboots into bootloader mode,
8*90c8c64dSAndroid Build Coastguard Worker# determines device type, erases user cache, flashes a generic userdata image,
9*90c8c64dSAndroid Build Coastguard Worker# updates the bootloader image, updates the radio image, updates the system
10*90c8c64dSAndroid Build Coastguard Worker# image and reboots, sets up for a monkey run and finally runs a random monkey
11*90c8c64dSAndroid Build Coastguard Worker# test. It will repeat this based on an optional parameter(-i) or default to 100
12*90c8c64dSAndroid Build Coastguard Worker# times. It will detect if it is in a low battery situation and wait for it to
13*90c8c64dSAndroid Build Coastguard Worker# charge again.
14*90c8c64dSAndroid Build Coastguard Worker
15*90c8c64dSAndroid Build Coastguard Worker
16*90c8c64dSAndroid Build Coastguard WorkerCOUNT=100
17*90c8c64dSAndroid Build Coastguard WorkerROOT=$(cd `dirname $0` && pwd)
18*90c8c64dSAndroid Build Coastguard WorkerADB="$ROOT/tools/adb"
19*90c8c64dSAndroid Build Coastguard WorkerFASTBOOT="$ROOT/tools/fastboot"
20*90c8c64dSAndroid Build Coastguard WorkerMEVENTS=200
21*90c8c64dSAndroid Build Coastguard WorkerNOMONKEY=0
22*90c8c64dSAndroid Build Coastguard Worker
23*90c8c64dSAndroid Build Coastguard Workerbuildfile=''
24*90c8c64dSAndroid Build Coastguard Workerdevice=''
25*90c8c64dSAndroid Build Coastguard Workerproduct=''
26*90c8c64dSAndroid Build Coastguard Workerbootpart=''
27*90c8c64dSAndroid Build Coastguard Workerbootfile=''
28*90c8c64dSAndroid Build Coastguard Worker
29*90c8c64dSAndroid Build Coastguard Workerwhile getopts "d:i::m:xh" optionName; do
30*90c8c64dSAndroid Build Coastguard Worker  case "$optionName" in
31*90c8c64dSAndroid Build Coastguard Worker    d) device="$OPTARG";;
32*90c8c64dSAndroid Build Coastguard Worker    i) COUNT=$OPTARG;;
33*90c8c64dSAndroid Build Coastguard Worker    m) MEVENTS=$OPTARG;;
34*90c8c64dSAndroid Build Coastguard Worker    x) NOMONKEY=1;;
35*90c8c64dSAndroid Build Coastguard Worker    h) echo "options: [-d <device ID>, -i <loop count>, -m <monkey events> -x (skips monkey)]"; exit;;
36*90c8c64dSAndroid Build Coastguard Worker    *) echo "invalid parameter -$optionName"; exit -1;;
37*90c8c64dSAndroid Build Coastguard Worker  esac
38*90c8c64dSAndroid Build Coastguard Workerdone
39*90c8c64dSAndroid Build Coastguard Worker
40*90c8c64dSAndroid Build Coastguard Workerdeclare -r COUNT
41*90c8c64dSAndroid Build Coastguard Workerdeclare -r MEVENTS
42*90c8c64dSAndroid Build Coastguard Workerdeclare -r NOMONKEY
43*90c8c64dSAndroid Build Coastguard Worker
44*90c8c64dSAndroid Build Coastguard Worker
45*90c8c64dSAndroid Build Coastguard Worker################################################
46*90c8c64dSAndroid Build Coastguard Worker# Prints output to console with time stamp
47*90c8c64dSAndroid Build Coastguard Worker# Arguments:
48*90c8c64dSAndroid Build Coastguard Worker#   None
49*90c8c64dSAndroid Build Coastguard Worker# Returns:
50*90c8c64dSAndroid Build Coastguard Worker#   None
51*90c8c64dSAndroid Build Coastguard Worker################################################
52*90c8c64dSAndroid Build Coastguard Workerlog_print()
53*90c8c64dSAndroid Build Coastguard Worker{
54*90c8c64dSAndroid Build Coastguard Worker  if [ -z "$1" ]; then
55*90c8c64dSAndroid Build Coastguard Worker    echo "# $(date +'%D %T')"
56*90c8c64dSAndroid Build Coastguard Worker  else
57*90c8c64dSAndroid Build Coastguard Worker    echo "# $(date +'%D %T'): $1"
58*90c8c64dSAndroid Build Coastguard Worker  fi
59*90c8c64dSAndroid Build Coastguard Worker}
60*90c8c64dSAndroid Build Coastguard Worker
61*90c8c64dSAndroid Build Coastguard Worker################################################
62*90c8c64dSAndroid Build Coastguard Worker# Blocks until battery level is at least
63*90c8c64dSAndroid Build Coastguard Worker# above TARGET if below LIMIT
64*90c8c64dSAndroid Build Coastguard Worker# Globals:
65*90c8c64dSAndroid Build Coastguard Worker#   ADB
66*90c8c64dSAndroid Build Coastguard Worker#   device
67*90c8c64dSAndroid Build Coastguard Worker# Arguments:
68*90c8c64dSAndroid Build Coastguard Worker#   None
69*90c8c64dSAndroid Build Coastguard Worker# Returns:
70*90c8c64dSAndroid Build Coastguard Worker#   None
71*90c8c64dSAndroid Build Coastguard Worker################################################
72*90c8c64dSAndroid Build Coastguard Workerwait_for_battery()
73*90c8c64dSAndroid Build Coastguard Worker{
74*90c8c64dSAndroid Build Coastguard Worker  TARGET=80
75*90c8c64dSAndroid Build Coastguard Worker  LIMIT=20
76*90c8c64dSAndroid Build Coastguard Worker  local battery
77*90c8c64dSAndroid Build Coastguard Worker  local tick
78*90c8c64dSAndroid Build Coastguard Worker  log_print "checking battery level"
79*90c8c64dSAndroid Build Coastguard Worker  while [ "$battery" = "" ]; do
80*90c8c64dSAndroid Build Coastguard Worker    battery=`$ADB -s $device shell dumpsys battery | tr -d '\r' | awk '/level:/ {print $2}'`
81*90c8c64dSAndroid Build Coastguard Worker    sleep 2
82*90c8c64dSAndroid Build Coastguard Worker  done
83*90c8c64dSAndroid Build Coastguard Worker  if [ $battery -lt $LIMIT ]; then
84*90c8c64dSAndroid Build Coastguard Worker    log_print "Battery is low, waiting for charge"
85*90c8c64dSAndroid Build Coastguard Worker    while true; do
86*90c8c64dSAndroid Build Coastguard Worker      battery=`$ADB -s $device shell dumpsys battery | tr -d '\r' | awk '/level:/ {print $2}'`
87*90c8c64dSAndroid Build Coastguard Worker      if (( $battery >= $TARGET )); then break; fi
88*90c8c64dSAndroid Build Coastguard Worker      tick=$[$TARGET - $battery]
89*90c8c64dSAndroid Build Coastguard Worker      echo "battery charge level is $battery, sleeping for $tick seconds"
90*90c8c64dSAndroid Build Coastguard Worker      sleep $[$TARGET - $battery * 10]
91*90c8c64dSAndroid Build Coastguard Worker    done
92*90c8c64dSAndroid Build Coastguard Worker    log_print "resuming test run with battery level at $battery%"
93*90c8c64dSAndroid Build Coastguard Worker  else
94*90c8c64dSAndroid Build Coastguard Worker    log_print "resuming test run with battery level at $battery%"
95*90c8c64dSAndroid Build Coastguard Worker  fi
96*90c8c64dSAndroid Build Coastguard Worker}
97*90c8c64dSAndroid Build Coastguard Worker
98*90c8c64dSAndroid Build Coastguard Worker################################################
99*90c8c64dSAndroid Build Coastguard Worker# Blocks until device is in fastboot mode or
100*90c8c64dSAndroid Build Coastguard Worker# time out is reached
101*90c8c64dSAndroid Build Coastguard Worker# Globals:
102*90c8c64dSAndroid Build Coastguard Worker#   loop
103*90c8c64dSAndroid Build Coastguard Worker#   device
104*90c8c64dSAndroid Build Coastguard Worker# Arguments:
105*90c8c64dSAndroid Build Coastguard Worker#   None
106*90c8c64dSAndroid Build Coastguard Worker# Returns:
107*90c8c64dSAndroid Build Coastguard Worker#   None
108*90c8c64dSAndroid Build Coastguard Worker################################################
109*90c8c64dSAndroid Build Coastguard Workerfastboot_wait_for_device()
110*90c8c64dSAndroid Build Coastguard Worker{
111*90c8c64dSAndroid Build Coastguard Worker  local fdevice=""
112*90c8c64dSAndroid Build Coastguard Worker  local n=0
113*90c8c64dSAndroid Build Coastguard Worker  while [ "$device" != "$fdevice" -a $n -le 30 ]; do
114*90c8c64dSAndroid Build Coastguard Worker    sleep 6
115*90c8c64dSAndroid Build Coastguard Worker    fdevice=`$FASTBOOT devices | sed -n "s/\($device\).*/\1/ p"`
116*90c8c64dSAndroid Build Coastguard Worker    let n+=1
117*90c8c64dSAndroid Build Coastguard Worker  done
118*90c8c64dSAndroid Build Coastguard Worker  if [ $n -gt 30 ]; then
119*90c8c64dSAndroid Build Coastguard Worker    log_print "device time out after $loop iterations"
120*90c8c64dSAndroid Build Coastguard Worker    exit
121*90c8c64dSAndroid Build Coastguard Worker  else
122*90c8c64dSAndroid Build Coastguard Worker    log_print "device returned and available"
123*90c8c64dSAndroid Build Coastguard Worker  fi
124*90c8c64dSAndroid Build Coastguard Worker}
125*90c8c64dSAndroid Build Coastguard Worker
126*90c8c64dSAndroid Build Coastguard Worker################################################
127*90c8c64dSAndroid Build Coastguard Worker# reboots device into fastboot mode or
128*90c8c64dSAndroid Build Coastguard Worker# time out is reached
129*90c8c64dSAndroid Build Coastguard Worker# Globals:
130*90c8c64dSAndroid Build Coastguard Worker#   device
131*90c8c64dSAndroid Build Coastguard Worker#   ADB
132*90c8c64dSAndroid Build Coastguard Worker# Arguments:
133*90c8c64dSAndroid Build Coastguard Worker#   None
134*90c8c64dSAndroid Build Coastguard Worker# Returns:
135*90c8c64dSAndroid Build Coastguard Worker#   None
136*90c8c64dSAndroid Build Coastguard Worker################################################
137*90c8c64dSAndroid Build Coastguard Workerreboot_into_fastboot_from_adb()
138*90c8c64dSAndroid Build Coastguard Worker{
139*90c8c64dSAndroid Build Coastguard Worker  log_print "rebooting into bootloader and waiting for availability via fastboot"
140*90c8c64dSAndroid Build Coastguard Worker  $ADB -s $device reboot bootloader
141*90c8c64dSAndroid Build Coastguard Worker  fastboot_wait_for_device
142*90c8c64dSAndroid Build Coastguard Worker}
143*90c8c64dSAndroid Build Coastguard Worker
144*90c8c64dSAndroid Build Coastguard Worker################################################
145*90c8c64dSAndroid Build Coastguard Worker# reboots device into fastboot mode or
146*90c8c64dSAndroid Build Coastguard Worker# times out
147*90c8c64dSAndroid Build Coastguard Worker# Globals:
148*90c8c64dSAndroid Build Coastguard Worker#   device
149*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
150*90c8c64dSAndroid Build Coastguard Worker# Arguments:
151*90c8c64dSAndroid Build Coastguard Worker#   None
152*90c8c64dSAndroid Build Coastguard Worker# Returns:
153*90c8c64dSAndroid Build Coastguard Worker#   None
154*90c8c64dSAndroid Build Coastguard Worker################################################
155*90c8c64dSAndroid Build Coastguard Workerreboot_into_fastboot_from_fastboot()
156*90c8c64dSAndroid Build Coastguard Worker{
157*90c8c64dSAndroid Build Coastguard Worker  log_print "rebooting into bootloader and waiting for availability via fastboot"
158*90c8c64dSAndroid Build Coastguard Worker  $FASTBOOT -s $device reboot-bootloader
159*90c8c64dSAndroid Build Coastguard Worker  fastboot_wait_for_device
160*90c8c64dSAndroid Build Coastguard Worker}
161*90c8c64dSAndroid Build Coastguard Worker
162*90c8c64dSAndroid Build Coastguard Worker################################################
163*90c8c64dSAndroid Build Coastguard Worker# reboots device from fastboot to adb or
164*90c8c64dSAndroid Build Coastguard Worker# times out
165*90c8c64dSAndroid Build Coastguard Worker# Globals:
166*90c8c64dSAndroid Build Coastguard Worker#   device
167*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
168*90c8c64dSAndroid Build Coastguard Worker#   ADB
169*90c8c64dSAndroid Build Coastguard Worker# Arguments:
170*90c8c64dSAndroid Build Coastguard Worker#   None
171*90c8c64dSAndroid Build Coastguard Worker# Returns:
172*90c8c64dSAndroid Build Coastguard Worker#   None
173*90c8c64dSAndroid Build Coastguard Worker################################################
174*90c8c64dSAndroid Build Coastguard Workerreboot_into_adb_from_fastboot()
175*90c8c64dSAndroid Build Coastguard Worker{
176*90c8c64dSAndroid Build Coastguard Worker  log_print "rebooting and waiting for availability via adb"
177*90c8c64dSAndroid Build Coastguard Worker  $FASTBOOT -s $device reboot
178*90c8c64dSAndroid Build Coastguard Worker  $ADB -s $device wait-for-device
179*90c8c64dSAndroid Build Coastguard Worker}
180*90c8c64dSAndroid Build Coastguard Worker
181*90c8c64dSAndroid Build Coastguard Worker################################################
182*90c8c64dSAndroid Build Coastguard Worker# reboots device from fastboot to adb or
183*90c8c64dSAndroid Build Coastguard Worker# times out
184*90c8c64dSAndroid Build Coastguard Worker# Globals:
185*90c8c64dSAndroid Build Coastguard Worker#   device
186*90c8c64dSAndroid Build Coastguard Worker#   ADB
187*90c8c64dSAndroid Build Coastguard Worker# Arguments:
188*90c8c64dSAndroid Build Coastguard Worker#   None
189*90c8c64dSAndroid Build Coastguard Worker# Returns:
190*90c8c64dSAndroid Build Coastguard Worker#   None
191*90c8c64dSAndroid Build Coastguard Worker################################################
192*90c8c64dSAndroid Build Coastguard Workerwait_for_boot_complete()
193*90c8c64dSAndroid Build Coastguard Worker{
194*90c8c64dSAndroid Build Coastguard Worker  log_print "waiting for device to finish booting"
195*90c8c64dSAndroid Build Coastguard Worker  local result=$($ADB -s $device shell getprop dev.bootcomplete)
196*90c8c64dSAndroid Build Coastguard Worker  local result_test=${result:1:1}
197*90c8c64dSAndroid Build Coastguard Worker  echo -n "."
198*90c8c64dSAndroid Build Coastguard Worker  while [ -z $result_test ]; do
199*90c8c64dSAndroid Build Coastguard Worker    sleep 1
200*90c8c64dSAndroid Build Coastguard Worker    echo -n "."
201*90c8c64dSAndroid Build Coastguard Worker    result=$($ADB -s $device shell getprop dev.bootcomplete)
202*90c8c64dSAndroid Build Coastguard Worker    result_test=${result:0:1}
203*90c8c64dSAndroid Build Coastguard Worker  done
204*90c8c64dSAndroid Build Coastguard Worker  log_print "finished booting"
205*90c8c64dSAndroid Build Coastguard Worker}
206*90c8c64dSAndroid Build Coastguard Worker
207*90c8c64dSAndroid Build Coastguard Worker################################################
208*90c8c64dSAndroid Build Coastguard Worker# fastboot flashes partition
209*90c8c64dSAndroid Build Coastguard Worker#
210*90c8c64dSAndroid Build Coastguard Worker# Globals:
211*90c8c64dSAndroid Build Coastguard Worker#   device
212*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
213*90c8c64dSAndroid Build Coastguard Worker# Arguments:
214*90c8c64dSAndroid Build Coastguard Worker#   command_name
215*90c8c64dSAndroid Build Coastguard Worker#   command_parameters
216*90c8c64dSAndroid Build Coastguard Worker# Returns:
217*90c8c64dSAndroid Build Coastguard Worker#   None
218*90c8c64dSAndroid Build Coastguard Worker################################################
219*90c8c64dSAndroid Build Coastguard Workerfastboot_command()
220*90c8c64dSAndroid Build Coastguard Worker{
221*90c8c64dSAndroid Build Coastguard Worker  $FASTBOOT -s $device $1 $2 $3
222*90c8c64dSAndroid Build Coastguard Worker  sleep 5
223*90c8c64dSAndroid Build Coastguard Worker}
224*90c8c64dSAndroid Build Coastguard Worker
225*90c8c64dSAndroid Build Coastguard Worker################################################
226*90c8c64dSAndroid Build Coastguard Worker# fastboot command wrapper
227*90c8c64dSAndroid Build Coastguard Worker#
228*90c8c64dSAndroid Build Coastguard Worker# Globals:
229*90c8c64dSAndroid Build Coastguard Worker#   device
230*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
231*90c8c64dSAndroid Build Coastguard Worker# Arguments:
232*90c8c64dSAndroid Build Coastguard Worker#   partition_name
233*90c8c64dSAndroid Build Coastguard Worker#   file_name
234*90c8c64dSAndroid Build Coastguard Worker# Returns:
235*90c8c64dSAndroid Build Coastguard Worker#   None
236*90c8c64dSAndroid Build Coastguard Worker################################################
237*90c8c64dSAndroid Build Coastguard Workerflash_partition()
238*90c8c64dSAndroid Build Coastguard Worker{
239*90c8c64dSAndroid Build Coastguard Worker  $FASTBOOT -s $device flash $1 $2
240*90c8c64dSAndroid Build Coastguard Worker  sleep 5
241*90c8c64dSAndroid Build Coastguard Worker}
242*90c8c64dSAndroid Build Coastguard Worker
243*90c8c64dSAndroid Build Coastguard Worker################################################
244*90c8c64dSAndroid Build Coastguard Worker# adb command wrapper
245*90c8c64dSAndroid Build Coastguard Worker#
246*90c8c64dSAndroid Build Coastguard Worker# Globals:
247*90c8c64dSAndroid Build Coastguard Worker#   device
248*90c8c64dSAndroid Build Coastguard Worker#   ADB
249*90c8c64dSAndroid Build Coastguard Worker# Arguments:
250*90c8c64dSAndroid Build Coastguard Worker#   command_name
251*90c8c64dSAndroid Build Coastguard Worker#   command_parameters
252*90c8c64dSAndroid Build Coastguard Worker# Returns:
253*90c8c64dSAndroid Build Coastguard Worker#   None
254*90c8c64dSAndroid Build Coastguard Worker################################################
255*90c8c64dSAndroid Build Coastguard Workeradb_command()
256*90c8c64dSAndroid Build Coastguard Worker{
257*90c8c64dSAndroid Build Coastguard Worker  $ADB -s $device $1 $2 $3 $4 $5
258*90c8c64dSAndroid Build Coastguard Worker  sleep 5
259*90c8c64dSAndroid Build Coastguard Worker}
260*90c8c64dSAndroid Build Coastguard Worker
261*90c8c64dSAndroid Build Coastguard Worker################################################
262*90c8c64dSAndroid Build Coastguard Worker# sets the name of the boot partition and
263*90c8c64dSAndroid Build Coastguard Worker# bootfile, then flashes device
264*90c8c64dSAndroid Build Coastguard Worker#
265*90c8c64dSAndroid Build Coastguard Worker# Globals:
266*90c8c64dSAndroid Build Coastguard Worker#   product
267*90c8c64dSAndroid Build Coastguard Worker#   ROOT
268*90c8c64dSAndroid Build Coastguard Worker#   bootloaderfile
269*90c8c64dSAndroid Build Coastguard Worker#   bootpart
270*90c8c64dSAndroid Build Coastguard Worker#   device
271*90c8c64dSAndroid Build Coastguard Worker# Arguments:
272*90c8c64dSAndroid Build Coastguard Worker#   None
273*90c8c64dSAndroid Build Coastguard Worker# Returns:
274*90c8c64dSAndroid Build Coastguard Worker#   None
275*90c8c64dSAndroid Build Coastguard Worker################################################
276*90c8c64dSAndroid Build Coastguard Workerflash_bootloader_image()
277*90c8c64dSAndroid Build Coastguard Worker{
278*90c8c64dSAndroid Build Coastguard Worker  if [ "$bootpart" == '' ]; then
279*90c8c64dSAndroid Build Coastguard Worker    log_print "bootpart not defined"
280*90c8c64dSAndroid Build Coastguard Worker    exit
281*90c8c64dSAndroid Build Coastguard Worker  fi
282*90c8c64dSAndroid Build Coastguard Worker  if [ "$bootloaderfile" == '' ]; then
283*90c8c64dSAndroid Build Coastguard Worker    log_print "getting bootloader file for $product"
284*90c8c64dSAndroid Build Coastguard Worker    bootloaderfile=`ls -1 $ROOT/$product | sed -n 's/\(.*boot[0-9._]\+img\)/\1/ p'`
285*90c8c64dSAndroid Build Coastguard Worker    if [ "$bootloaderfile" == '' ]; then
286*90c8c64dSAndroid Build Coastguard Worker      log_print "bootloader file empty: $bootloaderfile"
287*90c8c64dSAndroid Build Coastguard Worker      exit
288*90c8c64dSAndroid Build Coastguard Worker    fi
289*90c8c64dSAndroid Build Coastguard Worker    if [ ! -e "$ROOT/$product/$bootloaderfile" ]; then
290*90c8c64dSAndroid Build Coastguard Worker      log_print "bootloader file not found: ./$product/$bootloaderfile"
291*90c8c64dSAndroid Build Coastguard Worker      exit
292*90c8c64dSAndroid Build Coastguard Worker    fi
293*90c8c64dSAndroid Build Coastguard Worker    log_print "using $ROOT/$product/$bootloaderfile as the bootloader image file"
294*90c8c64dSAndroid Build Coastguard Worker  fi
295*90c8c64dSAndroid Build Coastguard Worker  log_print "downloading bootloader image to $device"
296*90c8c64dSAndroid Build Coastguard Worker  flash_partition $bootpart $ROOT/$product/$bootloaderfile
297*90c8c64dSAndroid Build Coastguard Worker  reboot_into_fastboot_from_fastboot
298*90c8c64dSAndroid Build Coastguard Worker}
299*90c8c64dSAndroid Build Coastguard Worker
300*90c8c64dSAndroid Build Coastguard Worker################################################
301*90c8c64dSAndroid Build Coastguard Worker# sets the name of the radio partition and
302*90c8c64dSAndroid Build Coastguard Worker# radiofile and flashes device
303*90c8c64dSAndroid Build Coastguard Worker#
304*90c8c64dSAndroid Build Coastguard Worker# Globals:
305*90c8c64dSAndroid Build Coastguard Worker#   product
306*90c8c64dSAndroid Build Coastguard Worker#   ROOT
307*90c8c64dSAndroid Build Coastguard Worker#   radiofile
308*90c8c64dSAndroid Build Coastguard Worker#   radiopart
309*90c8c64dSAndroid Build Coastguard Worker#   device
310*90c8c64dSAndroid Build Coastguard Worker# Arguments:
311*90c8c64dSAndroid Build Coastguard Worker#   None
312*90c8c64dSAndroid Build Coastguard Worker# Returns:
313*90c8c64dSAndroid Build Coastguard Worker#   None
314*90c8c64dSAndroid Build Coastguard Worker################################################
315*90c8c64dSAndroid Build Coastguard Workerflash_radio_image()
316*90c8c64dSAndroid Build Coastguard Worker{
317*90c8c64dSAndroid Build Coastguard Worker  if [ "$radiopart" == '' ]; then
318*90c8c64dSAndroid Build Coastguard Worker    log_print "setting radio partion to 'radio'"
319*90c8c64dSAndroid Build Coastguard Worker    radiopart='radio'
320*90c8c64dSAndroid Build Coastguard Worker  fi
321*90c8c64dSAndroid Build Coastguard Worker  if [ "$radiofile" == "" ]; then
322*90c8c64dSAndroid Build Coastguard Worker    log_print "getting radio file for $product"
323*90c8c64dSAndroid Build Coastguard Worker    radiofile=`ls -1 $ROOT/$product | sed -n 's/\(radio[0-9._A-Za-z]\+img\)/\1/ p'`
324*90c8c64dSAndroid Build Coastguard Worker    if [ "$radiofile" == "" ]; then
325*90c8c64dSAndroid Build Coastguard Worker      log_print "radio file empty: $radiofile"
326*90c8c64dSAndroid Build Coastguard Worker      exit
327*90c8c64dSAndroid Build Coastguard Worker    fi
328*90c8c64dSAndroid Build Coastguard Worker    if [ ! -e "$ROOT/$product/$radiofile" ]; then
329*90c8c64dSAndroid Build Coastguard Worker      log_print "radio file not found: ./$product/$radiofile"
330*90c8c64dSAndroid Build Coastguard Worker      exit
331*90c8c64dSAndroid Build Coastguard Worker    fi
332*90c8c64dSAndroid Build Coastguard Worker    log_print "using $ROOT/$product/$radiofile as the radio image file"
333*90c8c64dSAndroid Build Coastguard Worker  fi
334*90c8c64dSAndroid Build Coastguard Worker  log_print "downloading radio image to $device"
335*90c8c64dSAndroid Build Coastguard Worker  flash_partition $radiopart  $ROOT/$product/$radiofile
336*90c8c64dSAndroid Build Coastguard Worker  reboot_into_fastboot_from_fastboot
337*90c8c64dSAndroid Build Coastguard Worker}
338*90c8c64dSAndroid Build Coastguard Worker
339*90c8c64dSAndroid Build Coastguard Worker################################################
340*90c8c64dSAndroid Build Coastguard Worker# sets the name of the boot partition and
341*90c8c64dSAndroid Build Coastguard Worker# bootfile
342*90c8c64dSAndroid Build Coastguard Worker#
343*90c8c64dSAndroid Build Coastguard Worker# Globals:
344*90c8c64dSAndroid Build Coastguard Worker#   product
345*90c8c64dSAndroid Build Coastguard Worker#   ROOT
346*90c8c64dSAndroid Build Coastguard Worker#   buildfile
347*90c8c64dSAndroid Build Coastguard Worker#   device
348*90c8c64dSAndroid Build Coastguard Worker# Arguments:
349*90c8c64dSAndroid Build Coastguard Worker#   None
350*90c8c64dSAndroid Build Coastguard Worker# Returns:
351*90c8c64dSAndroid Build Coastguard Worker#   None
352*90c8c64dSAndroid Build Coastguard Worker################################################
353*90c8c64dSAndroid Build Coastguard Workerflash_system_image()
354*90c8c64dSAndroid Build Coastguard Worker{
355*90c8c64dSAndroid Build Coastguard Worker  if [ "$buildfile" == "" ]; then
356*90c8c64dSAndroid Build Coastguard Worker    log_print "getting build file for $product"
357*90c8c64dSAndroid Build Coastguard Worker    buildfile=`\ls -1 $ROOT/$product 2>&1 | sed -n 's/\([a-z]\+-img-[0-9]\+.zip\)/\1/ p'`
358*90c8c64dSAndroid Build Coastguard Worker    if [ "$buildfile" == "" ]; then
359*90c8c64dSAndroid Build Coastguard Worker      log_print "build file empty: $buildfile"
360*90c8c64dSAndroid Build Coastguard Worker      exit
361*90c8c64dSAndroid Build Coastguard Worker    fi
362*90c8c64dSAndroid Build Coastguard Worker    if [ ! -e "$ROOT/$product/$buildfile" ]; then
363*90c8c64dSAndroid Build Coastguard Worker      log_print "build file not found: ./$product/$buildfile"
364*90c8c64dSAndroid Build Coastguard Worker      exit
365*90c8c64dSAndroid Build Coastguard Worker    fi
366*90c8c64dSAndroid Build Coastguard Worker    log_print "using $ROOT/$product/$buildfile as the system image file"
367*90c8c64dSAndroid Build Coastguard Worker  fi
368*90c8c64dSAndroid Build Coastguard Worker  log_print "downloading system image to $device"
369*90c8c64dSAndroid Build Coastguard Worker  fastboot_command update $ROOT/$product/$buildfile
370*90c8c64dSAndroid Build Coastguard Worker
371*90c8c64dSAndroid Build Coastguard Worker}
372*90c8c64dSAndroid Build Coastguard Worker################################################
373*90c8c64dSAndroid Build Coastguard Worker# flashes the userdata partition
374*90c8c64dSAndroid Build Coastguard Worker#
375*90c8c64dSAndroid Build Coastguard Worker# Globals:
376*90c8c64dSAndroid Build Coastguard Worker#   product
377*90c8c64dSAndroid Build Coastguard Worker#   ROOT
378*90c8c64dSAndroid Build Coastguard Worker# Arguments:
379*90c8c64dSAndroid Build Coastguard Worker#   None
380*90c8c64dSAndroid Build Coastguard Worker# Returns:
381*90c8c64dSAndroid Build Coastguard Worker#   None
382*90c8c64dSAndroid Build Coastguard Worker################################################
383*90c8c64dSAndroid Build Coastguard Workerflash_userdata_image()
384*90c8c64dSAndroid Build Coastguard Worker{
385*90c8c64dSAndroid Build Coastguard Worker  log_print "flashing userdata..."
386*90c8c64dSAndroid Build Coastguard Worker  if [ -e $ROOT/$product/userdata.img ];then
387*90c8c64dSAndroid Build Coastguard Worker    flash_partition userdata $ROOT/$product/userdata.img
388*90c8c64dSAndroid Build Coastguard Worker  else
389*90c8c64dSAndroid Build Coastguard Worker    log_print "userdata.img file not found: $ROOT/$product/userdata.img"
390*90c8c64dSAndroid Build Coastguard Worker    exit
391*90c8c64dSAndroid Build Coastguard Worker  fi
392*90c8c64dSAndroid Build Coastguard Worker}
393*90c8c64dSAndroid Build Coastguard Worker
394*90c8c64dSAndroid Build Coastguard Worker
395*90c8c64dSAndroid Build Coastguard Worker################################################
396*90c8c64dSAndroid Build Coastguard Worker# flashes the device
397*90c8c64dSAndroid Build Coastguard Worker#
398*90c8c64dSAndroid Build Coastguard Worker# Globals:
399*90c8c64dSAndroid Build Coastguard Worker#   product
400*90c8c64dSAndroid Build Coastguard Worker#   ROOT
401*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
402*90c8c64dSAndroid Build Coastguard Worker#   bootfile
403*90c8c64dSAndroid Build Coastguard Worker#   bootpart
404*90c8c64dSAndroid Build Coastguard Worker#   radiofile
405*90c8c64dSAndroid Build Coastguard Worker# Arguments:
406*90c8c64dSAndroid Build Coastguard Worker#   None
407*90c8c64dSAndroid Build Coastguard Worker# Returns:
408*90c8c64dSAndroid Build Coastguard Worker#   None
409*90c8c64dSAndroid Build Coastguard Worker################################################
410*90c8c64dSAndroid Build Coastguard Workerflash_device()
411*90c8c64dSAndroid Build Coastguard Worker{
412*90c8c64dSAndroid Build Coastguard Worker  log_print "erasing cache..."
413*90c8c64dSAndroid Build Coastguard Worker  fastboot_command erase cache
414*90c8c64dSAndroid Build Coastguard Worker  flash_userdata_image
415*90c8c64dSAndroid Build Coastguard Worker  flash_bootloader_image
416*90c8c64dSAndroid Build Coastguard Worker  flash_radio_image
417*90c8c64dSAndroid Build Coastguard Worker  flash_system_image
418*90c8c64dSAndroid Build Coastguard Worker  #device has been rebooted
419*90c8c64dSAndroid Build Coastguard Worker  adb_command wait-for-device
420*90c8c64dSAndroid Build Coastguard Worker}
421*90c8c64dSAndroid Build Coastguard Worker
422*90c8c64dSAndroid Build Coastguard Worker################################################
423*90c8c64dSAndroid Build Coastguard Worker# gets the device product type and sets product
424*90c8c64dSAndroid Build Coastguard Worker#
425*90c8c64dSAndroid Build Coastguard Worker# Globals:
426*90c8c64dSAndroid Build Coastguard Worker#   product
427*90c8c64dSAndroid Build Coastguard Worker#   ROOT
428*90c8c64dSAndroid Build Coastguard Worker#   FASTBOOT
429*90c8c64dSAndroid Build Coastguard Worker#   device
430*90c8c64dSAndroid Build Coastguard Worker# Arguments:
431*90c8c64dSAndroid Build Coastguard Worker#   None
432*90c8c64dSAndroid Build Coastguard Worker# Returns:
433*90c8c64dSAndroid Build Coastguard Worker#   None
434*90c8c64dSAndroid Build Coastguard Worker################################################
435*90c8c64dSAndroid Build Coastguard Workerset_product_type()
436*90c8c64dSAndroid Build Coastguard Worker{
437*90c8c64dSAndroid Build Coastguard Worker  if [ "$product" == "" ]; then
438*90c8c64dSAndroid Build Coastguard Worker    log_print "getting device product type"
439*90c8c64dSAndroid Build Coastguard Worker    product=`$FASTBOOT -s $device getvar product 2>&1 | sed -n 's/product: \([a-z]*\)\n*/\1/ p'`
440*90c8c64dSAndroid Build Coastguard Worker    if [ ! -e "$ROOT/$product" ]; then
441*90c8c64dSAndroid Build Coastguard Worker      log_print "device product id not supported: $product"
442*90c8c64dSAndroid Build Coastguard Worker      exit
443*90c8c64dSAndroid Build Coastguard Worker    fi
444*90c8c64dSAndroid Build Coastguard Worker  fi
445*90c8c64dSAndroid Build Coastguard Worker  log_print "using $product as device product id"
446*90c8c64dSAndroid Build Coastguard Worker}
447*90c8c64dSAndroid Build Coastguard Worker
448*90c8c64dSAndroid Build Coastguard Worker
449*90c8c64dSAndroid Build Coastguard Worker
450*90c8c64dSAndroid Build Coastguard Worker#start of script
451*90c8c64dSAndroid Build Coastguard Worker#test for dependencies
452*90c8c64dSAndroid Build Coastguard Workerif [ ! -e $ADB ]; then
453*90c8c64dSAndroid Build Coastguard Worker  echo "Error: adb not in path! Please correct this."
454*90c8c64dSAndroid Build Coastguard Worker  exit
455*90c8c64dSAndroid Build Coastguard Workerfi
456*90c8c64dSAndroid Build Coastguard Workerif [ ! -e $FASTBOOT ]; then
457*90c8c64dSAndroid Build Coastguard Worker  echo "Error: fastboot not in path! Please correct this."
458*90c8c64dSAndroid Build Coastguard Worker  exit
459*90c8c64dSAndroid Build Coastguard Workerfi
460*90c8c64dSAndroid Build Coastguard Worker#checks to see if the called device is available
461*90c8c64dSAndroid Build Coastguard Workerif [ "$device" != "" ]; then
462*90c8c64dSAndroid Build Coastguard Worker  tmpdevice=`$ADB devices | sed -n "s/\($device\).*/\1/ p"`
463*90c8c64dSAndroid Build Coastguard Worker  if [ "$device" != "$tmpdevice" ]; then
464*90c8c64dSAndroid Build Coastguard Worker      tmpdevice=`$FASTBOOT devices | sed -n "s/\($device\).*/\1/ p"`
465*90c8c64dSAndroid Build Coastguard Worker    if [ "$device" != "$tmpdevice" ]; then
466*90c8c64dSAndroid Build Coastguard Worker      echo "Warning: device not found... $device"
467*90c8c64dSAndroid Build Coastguard Worker      exit
468*90c8c64dSAndroid Build Coastguard Worker    else
469*90c8c64dSAndroid Build Coastguard Worker      echo "'Device '$device' found!'"
470*90c8c64dSAndroid Build Coastguard Worker      reboot_into_adb_from_fastboot
471*90c8c64dSAndroid Build Coastguard Worker      wait_for_boot_complete
472*90c8c64dSAndroid Build Coastguard Worker    fi
473*90c8c64dSAndroid Build Coastguard Worker  fi
474*90c8c64dSAndroid Build Coastguard Workerelse
475*90c8c64dSAndroid Build Coastguard Worker  device=`$ADB devices | sed -n 's/.*\(^[0-9A-Z]\{2\}[0-9A-Z]*\).*/\1/ p'`
476*90c8c64dSAndroid Build Coastguard Worker  if [ `echo $device | wc -w` -ne 1 ]; then
477*90c8c64dSAndroid Build Coastguard Worker    echo 'There is more than one device found,'
478*90c8c64dSAndroid Build Coastguard Worker    echo 'please pass the correct device ID in as a parameter.'
479*90c8c64dSAndroid Build Coastguard Worker    exit
480*90c8c64dSAndroid Build Coastguard Worker  fi
481*90c8c64dSAndroid Build Coastguard Workerfi
482*90c8c64dSAndroid Build Coastguard Workerif [ "$device" == "" ]; then
483*90c8c64dSAndroid Build Coastguard Worker  echo 'Device not found via adb'
484*90c8c64dSAndroid Build Coastguard Worker  device=`$FASTBOOT devices | sed -n 's/.*\(^[0-9A-Z]\{2\}[0-9A-Z]*\).*/\1/ p'`
485*90c8c64dSAndroid Build Coastguard Worker  if [ `echo $device | wc -w` -ne 1 ]; then
486*90c8c64dSAndroid Build Coastguard Worker    echo "There is more than one device available,"
487*90c8c64dSAndroid Build Coastguard Worker    echo "please pass the correct device ID in as a parameter."
488*90c8c64dSAndroid Build Coastguard Worker    exit
489*90c8c64dSAndroid Build Coastguard Worker  fi
490*90c8c64dSAndroid Build Coastguard Worker  if [ "$device" == "" ]; then
491*90c8c64dSAndroid Build Coastguard Worker    echo 'Device not found via fastboot, please investigate'
492*90c8c64dSAndroid Build Coastguard Worker    exit
493*90c8c64dSAndroid Build Coastguard Worker  else
494*90c8c64dSAndroid Build Coastguard Worker    echo 'Device '$device' found!'
495*90c8c64dSAndroid Build Coastguard Worker    reboot_into_adb_from_fastboot
496*90c8c64dSAndroid Build Coastguard Worker    wait_for_boot_complete
497*90c8c64dSAndroid Build Coastguard Worker    echo 'Hammering on '$device
498*90c8c64dSAndroid Build Coastguard Worker  fi
499*90c8c64dSAndroid Build Coastguard Workerelse
500*90c8c64dSAndroid Build Coastguard Worker  echo 'Hammering on '$device
501*90c8c64dSAndroid Build Coastguard Workerfi
502*90c8c64dSAndroid Build Coastguard Workerreboot_into_fastboot_from_adb
503*90c8c64dSAndroid Build Coastguard Workerset_product_type
504*90c8c64dSAndroid Build Coastguard Workerreboot_into_adb_from_fastboot
505*90c8c64dSAndroid Build Coastguard Workerwait_for_boot_complete
506*90c8c64dSAndroid Build Coastguard Worker
507*90c8c64dSAndroid Build Coastguard Worker#check for availability of a custom flash info file and retreive it
508*90c8c64dSAndroid Build Coastguard Workerif [ -e "$ROOT/$product/custom_flash.sh" ]; then
509*90c8c64dSAndroid Build Coastguard Worker  . $ROOT/$product/custom_flash.sh
510*90c8c64dSAndroid Build Coastguard Workerfi
511*90c8c64dSAndroid Build Coastguard Workerecho $'\n\n'
512*90c8c64dSAndroid Build Coastguard Worker
513*90c8c64dSAndroid Build Coastguard Worker#start of looping
514*90c8c64dSAndroid Build Coastguard Workerfor ((loop=1 ; loop <= $COUNT ; loop++ )) ; do
515*90c8c64dSAndroid Build Coastguard Worker  echo ""
516*90c8c64dSAndroid Build Coastguard Worker  echo ""
517*90c8c64dSAndroid Build Coastguard Worker  echo ________________ $(date +'%D %T') - $loop - $device ______________________
518*90c8c64dSAndroid Build Coastguard Worker
519*90c8c64dSAndroid Build Coastguard Worker  log_print "setting adb root and sleeping for 7 seconds"
520*90c8c64dSAndroid Build Coastguard Worker  adb_command root
521*90c8c64dSAndroid Build Coastguard Worker  wait_for_battery
522*90c8c64dSAndroid Build Coastguard Worker  log_print "rebooting into bootloader and waiting for availability via fastboot"
523*90c8c64dSAndroid Build Coastguard Worker  reboot_into_fastboot_from_adb
524*90c8c64dSAndroid Build Coastguard Worker  # not necessary, but useful in testing
525*90c8c64dSAndroid Build Coastguard Worker  log_print "using fastboot to reboot to bootloader for test purposes"
526*90c8c64dSAndroid Build Coastguard Worker  reboot_into_fastboot_from_fastboot
527*90c8c64dSAndroid Build Coastguard Worker
528*90c8c64dSAndroid Build Coastguard Worker  #flashing the device
529*90c8c64dSAndroid Build Coastguard Worker  flash_device
530*90c8c64dSAndroid Build Coastguard Worker
531*90c8c64dSAndroid Build Coastguard Worker  #preping device for monkey run
532*90c8c64dSAndroid Build Coastguard Worker  log_print "setting adb root"
533*90c8c64dSAndroid Build Coastguard Worker  adb_command root
534*90c8c64dSAndroid Build Coastguard Worker  log_print "setting ro.test_harness property"
535*90c8c64dSAndroid Build Coastguard Worker  adb_command shell setprop ro.test_harness 1
536*90c8c64dSAndroid Build Coastguard Worker
537*90c8c64dSAndroid Build Coastguard Worker  log_print "waiting for device to finish booting"
538*90c8c64dSAndroid Build Coastguard Worker  result=$($ADB -s $device shell getprop dev.bootcomplete)
539*90c8c64dSAndroid Build Coastguard Worker  result_test=${result:1:1}
540*90c8c64dSAndroid Build Coastguard Worker  echo -n "."
541*90c8c64dSAndroid Build Coastguard Worker  while [ -z $result_test ]; do
542*90c8c64dSAndroid Build Coastguard Worker    sleep 1
543*90c8c64dSAndroid Build Coastguard Worker    echo -n "."
544*90c8c64dSAndroid Build Coastguard Worker    result=$($ADB -s $device shell getprop dev.bootcomplete)
545*90c8c64dSAndroid Build Coastguard Worker    result_test=${result:0:1}
546*90c8c64dSAndroid Build Coastguard Worker  done
547*90c8c64dSAndroid Build Coastguard Worker
548*90c8c64dSAndroid Build Coastguard Worker  log_print "finished booting"
549*90c8c64dSAndroid Build Coastguard Worker  log_print "waiting for the Package Manager"
550*90c8c64dSAndroid Build Coastguard Worker  result=$($ADB -s $device shell pm path android)
551*90c8c64dSAndroid Build Coastguard Worker  result_test=${result:0:7}
552*90c8c64dSAndroid Build Coastguard Worker  echo -n "."
553*90c8c64dSAndroid Build Coastguard Worker  while [ $result_test != "package" ]; do
554*90c8c64dSAndroid Build Coastguard Worker    sleep 1
555*90c8c64dSAndroid Build Coastguard Worker    echo -n "."
556*90c8c64dSAndroid Build Coastguard Worker    result=$($ADB -s $device shell pm path android)
557*90c8c64dSAndroid Build Coastguard Worker    result_test=${result:0:7}
558*90c8c64dSAndroid Build Coastguard Worker  done
559*90c8c64dSAndroid Build Coastguard Worker  echo "Package Manager available"
560*90c8c64dSAndroid Build Coastguard Worker
561*90c8c64dSAndroid Build Coastguard Worker  #lets you see what's going on
562*90c8c64dSAndroid Build Coastguard Worker  log_print "setting shell svc power stayon true"
563*90c8c64dSAndroid Build Coastguard Worker  adb_command shell svc power stayon true
564*90c8c64dSAndroid Build Coastguard Worker
565*90c8c64dSAndroid Build Coastguard Worker  #calls the monkey run if not skipped
566*90c8c64dSAndroid Build Coastguard Worker  if [ $NOMONKEY == 0 ]; then
567*90c8c64dSAndroid Build Coastguard Worker    seed=$(($(date +%s) % 99))
568*90c8c64dSAndroid Build Coastguard Worker    log_print "running short monkey run..."
569*90c8c64dSAndroid Build Coastguard Worker    $ADB -s $device shell monkey -p com.android.alarmclock -p com.android.browser -p com.android.calculator2 -p com.android.calendar -p com.android.camera -p com.android.contacts -p com.google.android.gm -p com.android.im -p com.android.launcher -p com.google.android.apps.maps -p com.android.mms -p com.android.music -p com.android.phone -p com.android.settings -p com.google.android.street -p com.android.vending -p com.google.android.youtube -p com.android.email -p com.google.android.voicesearch  -c android.intent.category.LAUNCHER  --ignore-security-exceptions  -s $seed $MEVENTS
570*90c8c64dSAndroid Build Coastguard Worker    log_print "finished running monkey, rinse, repeat..."
571*90c8c64dSAndroid Build Coastguard Worker  else
572*90c8c64dSAndroid Build Coastguard Worker    log_print "-x parameter used, skipping the monkey run"
573*90c8c64dSAndroid Build Coastguard Worker  fi
574*90c8c64dSAndroid Build Coastguard Worker
575*90c8c64dSAndroid Build Coastguard Worker  if [ $loop -eq $COUNT ]; then
576*90c8c64dSAndroid Build Coastguard Worker    log_print "device $device has returned, testing completed, count = $loop"
577*90c8c64dSAndroid Build Coastguard Worker    echo `echo "Device $device has returned, testing completed, count = $loop." > $ROOT/$device.log`
578*90c8c64dSAndroid Build Coastguard Worker  else
579*90c8c64dSAndroid Build Coastguard Worker    log_print "device $device has returned, rinse and repeat count = $loop"
580*90c8c64dSAndroid Build Coastguard Worker    echo `echo "Device $device has returned, rinse and repeat count = $loop." > $ROOT/$device.log`
581*90c8c64dSAndroid Build Coastguard Worker  fi
582*90c8c64dSAndroid Build Coastguard Workerdone
583