#!/bin/bash # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # Runs a given test case under a VM. # --- BEGIN COMMON.SH BOILERPLATE --- # Load common CrOS utilities. Inside the chroot this file is installed in # /usr/lib/crosutils. Outside the chroot we find it relative to the script's # location. find_common_sh() { local common_paths=(/usr/lib/crosutils "$(dirname "$(readlink -f "$0")")/..") local path SCRIPT_ROOT= for path in "${common_paths[@]}"; do if [ -r "${path}/common.sh" ]; then SCRIPT_ROOT=${path} break fi done } find_common_sh . "${SCRIPT_ROOT}/common.sh" || (echo "Unable to load common.sh" && exit 1) # --- END COMMON.SH BOILERPLATE --- . "${SCRIPT_ROOT}/lib/cros_vm_lib.sh" || die "Unable to load cros_vm_lib.sh" . "${SCRIPT_ROOT}/lib/cros_vm_constants.sh" || \ die "Unable to load cros_vm_constants.sh" get_default_board DEFINE_string board "$DEFAULT_BOARD" \ "The board for which you built autotest." b DEFINE_string image_path "" "Full path of the VM image" DEFINE_string results_dir_root "" "alternate root results directory" DEFINE_string test_case "" "Name of the test case to run" DEFINE_boolean use_emerged ${FLAGS_FALSE} \ "Force use of emerged autotest packages" DEFINE_string verify_chrome_version "" \ "Verify that this chrome version matches that on vm." set -e # Returns normally if the given $1 is a valid chrome version. chrome_version_is_valid() { local chrome_version="$1" echo ${chrome_version} | egrep '^[0-9]+.[0-9]+.[0-9]+.[0-9]+$' &> /dev/null } # Parse command line. FLAGS "$@" || exit 1 # Use latest if not specified. if [ -z "${FLAGS_image_path}" ]; then LATEST_IMAGE="$(${SCRIPTS_DIR}/get_latest_image.sh \ --board=${FLAGS_board})/${DEFAULT_QEMU_IMAGE}" info "Using latest vm image ${LATEST_IMAGE}" FLAGS_image_path=${LATEST_IMAGE} fi [ -e "${FLAGS_image_path}" ] || die "Image ${FLAGS_image_path} does not exist." if [ -n "${FLAGS_test_case}" ]; then warn "Use of --test_case= is being deprecated. Just pass test names \ as separate command line arguments." fi if [ -z "${FLAGS_test_case}" ] && [ -z "${FLAGS_ARGV}" ]; then die "You must specify a test case." fi USE_EMERGED= if [[ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]]; then USE_EMERGED="--use_emerged" fi tests=( ) [ -n "${FLAGS_test_case}" ] && tests=( "${FLAGS_test_case}" ) for test in ${FLAGS_ARGV}; do tests=( "${tests[@]}" "$(remove_quotes "${test}")" ) done trap stop_kvm EXIT start_kvm "${FLAGS_image_path}" retry_until_ssh if [ -n "${FLAGS_verify_chrome_version}" ]; then info "Verifying version of Chrome matches what we expect." if chrome_version_is_valid "${FLAGS_verify_chrome_version}"; then chrome_version_on_vm=$("${SCRIPTS_DIR}/bin/cros_get_chrome_version" \ --remote=127.0.0.1 \ --ssh_port=${FLAGS_ssh_port}) [[ ${chrome_version_on_vm} == ${FLAGS_verify_chrome_version} ]] || \ warn "CHROME_VERSION is no longer set.This check will be removed" else warn "${FLAGS_verify_chrome_version} is not a valid Chrome version" fi fi "${SCRIPTS_DIR}/run_remote_tests.sh" \ --board=${FLAGS_board} \ --ssh_port=${FLAGS_ssh_port} \ --remote=127.0.0.1 \ --results_dir_root="${FLAGS_results_dir_root}" \ ${USE_EMERGED} \ "${tests[@]}"