Files
query-orchestration/scripts/tests.yml
T
Michael McGuinness e23ada9a8e Merged in bugfix/querytest (pull request #147)
Pass Test Query

* passfullsutie
2025-05-21 11:25:17 +00:00

140 lines
4.6 KiB
YAML

---
# https://taskfile.dev
version: "3"
vars:
COVERAGE_FILE: "{{.OUT_DIR}}/coverage.out"
BENCH_FILE: "{{.OUT_DIR}}/bench.out"
TEST_FILE: "{{.OUT_DIR}}/test.out"
INTERNAL: "./internal/..."
API: "./api/..."
PKG: "./pkg/..."
CMD: "./cmd/..."
CPU_COUNT:
sh: |
# First try nproc (Linux)
if command -v nproc >/dev/null 2>&1; then
nproc
# Fall back to sysctl (macOS)
elif [ "$(uname)" = "Darwin" ]; then
sysctl -n hw.ncpu
# Fall back to Windows approach
elif [ "$(uname)" = "Windows" ] || [ "$(uname)" = "MINGW"* ]; then
echo "$NUMBER_OF_PROCESSORS"
else
echo "4" # Default fallback value
fi
TEST_PARALLEL:
sh: echo $(( {{.CPU_COUNT}} ))
# yamllint disable-line rule:line-length
EXCLUDED_FILES: ".gen.go|internal/serviceconfig/observability/prometheus/generator/main.go|internal/cognitoauth/middleware.go|internal/cognitoauth/token.go|internal/cognitoauth/auth.go|internal/cognitoauth/handler.go|internal/cognitoauth/models.go|api/queryAPI/authHandlers.go|api/queryAPI/homehandler.go"
tasks:
mocks:generate:
run: once
cmds:
- rm -rf mocks/*
- go tool mockery --log-level=""
functional:
cmds:
- mkdir -p {{.OUT_DIR}}
- |
GOMAXPROCS={{.TEST_PARALLEL}} go test -parallel {{.CPU_COUNT}} \
-coverpkg={{.INTERNAL}},{{.API}},{{.PKG}} \
-coverprofile={{.COVERAGE_FILE}} \
./...
- task: coverage
race:
cmds:
- GOMAXPROCS={{.TEST_PARALLEL}} go test -parallel {{.CPU_COUNT}} -race ./...
perf:
vars:
NUM_RESULTS: 5
cmds:
- |
GOMAXPROCS={{.TEST_PARALLEL}} go test -parallel {{.CPU_COUNT}} -count=1 -json ./... \
> {{.TEST_FILE}}
- |
echo -e "🐢 TOP {{.NUM_RESULTS}} SLOWEST INDIVIDUAL PACKAGE RUNS:"
jq -r 'select(.Action == "pass" and .Test == null) | "\(.Elapsed)s \(.Package)"' "{{.TEST_FILE}}" | \
sort -rn | head -n {{.NUM_RESULTS}}
echo -e "\n📉 TOP {{.NUM_RESULTS}} SLOWEST TESTS:"
jq -r 'select(.Action == "pass" and .Test != null) | "\(.Elapsed)s \(.Test) (\(.Package))"' "{{.TEST_FILE}}" | \
sort -rn | head -n {{.NUM_RESULTS}}
SLOWEST_PKG=$(jq -r 'select(.Action == "pass") | [.Package, .Elapsed] | @tsv' "{{.TEST_FILE}}" |
awk '{pkg[$1] += $2} END {for (p in pkg) print pkg[p] "s " p}' |
sort -rn | head -n 1 | awk '{print $2}')
echo -e "\n🔎 TOP {{.NUM_RESULTS}} SLOWEST TESTS IN SLOWEST PACKAGE ($SLOWEST_PKG):"
jq -r --arg pkg "$SLOWEST_PKG" \
'select(.Action == "pass" and .Test != null and .Package == $pkg) | "\(.Elapsed)s \(.Test)"' "{{.TEST_FILE}}" |
sort -rn | head -n {{.NUM_RESULTS}}
bench:
vars:
TMP_FILE: "{{.OUT_DIR}}/coverage.tmp"
FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out"
cmds:
- go test -run ^Benchmark -bench=. ./... > {{.BENCH_FILE}}
- benchstat {{.BENCH_FILE}}
unit:short:
deps:
- mocks:generate
cmds:
- mkdir -p {{.OUT_DIR}}
- |
go test -parallel {{.TEST_PARALLEL}} -short \
{{.INTERNAL}} {{.API}} {{.CLI_ARGS}}
coverage:
internal: true
vars:
TMP_FILE: "{{.OUT_DIR}}/coverage.tmp"
FILTER_COVERAGE_FILE: "{{.OUT_DIR}}/filtered_coverage.out"
cmds:
- grep -v -E "{{.EXCLUDED_FILES}}" {{.COVERAGE_FILE}} > {{.FILTER_COVERAGE_FILE}}
- go tool cover -func={{.FILTER_COVERAGE_FILE}} > {{.TMP_FILE}}
- |
COVERAGE=$(grep total: {{.TMP_FILE}} | awk '{print $NF}' | sed 's/%//')
echo "Coverage Threshold: {{.COVERAGE_THRESHOLD}}%"
echo "Total Coverage: $COVERAGE%"
FAIL=false
if (( $(echo "$COVERAGE < {{.COVERAGE_THRESHOLD}}" | bc -l) )); then
echo "❌ Error: Total Coverage below Coverage Threshold"
FAIL=true
fi
echo "Function Coverage Threshold: {{.FUNCTION_COVERAGE_THRESHOLD}}%"
awk -v threshold="{{.FUNCTION_COVERAGE_THRESHOLD}}" '
!/total:/ {
line = $0;
coverage = $NF;
gsub(/%/, "", coverage);
if (coverage + 0 < threshold + 0) {
if (!printed_header) {
print "❌ Error: The following functions have coverage below " threshold "%:";
printed_header = 1;
}
print line;
exit_code = 1;
}
}
END {
exit exit_code;
}
' {{.TMP_FILE}}
if [ $? -eq 1 ]; then
FAIL=true
fi
if [ "$FAIL" = true ]; then
exit 1
fi
echo "✅ All coverage checks passed!"