#!/bin/bash


# Copyright (c) 2011 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 is a less lazy way to get all the unittests running at once, but
# took longer to write.

IN_CHROOT=cros_sdk
OUTSIDE_CHROOT_BUILDBOT=$(dirname $0)
CHROOT_BUILDBOT=../../chromite/buildbot

declare -a FAILED_TESTS
declare -a FAILED_LOGS

set -eu

# Helper function to add failed logs/tests to be printed out later.
# $1 test that failed.
# $2 log file where we stored the output of the failed test.
append_failed_test() {
  echo "ERROR: $1 failed.  Log will be output at end of run!!!"
  FAILED_TESTS+=($1)
  FAILED_LOGS+=($2)
}

# Wrapper to run unittest.  Hides output unless test fails.
# $1 test to run.  Must be in chromite/buildbot.
# $2 If set, run inside the chroot.
run_test() {
  local log_file=$(mktemp)
  echo "Running unittest $1"

  if [ $# -gt 1 ]; then
    ${IN_CHROOT} -- $CHROOT_BUILDBOT/$1 &> $log_file ||
      append_failed_test $1 $log_file
  else
    $OUTSIDE_CHROOT_BUILDBOT/$1 &> $log_file ||
      append_failed_test $1 $log_file
  fi
}

# For some versions of 'sudo' (notably, the 'sudo' in the chroot at
# the time of this writing), sudo -v will ask for a password whether
# or not it's needed.  'sudo true' will do what we want.
sudo true

all_tests=(
  portage_utilities_unittest.py
  cbuildbot_unittest.py
  cbuildbot_config_unittest.py
  cbuildbot_commands_unittest.py
  cbuildbot_stages_unittest.py
  gerrit_helper_unittest.py
  lkgm_manager_unittest.py
  manifest_version_unittest.py
  patch_unittest.py
  prebuilt_unittest.py
  remote_try_unittest.py
  validation_pool_unittest.py
  "cros_mark_as_stable_unittest.py yes"
  "cros_mark_chrome_as_stable_unittest.py yes"
)
if [ $# -eq 0 ]; then
  set -- "${all_tests[@]}"
fi

for test in "$@" ; do
  run_test ${test}
done

if [ ${#FAILED_TESTS[@]} -gt 0 ]; then
  index=0
  for test in "${FAILED_TESTS[@]}"; do

    echo
    echo "FAIL: Unittest $test failed output:"
    echo

    cat ${FAILED_LOGS[$index]}
    rm ${FAILED_LOGS[$index]}
    index=$(( index + 1 ))
  done
  echo
  echo "FAIL: The following tests failed ${FAILED_TESTS[@]}"
  exit 1
else
  echo "All tests succeeded!"
fi
