#!/bin/sh

short_options='io'
long_options='index,print-output'

usage() {
  cat <<EOF
usage: debci test [OPTIONS] srcpkg

Options:
  -i, --index               force indexing results just after running the tests
  -o, --print-output        print output directory after test finished

$@
EOF
}

set -eu

debci_base_dir=$(readlink -f $(dirname $(readlink -f $0))/..)
. $debci_base_dir/lib/environment.sh
. $debci_base_dir/lib/functions.sh

process_package() {
  # setup status dir
  status_dir=$(status_dir_for_package "$pkg")
  mkdir -p "$status_dir"

  # output directory for test-package/adt-run
  run_id=$(date +%Y%m%d_%H%M%S)
  adt_out_dir="$(autopkgtest_dir_for_package "$pkg")/$run_id"

  inc=0
  orig_run_id="$run_id"
  while [ -d "$adt_out_dir" ]; do
    # this in *very* unlikely to happen in production, but we need this for the
    # test suite
    run_id="${orig_run_id}.${inc}"
    adt_out_dir="$(autopkgtest_dir_for_package "$pkg")/$run_id"
  done

  mkdir -p "$(dirname $adt_out_dir)"
  start_timestamp=$(date +%s)

  # ignore output; we'll get the log from the adt-run output-dir
  test-package "$pkg" "$adt_out_dir" >/dev/null 2>&1 || true

  finish_timestamp=$(date +%s)
  echo $(($finish_timestamp - $start_timestamp)) >> "$adt_out_dir/duration"

  if [ -n "$print_output" ]; then
      echo "$adt_out_dir"
  fi
  # Don't do anything after this, test-package might request an asynchronous
  # remote test run. Results get picked up by generate-indexes.
}

# defaults
index=''
print_output=''

while true; do
  case "$1" in
    -i|--index)
      index=true
      shift
      ;;
    -o|--print-output)
      print_output=true
      shift
      ;;
    --)
      shift
      break
      ;;
    *)
      shift
      ;;
  esac
done

if [ $# -eq 1 ]; then
  pkg="$1"
  process_package
  if [ $index ]; then
    debci-generate-index "$pkg"
  fi
else
  usage
  exit 1
fi
