#!/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="${IMAGES_DIR}/${FLAGS_board}/latest/${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

if [ -z "${FLAGS_results_dir_root}" ]; then
  die "You must specify a directory for results (--results_dir_root)."
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}"
