| #!/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. |
| |
| . $(dirname "$(readlink -f "$0")")/outside_chroot_common.sh 2> /dev/null || |
| SCRIPT_ROOT=/usr/lib/crosutils |
| . "${SCRIPT_ROOT}/common.sh" || |
| (echo "Unable to load common.sh" && false) || |
| exit 1 |
| . "${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=<test> 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[@]}" |