#!/bin/bash

# Copyright 2018 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
#
#     https://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.


# Prow may not create artifacts folder in advance.
mkdir -p "$ARTIFACTS"

# Include kunitconfig manually until we can pull it from prowjob TODO(avikr)
cp /kunitconfig ./kunitconfig

# Add correct configs to .config to make GCOV flags work
cp kunitconfig .config
echo -e "CONFIG_DEBUG_KERNEL=y\nCONFIG_DEBUG_INFO=y\nCONFIG_GCOV=y" >> .config

# Run the KUnit tool unit tests
python3 ./tools/testing/kunit/kunit_test.py > "$ARTIFACTS/kunit_test.log" 2>&1
KUNIT_TEST_EXIT_CODE=$?

# Build and run kernel, parse output, and send details to output log
python3 ./tools/testing/kunit/kunit.py run > "$ARTIFACTS/kunit.log" 2>&1
KUNIT_EXIT_CODE=$?

# Generate an HTML coverage report using LCOV
# TODO(mariaignacio): Have LCOV_FILTER be default until we can specify the state
LCOV_FILTER=1

if [[ $LCOV_FILTER -eq 1 ]]; then
  # Generate a list of recently modified directories, "-d <dirname> ..."
  # Note: the final `xargs` joins all the lines together.
  DIRNAMES=$(git diff --name-only HEAD~ | xargs dirname | sort -u | sed -e 's/^/-d /' | xargs)

  lcov -t "kunit_presubmit_tests" -o coverage.info -c ${DIRNAMES} --no-recursion \
  > "$ARTIFACTS/lcov.log" 2>&1
else
  lcov -t "kunit_presubmit_tests" -o coverage.info -c -d . > "$ARTIFACTS/lcov.log" 2>&1
fi

genhtml -o "$ARTIFACTS/coverage_html" coverage.info --css-file /lcov/lcov.css > "$ARTIFACTS/genhtml.log" 2>&1
GENHTML_EXIT_CODE=$?

if [[ $GENHTML_EXIT_CODE -eq 0 ]]; then
  # Overwrite the pixel images in coverage_html
  cp /lcov/emerald.png "$ARTIFACTS/coverage_html"
  cp /lcov/ruby.png "$ARTIFACTS/coverage_html"
fi

if [[ $KUNIT_TEST_EXIT_CODE -ne 0 ]]; then
  echo "KUnit Tool Presubmit Failed:"
  echo "============================="
  cat "$ARTIFACTS/kunit_test.log"
  echo "============================="
fi

echo

if [[ $KUNIT_EXIT_CODE -ne 0 ]]; then
  echo "KUnit Presubmit Failed:"
else
  echo "KUnit Presubmit Succeeded:"
fi

echo

if [[ $GENHTML_EXIT_CODE -ne 0 ]]; then
  echo "Coverage Report Generation Failed:"
  echo "============================="
  cat "$ARTIFACTS/lcov.log"
  echo "============================="
  cat "$ARTIFACTS/genhtml.log"
  echo "============================="
else
  awk '/Overall coverage rate:/,EOF' "$ARTIFACTS/genhtml.log"
fi

echo "============================="
cat "$ARTIFACTS/kunit.log"
echo "============================="

if [[ $KUNIT_TEST_EXIT_CODE -ne 0 || $KUNIT_EXIT_CODE -ne 0 ]]; then
  exit 1
fi
