1#!/bin/bash -u 2# 3# Copyright 2016 Google Inc. All Rights Reserved. 4# 5# This script pings the android device to determine if it successfully booted. 6# 7# This script is intended to be used by binary_search_state.py, as 8# part of the binary search triage on the Android source tree. It 9# waits for the test setup script to build and install the image, then checks 10# if image boots or not. It should return '0' if the test succeeds 11# (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125' 12# if it could not determine (does not apply in this case). 13# 14 15source android/common.sh 16 17# Check if boot animation has stopped and trim whitespace 18is_booted() 19{ 20 # Wait for boot animation to stop and trim whitespace 21 status=`adb shell getprop init.svc.bootanim | tr -d '[:space:]'` 22 [[ "$status" == "stopped" ]] 23 return $? 24} 25 26# Wait for device to boot, retry every 1s 27# WARNING: Do not run without timeout command, could run forever 28wait_for_boot() 29{ 30 while ! is_booted 31 do 32 sleep 1 33 done 34} 35 36echo "Waiting 60 seconds for device to come online..." 37timeout 60 adb wait-for-device 38retval=$? 39 40if [[ ${retval} -eq 0 ]]; then 41 echo "Android image has been built and installed." 42else 43 echo "Device failed to reboot within 60 seconds." 44 exit 1 45fi 46 47echo "Waiting 60 seconds for device to finish boot..." 48# Spawn subshell that will timeout in 60 seconds 49# Feed to cat so that timeout will recognize it as a command 50# (timeout only works for commands/programs, not functions) 51timeout 60 cat <(wait_for_boot) 52retval=$? 53 54if [[ ${retval} -eq 0 ]]; then 55 echo "Android device fully booted!" 56else 57 echo "Device failed to fully boot within 60 seconds." 58 exit 1 59fi 60 61exit ${retval} 62