summaryrefslogtreecommitdiffstats
path: root/ci/cover.sh
diff options
context:
space:
mode:
authorkubi <jean.gaoliang@huawei.com>2015-09-14 02:50:50 -0400
committerkubi <jean.gaoliang@huawei.com>2015-10-28 11:21:26 +0800
commit607148f8e4eb4ebb443dd5098b4fea5f880f9fbb (patch)
treef220a594c6688144d2ebcfea5b4f14f98190179c /ci/cover.sh
parentf37d291f6397891cd0dc37c6140b114868921b61 (diff)
part 2 :add coverage report in Jenkins for Yardstick
this part is focus on script on run coverage test,not only show missing lines but also show diff between your patch and master, actually,it produce a html for coverage,but now ,it just on your local machine extra missing lines is 10-lines,final target is 4-lines JIRA:YARDSTICK-108 Change-Id: I550dff51d6f89562447e12127646155325e38a4a Signed-off-by: kubi <jean.gaoliang@huawei.com>
Diffstat (limited to 'ci/cover.sh')
-rw-r--r--ci/cover.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/ci/cover.sh b/ci/cover.sh
new file mode 100644
index 000000000..51b009de8
--- /dev/null
+++ b/ci/cover.sh
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+# make coverage report
+##############################################################################
+
+show_diff () {
+ head -1 $1
+ diff -U 0 $1 $2 | sed 1,2d
+}
+
+
+run_coverage_test() {
+
+ ALLOWED_EXTRA_MISSING=10
+
+
+ # 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 yardstick_coverageXXXXXXX)
+ find . -type f -name "*.pyc" -delete && python setup.py testr --coverage --testr-args="$*"
+ coverage report > $baseline_report
+ baseline_missing=$(awk 'END { print $3 }' $baseline_report)
+
+ # 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 yardstick_coverageXXXXXXX)
+ find . -type f -name "*.pyc" -delete && python setup.py testr --coverage --testr-args="$*"
+ coverage report > $current_report
+ current_missing=$(awk 'END { print $3 }' $current_report)
+
+ # Show coverage details
+ allowed_missing=$((baseline_missing+ALLOWED_EXTRA_MISSING))
+
+ echo "Allowed to introduce missing lines : ${ALLOWED_EXTRA_MISSING}"
+ echo "Missing lines in master : ${baseline_missing}"
+ echo "Missing lines in proposed change : ${current_missing}"
+
+ if [ $allowed_missing -gt $current_missing ];
+ then
+ if [ $baseline_missing -lt $current_missing ];
+ 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
+ else
+ 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
+ fi
+
+ rm $baseline_report $current_report
+}