#!/bin/bash
#
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit
set -o pipefail

usage() {
  cat <<'EOF'
Usage: ./run_unit_tests.sh
run_unit_tests.sh runs all unit tests under src/pkg and src/cmd in the cos/tools
repository.

EOF
}

setup_test() {
  # build changelogctl binary
  go build -o src/cmd/changelogctl/changelogctl src/cmd/changelogctl/main.go

  apt-get update && apt-get install -y sudo fdisk sysstat mtools dosfstools

  # clean up to save disk space
  rm -rf "$(readlink -f bazel-bin)"
  rm -rf "$(readlink -f bazel-out)"
  rm -rf "$(readlink -f bazel-testlogs)"
  rm -rf "$(readlink -f bazel-tools)"

  rm -rf bazel-*
}

main() {
  cd /workspace
  setup_test

  # Run tests from each directory where go test files are present.
  test_dirs=$(find /workspace/src -name "*_test.go" -printf "%h\n" | sort | uniq)
  local exit_code=0
  for test_dir in ${test_dirs}; do
    cd "${test_dir}"
    # TODO(nrengaraj@): run profilertest in separate docker image.
    # If the directory contains BUILD.bazel, the tests have already
    # run using bazel in the previous step.
    if [ ! -f "BUILD.bazel" ] || [[ ${test_dir} == *"pkg/utils"* ]]; then
      if [[ ${test_dir} != *"profilertest"* ]]; then
        echo "Running tests for ${test_dir}"
        # TestCheckDrivers is outdated, the older COS milestones are not supported
        go test -v -skip "(TestFindCL|TestCheckDrivers)"
        if [ $? -ne 0 ]; then
          exit_code=1
        fi
      fi
    fi
  done
  return "${exit_code}"
}

main
