diff --git a/Makefile b/Makefile index 9a82465d3..9b19c9928 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,22 @@ +SHELL := /bin/bash + BINDIR := bin EXECUTABLE_CLI := airshipadm +SCRIPTS_DIR := scripts + # linting LINTER_CMD := "github.com/golangci/golangci-lint/cmd/golangci-lint" run ADDTL_LINTERS := goconst,gofmt,lll,unparam # go options -PKG := ./... -TESTS := . +PKG := ./... +TESTS := . + +# coverage +COVER := $(SCRIPTS_DIR)/coverage_test.sh +COVER_FILE := cover.out +MIN_COVERAGE := 70 .PHONY: build @@ -19,13 +28,19 @@ test: build test: lint test: TESTFLAGS += -race -v test: unit-tests +test: cover .PHONY: unit-tests unit-tests: build @echo "Performing unit test step..." - @go test -run $(TESTS) $(PKG) $(TESTFLAGS) + @go test -run $(TESTS) $(PKG) $(TESTFLAGS) -coverprofile=$(COVER_FILE) @echo "All unit tests passed" +.PHONY: cover +cover: unit-tests + @./$(COVER) $(COVER_FILE) $(MIN_COVERAGE) + + .PHONY: lint lint: @echo "Performing linting step..." @@ -35,6 +50,7 @@ lint: .PHONY: clean clean: @rm -fr $(BINDIR) + @rm -fr $(COVER_FILE) .PHONY: docs docs: diff --git a/scripts/coverage_test.sh b/scripts/coverage_test.sh new file mode 100755 index 000000000..347e23d5e --- /dev/null +++ b/scripts/coverage_test.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +check_coverage() { + COVER_FILE=$1 + MIN_COVERAGE=$2 + coverage_float=$(go tool cover -func="${COVER_FILE}" | awk "/^total:/ { print \$3 }") + coverage_int=${coverage_float%.*} + if (( "${coverage_int}" < "${MIN_COVERAGE}" )) ; then + echo "Coverage is at ${coverage_float}, but the required coverage is ${MIN_COVERAGE}" + exit 1 + fi +} + +if [ "$#" -ne 2 ]; then + echo "Usage: $0 " + exit 1 +fi + +check_coverage $1 $2