#!/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=<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[@]}"
