| #!/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 "=============================" |
| fi |
| |
| echo "=============================" |
| cat "$ARTIFACTS/kunit.log" |
| echo "=============================" |
| |
| if [[ $KUNIT_TEST_EXIT_CODE -ne 0 || $KUNIT_EXIT_CODE -ne 0 ]]; then |
| exit 1 |
| fi |