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

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

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

"${SCRIPT_ROOT}/enter_chroot.sh" -- 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[@]}"
