| #!/bin/bash | |
| # Copyright 2020 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # | |
| # Script to ensure the avd is set up for testing. | |
| # | |
| # Usage: ./avd_setup.sh <path-to-adb-executable> | |
| set -x | |
| set -e | |
| # Monitor but it appears the device is always ready within a couple seconds. | |
| readonly WAIT_ITERS=60 | |
| # Validate a single config is returning the desired value. | |
| function validate_config() { | |
| local adb=${1} | |
| local config=${2} | |
| local exp_return_value=${3} | |
| local ready=1 | |
| # Wait for avd to reach home screen | |
| echo "Checking ${config} is returning ${exp_return_value}." | |
| for((i=0; i<${WAIT_ITERS}; i++)); do | |
| out=$(${adb} -s emulator-5554 shell "getprop ${config}" | tr -d '[:space:]') | |
| if [[ "${out}" = "${exp_return_value}" ]]; then | |
| echo "${config} is ready." | |
| ready=0 | |
| break | |
| else | |
| echo "Config ${config} is not ready." | |
| echo "output: ${out}" | |
| sleep 1 | |
| fi | |
| done | |
| if [[ ${ready} -eq 1 ]]; then | |
| echo "${config} was not ready in time." | |
| return 1 | |
| fi | |
| return 0 | |
| } | |
| # Validate an array of configs is returning their desired values. | |
| function validate_all_configs() { | |
| local adb=$1; shift | |
| local config_array=("$@") | |
| for config in "${config_array[@]}"; do | |
| validate_config "${adb}" "${config}" "1" | |
| if [[ $? -ne 0 ]]; then | |
| echo "Config ${config} not ready." | |
| exit 1 | |
| fi | |
| done | |
| } | |
| function print_device_list() { | |
| local adb=${1} | |
| local devices_output=$(${adb} devices) | |
| echo "" | |
| echo "${devices_output}" | |
| echo "" | |
| } | |
| function wait-for-device() { | |
| local remaining_attempts=6 | |
| until adb shell true | |
| do | |
| ((remaining_attempts--)) | |
| if [[ remaining_attempts -le 0 ]] | |
| then | |
| echo "Emulator not found" | |
| exit 1 | |
| fi | |
| echo "Waiting for emulator to be available. Remaining attempts: $remaining_attempts" | |
| sleep 10 | |
| done | |
| echo "Emulator is now available" | |
| } | |
| # path to the adb executable | |
| adb=${1} | |
| which ${adb} | |
| if [[ $? -eq 1 ]]; then | |
| echo "Unable to locate adb on path." | |
| fi | |
| # properties to validate | |
| declare -a configs_to_validate=("sys.boot_completed" "dev.bootcomplete") | |
| print_device_list "${adb}" | |
| echo "Killing adb server" | |
| ${adb} kill-server | |
| sleep 5 | |
| # when you run any adb command and the server is not up it will start it. | |
| echo "Starting adb server" | |
| ${adb} start-server | |
| print_device_list "${adb}" | |
| echo "Waiting for device" | |
| wait-for-device | |
| echo "Validating that emulator is booted." | |
| validate_all_configs "${adb}" "${configs_to_validate[@]}" | |
| # Set the density DPI | |
| ${adb} shell wm density 400 | |
| # unlock avd | |
| ${adb} shell input keyevent 82 | |
| # Ensure developer mode is enabled | |
| ${adb} shell settings put global development_settings_enabled 1 | |
| # Enable MTP file transfer | |
| # depending on the version under test this is setFunctions or setFunction (no s) | |
| ${adb} shell svc usb setFunction mtp | |
| print_device_list "${adb}" | |
| echo "Validating that emulator is booted." | |
| validate_all_configs "${adb}" "${configs_to_validate[@]}" | |
| ${adb} shell input keyevent 82 | |
| print_device_list "${adb}" | |
| # clear exit signal for the LUCI ci. | |
| echo "Emulator ready." | |
| exit 0 |