#!/bin/bash
# Copyright (c) 2014 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.

# This script requires that you run build_packages first.

# Special because this can only run inside the chroot.
if [ ! -r /mnt/host/source/src/scripts/common.sh ]; then
  echo "Must run within chroot" >&2
  exit 1
fi
. /mnt/host/source/src/scripts/common.sh


# Flags
DEFINE_string board "${DEFAULT_BOARD}" \
  "Target board of DUT running the tests"
DEFINE_boolean smoke "${FLAGS_FALSE}" \
  "Run a minimal set of tests for sanity"
DEFINE_boolean commit "${FLAGS_FALSE}" \
  "Run the tests required to pass the Commit Queue"
DEFINE_boolean canary "${FLAGS_FALSE}" \
  "Run all tests required for canary builds to pass"
DEFINE_boolean labqual "${FLAGS_FALSE}" \
  "Run the BVT tests required for lab qualification"
DEFINE_boolean debug "${FLAGS_FALSE}" \
  "Print commands that would've been run without doing anything"

# These options only matter if we're using Servo, which only
# happens when --labqual is specified.
DEFINE_boolean usbkey "${FLAGS_TRUE}" \
  "When running servo tests, assume a USB storage key is plugged in"
DEFINE_string servo_host "" \
  "When running servo tests, specifies the host running servod"
DEFINE_string servo_port "" \
  "When running servo tests, specifies the port for contacting servod"

# Parse command line; die on errors
FLAGS_HELP="usage: $(basename $0) [flags] <hostname-or-ipaddr>"
FLAGS "${@}" || exit 1
eval set -- "${FLAGS_ARGV}"
set -e

if [ -z "${FLAGS_board}" ]; then
  die "--board required"
fi

if [ $# -ne 1 ]; then
  die "Must specify exactly one DUT"
fi

DUT="$1"
OPTIONS=( --board="${FLAGS_board}" )
TESTS=( suite:bvt-{inline,cq,perbuild} )

SUITE_CHECK=0
if [ ${FLAGS_smoke} -eq ${FLAGS_TRUE} ]; then
  SUITE_CHECK=$(( SUITE_CHECK + 1 ))
  TESTS=( suite:bvt-inline )
fi
if [ ${FLAGS_commit} -eq ${FLAGS_TRUE} ]; then
  SUITE_CHECK=$(( SUITE_CHECK + 1 ))
  TESTS=( suite:bvt-{inline,cq} )
fi
if [ ${FLAGS_canary} -eq ${FLAGS_TRUE} ]; then
  SUITE_CHECK=$(( SUITE_CHECK + 1 ))
  # Use the default tests.
fi
if [ ${FLAGS_labqual} -eq ${FLAGS_TRUE} ]; then
  SUITE_CHECK=$(( SUITE_CHECK + 1 ))
  TESTS=( suite:bvt-{inline,cq,faft} )
  if [ ${FLAGS_usbkey} -eq ${FLAGS_TRUE} ]; then
    TESTS+=( platform_ServoPowerStateController_USBPluggedin )
  else
    TESTS+=( platform_ServoPowerStateController_USBUnplugged )
  fi

  # Handle Servo options for the lab qualification tests.
  if [ -n "${FLAGS_servo_host}" ]; then
    SERVO_ARGS="--args=servo_host=${FLAGS_servo_host}"
    if [ -n "${FLAGS_servo_port}" ]; then
      SERVO_ARGS="${SERVO_ARGS} servo_port=${FLAGS_servo_port}"
    fi
    OPTIONS+=( "${SERVO_ARGS}" )
  elif [ -n "${FLAGS_servo_port}" ]; then
    OPTIONS+=( "--args=servo_port=${FLAGS_servo_port}" )
  fi
fi

if [ ${SUITE_CHECK} -gt 1 ]; then
  die "can specify at most one of --smoke --commit --canary or --labqual"
fi

DEBUG=
if [ ${FLAGS_debug} -eq ${FLAGS_TRUE} ]; then
  DEBUG=echo
fi

$DEBUG test_that "${OPTIONS[@]}" "$DUT" "${TESTS[@]}"
AUTOTEST_STATUS=$?

# Run mostly the same Tast tests as the bvt-tast-cq suite regardless of flags.
# Exclude "meta" tests, as they're just designed to exercise Tast itself.
$DEBUG tast -verbose run -build=false "$DUT" \
  '(!disabled && ("group:mainline" || !"group:*") && !informational &&
    !"name:meta.*")'
TAST_STATUS=$?

if [ ${AUTOTEST_STATUS} -ne 0 ] || [ ${TAST_STATUS} -ne 0 ]; then
  die "Autotest exited with ${AUTOTEST_STATUS}; Tast exited with ${TAST_STATUS}"
fi
