#!/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"

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_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=( )
if [[ ${FLAGS_use_emerged} -eq ${FLAGS_TRUE} ]]; then
  test_args+=(--use_emerged)
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
  test_args+=("$(remove_quotes "${test}")")
done

trap stop_kvm EXIT
start_kvm "${FLAGS_image_path}"
retry_until_ssh

${GCLIENT_ROOT}/chromite/bin/cros_sdk -- run_remote_tests.sh \
    --board=${FLAGS_board} \
    --ssh_port=${FLAGS_ssh_port} \
    --remote=127.0.0.1 \
    --results_dir_root="${FLAGS_results_dir_root}" \
    --verbose=${FLAGS_verbose} \
    "${test_args[@]}"
