summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--ci/cover.sh66
-rwxr-xr-xrun_tests.sh13
-rwxr-xr-xsetup.py4
4 files changed, 83 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index dcaa10f42..5614ae866 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,4 +23,5 @@ setuptools*zip
dist/
pep8.log
test.log
-
+.testrepository/
+cover/
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
+}
diff --git a/run_tests.sh b/run_tests.sh
index b4ddc94ce..d1567af9c 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -53,6 +53,11 @@ run_tests() {
fi
}
+run_coverage() {
+ source ci/cover.sh
+ run_coverage_test
+}
+
run_functional_test() {
mkdir -p .testrepository
@@ -62,8 +67,14 @@ run_functional_test() {
EXIT_CODE=$?
subunit-stats < .testrepository/subunit.log
- exit $EXIT_CODE
+ if [ $EXIT_CODE -ne 0 ]; then
+ exit 1
+ else
+ echo "OK"
+ fi
}
+
run_flake8
run_tests
+run_coverage
run_functional_test
diff --git a/setup.py b/setup.py
index a6848ec63..b8a6fe987 100755
--- a/setup.py
+++ b/setup.py
@@ -16,6 +16,7 @@ setup(
},
url="https://www.opnfv.org",
install_requires=["backport_ipaddress", # remove with python3
+ "coverage>=3.6",
"flake8",
"Jinja2>=2.6",
"PyYAML>=3.10",
@@ -28,7 +29,8 @@ setup(
"mock>=1.0.1", # remove with python3
"paramiko",
"six",
- "testrepository>=0.0.18"
+ "testrepository>=0.0.18",
+ "testtools>=1.4.0"
],
extras_require={
'plot': ["matplotlib>=1.4.2"]