#!/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."
DEFINE_string ssh_private_key "" \
    "Path to the private key to use to ssh into test image as the root user."

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"
    "${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}"
