| #!/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. |
| |
| # This can only run outside the chroot. |
| . $(dirname "$(readlink -f "$0")")/outside_chroot_common.sh || exit 1 |
| . "${SCRIPT_ROOT}/common.sh" || 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" |
| |
| DEFINE_string args "" \ |
| "Command line arguments for test. Quoted and space separated if multiple." a |
| 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_integer verbose 1 "{0,1,2} Max verbosity shows autoserv debug output." v |
| DEFINE_boolean whitelist_chrome_crashes ${FLAGS_FALSE} \ |
| "Treat Chrome crashes as non-fatal." |
| |
| 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="$("${SCRIPT_ROOT}/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 |
| |
| test_args=( ) |
| tests_lists=( ) |
| if [[ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]]; then |
| die "--use_emerged flag no longer supported by cros_run_vm test. The " \ |
| "default behavior of test_that is equivalent." |
| fi |
| if [[ ${FLAGS_whitelist_chrome_crashes} -eq ${FLAGS_TRUE} ]]; then |
| test_args+=(--whitelist-chrome-crashes) |
| fi |
| [ -n "${FLAGS_test_case}" ] && test_args+=( "${FLAGS_test_case}" ) |
| for test in ${FLAGS_ARGV}; do |
| tests_list+=("$(remove_quotes "${test}")") |
| done |
| |
| if [ -n "${FLAGS_board}" ]; then |
| test_args+=( "-b" ) |
| test_args+=( "${FLAGS_board}" ) |
| fi |
| |
| if [ -n "${FLAGS_args}" ]; then |
| test_args+=( "--args" ) |
| test_args+=( "${FLAGS_args}" ) |
| fi |
| |
| if [ -n "${FLAGS_ssh_private_key}" ]; then |
| test_args+=( |
| "--ssh_private_key" |
| "$(reinterpret_path_for_chroot "${FLAGS_ssh_private_key}")" |
| ) |
| fi |
| |
| trap stop_kvm EXIT |
| start_kvm "${FLAGS_image_path}" "${FLAGS_board}" |
| retry_until_ssh |
| |
| echo 'Builder uptime: ' $(uptime) |
| echo 'Builder meminfo:' |
| cat /proc/meminfo |
| |
| ${GCLIENT_ROOT}/chromite/bin/cros_sdk -- test_that \ |
| --no-quickmerge \ |
| --ssh_options "-F /dev/null -i /dev/null" \ |
| --debug \ |
| --results_dir "${FLAGS_results_dir_root}" \ |
| "${test_args[@]}" \ |
| 127.0.0.1:${FLAGS_ssh_port} \ |
| "${tests_list}" |