#!/bin/bash
set -e
umask 077
CUR_DIR=$(dirname "$(readlink -f $0)")
TOP_DIR=$(realpath "${CUR_DIR}"/../../..)
export PATH="${GOPATH}/bin/:$PATH"
export GO111MODULE=on
export GONOSUMDB="*"
function filter_cov_by_tested_pkgs() {
local tested_pkgs
tested_pkgs=$(go list -buildvcs=false -f '{{if .TestGoFiles}}{{.ImportPath}}{{end}}' "${TOP_DIR}"/...)
awk -v pkgs="$tested_pkgs" '
NR==1 {print; next}
{
file=$1; sub(/:[0-9].*/, "", file)
n=split(file, p, "/"); pkg=""
for(i=1;i<n;i++) pkg=pkg p[i]"/"; sub(/\/$/,"", pkg)
found=0; split(pkgs, arr, "\n"); for(k in arr) {if(arr[k]==pkg){found=1;break}}
if (found) print
}
' cov.out > cov_filtered.out
}
function execute_test() {
cd ${TOP_DIR}
if ! gotestsum --junitfile "${TOP_DIR}"/test/unit-tests.xml --jsonfile test.jsonl \
-- -mod=mod -count=1 -gcflags=-l -v -coverprofile cov.out "${TOP_DIR}"/...; then
echo '****** go test cases error! ******'
exit 1
fi
filter_cov_by_tested_pkgs
${GOPATH}/bin/gocov convert cov.out | ${GOPATH}/bin/gocov-html > "$file_detail_output"
total_coverage_before_filtered=$(go tool cover -func=cov.out | grep "total:" | awk '{print $3}'| sed 's/%//')
total_coverage=$(go tool cover -func=cov_filtered.out | grep "total:" | awk '{print $3}'| sed 's/%//')
coverage=$(echo "$total_coverage" | awk '{if ($1 >= 0) print ($1 == int($1)) ? int($1) : int($1) + 1;\
else print ($1 == int($1)) ? int($1) : int($1)}')
if [[ $coverage -ge 76 ]]; then
echo "coverage passed: $coverage%"
exit 0
else
echo "coverage failed: $coverage%, it needs to be greater than 80%."
exit 1
fi
}
file_detail_output="${TOP_DIR}/test/api.html"
echo "************************************* Start LLT Test *************************************"
mkdir -p "${TOP_DIR}"/test/
cd "${TOP_DIR}"/test/
if [ -f "$file_detail_output" ]; then
rm -rf $file_detail_output
fi
execute_test
echo "************************************* End LLT Test *************************************"