#!/usr/bin/env bash

# Copyright 2021 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

source devtools/docker.sh || { echo "Are you at repo root?"; exit 1; }

getfile() {
  local file
  if [[ -d $1 && -e "$1/$2" ]]; then
    file="$1/$2"
  elif [[ -f $1 && -e "$(dirname $1)/$2" ]]; then
    file="$(dirname $1)/$2"
  fi
  echo $file
}

main() {
  trap docker_cleanup EXIT
  trap docker_error ERR

  local files="tests/e2e/*.test.ts --runInBand"
  local config
  local seed
  for arg in "$@"; do
    if [[ $arg == tests/* ]]; then
      files=""
    fi
    config=$(getfile $arg config.yaml)
    seed=$(getfile $arg seed.txt)
    if [[ $config != "" || $seed != "" ]]; then
      break
    fi
  done

  export GO_DISCOVERY_CONFIG_DYNAMIC=${config:-"tests/e2e/config.yaml"}
  export GO_DISCOVERY_DATABASE_NAME=discovery_e2e_test
  export GO_DISCOVERY_SEED_DB_FILE=${seed:-"tests/e2e/seed.txt"}
  dockercompose build && dockercompose run --rm seeddb && \
  dockercompose run --rm e2e $files $@

  local status=$?
  if [ $status -eq 0 ]
  then
    echo "Done!"
  else
    echo "e2e tests failed."
  fi
  exit $status
}

main $@
