Merge "New storage test case: Bonnie++"
[yardstick.git] / tests / ci / cover.sh
index 6e4d608..780a85a 100644 (file)
@@ -1,3 +1,4 @@
+#!/bin/bash
 ##############################################################################
 # Copyright 2015: Mirantis Inc.
 # All Rights Reserved.
 # rally/tests/ci/cover.sh
 ##############################################################################
 
+if [[ -n $COVER_DIR_NAME ]]; then
+    :
+elif [[ -n $_ ]]; then
+    COVER_DIR_NAME=$( dirname $_ )
+else
+    COVER_DIR_NAME=$( dirname $0 )
+fi
+
 show_diff () {
-    head -1 $1
-    diff -U 0 $1 $2 | sed 1,2d
+    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
+    [[ -n ${uncommited} ]] && git stash > /dev/null
     git checkout HEAD^
 
     baseline_report=$(mktemp -t yardstick_coverageXXXXXXX)
+    ls -l .testrepository
+
     # workaround 'db type could not be determined' bug
     # https://bugs.launchpad.net/testrepository/+bug/1229445
-    rm -f .testrepository/times.dbm
-    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)
+    rm -rf .testrepository
+    find . -type f -name "*.pyc" -delete
+
+    #python setup.py testr --coverage --testr-args=""
+    python setup.py testr --coverage --slowest --testr-args="$*"
+    testr failing
+    coverage report > ${baseline_report}
+
+    # 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
+    [[ -n ${uncommited} ]] && git stash pop > /dev/null
 
     # Generate and save coverage report
     current_report=$(mktemp -t yardstick_coverageXXXXXXX)
+    ls -l .testrepository
+
     # workaround 'db type could not be determined' bug
     # https://bugs.launchpad.net/testrepository/+bug/1229445
-    rm -f .testrepository/times.dbm
-    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)
+    rm -rf .testrepository
+    find . -type f -name "*.pyc" -delete
+
+    #python setup.py testr --coverage --testr-args=""
+    python setup.py testr --coverage --slowest --testr-args="$*"
+    testr failing
+    coverage report > ${current_report}
+
+    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
-    allowed_missing=$((baseline_missing+ALLOWED_EXTRA_MISSING))
+    new_missing=$((current_missing - baseline_missing))
 
-    echo "Allowed to introduce missing lines : ${ALLOWED_EXTRA_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 [ $allowed_missing -gt $current_missing ];
+    if [[ ${new_missing} -gt ${ALLOWED_EXTRA_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
+        show_diff ${baseline_report} ${current_report}
         echo "Please write more unit tests, we should keep our test coverage :( "
-        rm $baseline_report $current_report
+        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
+    rm ${baseline_report} ${current_report}
 }