k8s.io/registry.k8s.io@v0.3.1/hack/make-rules/test.sh (about) 1 #!/usr/bin/env bash 2 3 # Copyright 2022 The Kubernetes Authors. 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 # script to run unit / integration tests, with coverage enabled and junit xml output 18 set -o errexit -o nounset -o pipefail 19 20 # cd to the repo root and setup go 21 REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)" 22 cd "${REPO_ROOT}" 23 source hack/tools/setup-go.sh 24 25 # set to 'unit' or 'integration' to run a subset 26 MODE="${MODE:-all}" 27 28 # build gotestsum 29 cd 'hack/tools' 30 go build -o "${REPO_ROOT}/bin/gotestsum" gotest.tools/gotestsum 31 cd "${REPO_ROOT}" 32 33 go_test_opts=( 34 "-coverprofile=${REPO_ROOT}/bin/${MODE}.cov" 35 '-covermode' 'count' 36 '-coverpkg' 'k8s.io/registry.k8s.io/...' 37 ) 38 if [[ "${MODE}" = 'unit' ]]; then 39 go_test_opts+=('-tags=nointegration,noe2e') 40 elif [[ "${MODE}" = 'integration' ]]; then 41 go_test_opts+=('-run' '^TestIntegration' '-tags=noe2e') 42 else 43 go_test_opts+=('-tags=noe2e') 44 MODE="all" 45 fi 46 47 # run unit tests with coverage enabled and junit output 48 ( 49 set -x; 50 "${REPO_ROOT}/bin/gotestsum" --junitfile="${REPO_ROOT}/bin/${MODE}-junit.xml" \ 51 -- "${go_test_opts[@]}" './...' 52 ) 53 54 # generate cover html 55 go tool cover -html="${REPO_ROOT}/bin/${MODE}.cov" -o "${REPO_ROOT}/bin/${MODE}.html" 56 57 # if we are in CI, copy to the artifact upload location 58 if [[ -n "${ARTIFACTS:-}" ]]; then 59 cp "bin/${MODE}-junit.xml" "${ARTIFACTS:?}/junit.xml" 60 # TODO: currently these names are required in $ARTIFACTS in order to render 61 # in the spyglass view. however we're not filtering anymore 62 cp "${REPO_ROOT}/bin/${MODE}.cov" "${ARTIFACTS:?}/filtered.cov" 63 cp "${REPO_ROOT}/bin/${MODE}.html" "${ARTIFACTS:?}/filtered.html" 64 fi 65 66 # enforce coverage levels if we're running all tests 67 if [[ "${MODE}" = 'all' ]]; then 68 (set -x; cd ./hack/tools && go run ./require-coverage) 69 fi