summaryrefslogtreecommitdiffstats
path: root/build/hv-collector-coverage/check-coverage.sh
blob: cfd8f87f5d9ad7210baba4a3eb98a4ec958e0c28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash
set -euo pipefail

JACOCO_REPORT="$1"
MIN_COVERAGE_PERCENT="$2"
ROOT_SOURCES_MODULE_POM="$3"
LOG_FILE=target/check-coverage.log

function coverage_from_report() {
  local xpath_expr="string(/report/counter[@type='INSTRUCTION']/@$1)"
  xpath -q -e "$xpath_expr" "$JACOCO_REPORT" 2>> ${LOG_FILE}
}

function check_preconditions() {
  local num_deps=$(grep -c 'project\.parent\.groupId' pom.xml)
  local num_submodules=$(grep -c '<module>' ${ROOT_SOURCES_MODULE_POM})
  local difference=$((${num_submodules}-${num_deps}))

  if [[ ${difference} -ne 0 ]]; then
    echo "Not all modules are included in the coverage report."
    echo "Verify if all submodules of hv-collector-sources module are included as a dependency to hv-collector-coverage module."
    echo "Number of missing modules: ${difference}"
    exit 1
  fi
}

function check_coverage() {
  local missed=$(coverage_from_report missed)
  local covered=$(coverage_from_report covered)
  local total=$(($missed + $covered))
  local coverage=$((100 * $covered / $total))

  if [[ $(wc -c < ${LOG_FILE}) > 0 ]]; then
    echo "Warnings from xpath evaluation:"
    cat ${LOG_FILE}
    echo
  fi

  echo "Coverage: $coverage% (covered/total: $covered/$total)"

  if [[ ${coverage} -lt ${MIN_COVERAGE_PERCENT} ]]; then
    echo "Coverage is too low. Minimum coverage: $MIN_COVERAGE_PERCENT%"
    exit 1
  fi
}

check_preconditions || exit 1
check_coverage || exit 2