| #!/bin/bash -u |
| # |
| # Copyright 2016 Google Inc. All Rights Reserved. |
| # |
| # This script pings the android device to determine if it successfully booted. |
| # |
| # This script is intended to be used by binary_search_state.py, as |
| # part of the binary search triage on the Android source tree. It |
| # waits for the test setup script to build and install the image, then checks |
| # if image boots or not. It should return '0' if the test succeeds |
| # (the image is 'good'); '1' if the test fails (the image is 'bad'); and '125' |
| # if it could not determine (does not apply in this case). |
| # |
| |
| source android/common.sh |
| |
| # Check if boot animation has stopped and trim whitespace |
| is_booted() |
| { |
| # Wait for boot animation to stop and trim whitespace |
| status=`adb shell getprop init.svc.bootanim | tr -d '[:space:]'` |
| [[ "$status" == "stopped" ]] |
| return $? |
| } |
| |
| # Wait for device to boot, retry every 1s |
| # WARNING: Do not run without timeout command, could run forever |
| wait_for_boot() |
| { |
| while ! is_booted |
| do |
| sleep 1 |
| done |
| } |
| |
| echo "Waiting 60 seconds for device to come online..." |
| timeout 60 adb wait-for-device |
| retval=$? |
| |
| if [[ ${retval} -eq 0 ]]; then |
| echo "Android image has been built and installed." |
| else |
| echo "Device failed to reboot within 60 seconds." |
| exit 1 |
| fi |
| |
| echo "Waiting 60 seconds for device to finish boot..." |
| # Spawn subshell that will timeout in 60 seconds |
| # Feed to cat so that timeout will recognize it as a command |
| # (timeout only works for commands/programs, not functions) |
| timeout 60 cat <(wait_for_boot) |
| retval=$? |
| |
| if [[ ${retval} -eq 0 ]]; then |
| echo "Android device fully booted!" |
| else |
| echo "Device failed to fully boot within 60 seconds." |
| exit 1 |
| fi |
| |
| exit ${retval} |