summaryrefslogtreecommitdiffstats
path: root/tools/cover.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cover.sh')
-rw-r--r--tools/cover.sh118
1 files changed, 118 insertions, 0 deletions
diff --git a/tools/cover.sh b/tools/cover.sh
new file mode 100644
index 0000000..8acfb56
--- /dev/null
+++ b/tools/cover.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+##############################################################################
+# Copyright 2018 EuropeanSoftwareMarketingLtd.
+# ===================================================================
+# Licensed under the ApacheLicense, Version2.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
+#
+# 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
+##############################################################################
+# vnftest comment: this is a modified copy of
+# yardstick/tools/cover.sh
+
+if [[ -n $COVER_DIR_NAME ]]; then
+ :
+elif [[ -n $_ ]]; then
+ COVER_DIR_NAME=$( dirname $_ )
+else
+ COVER_DIR_NAME=$( dirname $0 )
+fi
+
+show_diff () {
+ diff -U 0 $1 $2 | awk -f $COVER_DIR_NAME/cover.awk
+}
+
+run_coverage_test() {
+
+ ALLOWED_EXTRA_MISSING=10
+ # enable debugging
+ set -x
+
+ # Stash uncommitted changes, checkout master and save coverage report
+ uncommited=$(git status --porcelain | grep -v "^??")
+ [[ -n ${uncommited} ]] && git stash > /dev/null
+ git checkout HEAD^
+
+ baseline_report=$(mktemp -t vnftest_coverageXXXXXXX)
+
+ find . -type f -name "*.pyc" -delete
+
+ # Temporarily run tests from two directories, until all tests have moved
+ coverage run -p -m unittest discover ./tests/unit
+ coverage run -p -m unittest discover ./vnftest/tests/unit
+ coverage combine
+
+ # Temporarily omit vnftest/tests from the report
+ coverage report --omit=vnftest/tests/*/* > ${baseline_report}
+ coverage erase
+
+ # debug awk
+ tail -1 ${baseline_report}
+ baseline_missing=$(awk 'END { if (int($3) > 0) print $3 }' ${baseline_report})
+
+ if [[ -z $baseline_missing ]]; then
+ echo "Failed to determine baseline missing"
+ exit 1
+ fi
+
+ # Checkout back and unstash uncommitted changes (if any)
+ git checkout -
+ [[ -n ${uncommited} ]] && git stash pop > /dev/null
+
+ # Generate and save coverage report
+ current_report=$(mktemp -t vnftest_coverageXXXXXXX)
+
+ find . -type f -name "*.pyc" -delete
+
+ # Temporarily run tests from two directories, until all tests have moved
+ coverage run -p -m unittest discover ./tests/unit
+ coverage run -p -m unittest discover ./vnftest/tests/unit
+ coverage combine
+
+ # Temporarily omit vnftest/tests from the report
+ coverage report --omit=vnftest/tests/*/* > ${current_report}
+ coverage erase
+
+ rm -rf cover-$PY_VER
+ coverage html -d cover-$PY_VER
+
+ # debug awk
+ tail -1 ${current_report}
+ current_missing=$(awk 'END { if (int($3) > 0) print $3 }' ${current_report})
+
+ if [[ -z $current_missing ]]; then
+ echo "Failed to determine current missing"
+ exit 1
+ fi
+
+ # Show coverage details
+ new_missing=$((current_missing - baseline_missing))
+
+ echo "Missing lines allowed to introduce : ${ALLOWED_EXTRA_MISSING}"
+ echo "Missing lines introduced : ${new_missing}"
+ echo "Missing lines in master : ${baseline_missing}"
+ echo "Missing lines in proposed change : ${current_missing}"
+
+ if [[ ${new_missing} -gt ${ALLOWED_EXTRA_MISSING} ]];
+ then
+ show_diff ${baseline_report} ${current_report}
+ echo "Please write more unit tests, we should keep our test coverage :( "
+ rm ${baseline_report} ${current_report}
+ exit 1
+
+ elif [[ ${new_missing} -gt 0 ]];
+ then
+ show_diff ${baseline_report} ${current_report}
+ echo "I believe you can cover all your code with 100% coverage!"
+
+ else
+ echo "Thank you! You are awesome! Keep writing unit tests! :)"
+ fi
+
+ rm ${baseline_report} ${current_report}
+}