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