./test: CI (./test) should never edit go.mod nor go.sum files
Tested and received as expected: ``` ... go: updates to go.mod needed, disabled by -mod=readonly ```release-3.5
parent
d19758b501
commit
0f195baca1
59
test
59
test
|
@ -33,6 +33,11 @@
|
||||||
# $ COVERDIR=coverage PASSES="build_cov cov" ./test
|
# $ COVERDIR=coverage PASSES="build_cov cov" ./test
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# The test script is not supposed to make any changes to the files
|
||||||
|
# e.g. add/update missing dependencies. Such divergences should be
|
||||||
|
# detected and trigger a failure that needs explicit developer's action.
|
||||||
|
export GOFLAGS=-mod=readonly
|
||||||
|
|
||||||
source ./build
|
source ./build
|
||||||
|
|
||||||
# build before setting up test GOPATH
|
# build before setting up test GOPATH
|
||||||
|
@ -152,7 +157,7 @@ function unit_pass {
|
||||||
else
|
else
|
||||||
USERTIMEOUT="${TIMEOUT}"
|
USERTIMEOUT="${TIMEOUT}"
|
||||||
fi
|
fi
|
||||||
go test -mod=mod ${GO_TEST_FLAG} -timeout "${USERTIMEOUT}" "${COVER}" ${RACE} -cpu "${TEST_CPUS}" ${RUN_ARG} "$@" "${TEST[@]}"
|
go test ${GO_TEST_FLAG} -timeout "${USERTIMEOUT}" "${COVER}" ${RACE} -cpu "${TEST_CPUS}" ${RUN_ARG} "$@" "${TEST[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function integration_pass {
|
function integration_pass {
|
||||||
|
@ -172,7 +177,7 @@ function integration_pass {
|
||||||
# if TESTCASE not set, PKG set, run all test cases in specified package
|
# if TESTCASE not set, PKG set, run all test cases in specified package
|
||||||
# if TESTCASE not set, PKG not set, run all tests in all integration and integration_extra packages
|
# if TESTCASE not set, PKG not set, run all tests in all integration and integration_extra packages
|
||||||
if [ -z "${TESTCASE}" ] && [ -z "${USERPKG}" ]; then
|
if [ -z "${TESTCASE}" ] && [ -z "${USERPKG}" ]; then
|
||||||
go test -mod=mod -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration"
|
go test -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration"
|
||||||
integration_extra "$@"
|
integration_extra "$@"
|
||||||
else
|
else
|
||||||
if [ -z "${USERPKG}" ]; then
|
if [ -z "${USERPKG}" ]; then
|
||||||
|
@ -183,16 +188,16 @@ function integration_pass {
|
||||||
else
|
else
|
||||||
INTEGTESTPKG=("${TEST[@]}")
|
INTEGTESTPKG=("${TEST[@]}")
|
||||||
fi
|
fi
|
||||||
go test -mod=mod -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "${RUN_ARG}" "$@" "${INTEGTESTPKG[@]}"
|
go test -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "${RUN_ARG}" "$@" "${INTEGTESTPKG[@]}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function integration_extra {
|
function integration_extra {
|
||||||
go test -mod=mod -timeout 1m -v ${RACE} -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/client/integration"
|
go test -timeout 1m -v ${RACE} -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/client/integration"
|
||||||
go test -mod=mod -timeout 25m -v ${RACE} -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/clientv3/integration"
|
go test -timeout 25m -v ${RACE} -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/clientv3/integration"
|
||||||
go test -mod=mod -timeout 1m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/contrib/raftexample"
|
go test -timeout 1m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/contrib/raftexample"
|
||||||
go test -mod=mod -timeout 5m -v ${RACE} -tags v2v3 "$@" "${REPO_PATH}/etcdserver/api/v2store"
|
go test -timeout 5m -v ${RACE} -tags v2v3 "$@" "${REPO_PATH}/etcdserver/api/v2store"
|
||||||
go test -mod=mod -timeout 1m -v ${RACE} -cpu "${TEST_CPUS}" -run=Example "$@" "${TEST[@]}"
|
go test -timeout 1m -v ${RACE} -cpu "${TEST_CPUS}" -run=Example "$@" "${TEST[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function functional_pass {
|
function functional_pass {
|
||||||
|
@ -269,26 +274,26 @@ function cov_pass {
|
||||||
for t in $(echo "${TEST_PKGS}" | grep -vE "(tests/e2e|functional)"); do
|
for t in $(echo "${TEST_PKGS}" | grep -vE "(tests/e2e|functional)"); do
|
||||||
tf=$(echo "$t" | tr / _)
|
tf=$(echo "$t" | tr / _)
|
||||||
# cache package compilation data for faster repeated builds
|
# cache package compilation data for faster repeated builds
|
||||||
go test -mod=mod "${GOCOVFLAGS[@]}" -i "${REPO_PATH}/$t" || true
|
go test "${GOCOVFLAGS[@]}" -i "${REPO_PATH}/$t" || true
|
||||||
# uses -run=Test to skip examples because clientv3/ example tests will leak goroutines
|
# uses -run=Test to skip examples because clientv3/ example tests will leak goroutines
|
||||||
go test -mod=mod "${GOCOVFLAGS[@]}" -run=Test -coverprofile "$COVERDIR/${tf}.coverprofile" "${REPO_PATH}/$t" || failed="$failed $t"
|
go test "${GOCOVFLAGS[@]}" -run=Test -coverprofile "$COVERDIR/${tf}.coverprofile" "${REPO_PATH}/$t" || failed="$failed $t"
|
||||||
done
|
done
|
||||||
|
|
||||||
# v2v3 tests
|
# v2v3 tests
|
||||||
go test -mod=mod -tags v2v3 "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/store-v2v3.coverprofile" "${REPO_PATH}/clientv3/integration" || failed="$failed store-v2v3"
|
go test -tags v2v3 "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/store-v2v3.coverprofile" "${REPO_PATH}/clientv3/integration" || failed="$failed store-v2v3"
|
||||||
|
|
||||||
# proxy tests
|
# proxy tests
|
||||||
go test -mod=mod -tags cluster_proxy "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/proxy_integration.coverprofile" "${REPO_PATH}/integration" || failed="$failed proxy-integration"
|
go test -tags cluster_proxy "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/proxy_integration.coverprofile" "${REPO_PATH}/integration" || failed="$failed proxy-integration"
|
||||||
go test -mod=mod -tags cluster_proxy "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/proxy_clientv3.coverprofile" "${REPO_PATH}/clientv3/integration" || failed="$failed proxy-clientv3/integration"
|
go test -tags cluster_proxy "${GOCOVFLAGS[@]}" -coverprofile "$COVERDIR/proxy_clientv3.coverprofile" "${REPO_PATH}/clientv3/integration" || failed="$failed proxy-clientv3/integration"
|
||||||
|
|
||||||
# run code coverage for e2e tests
|
# run code coverage for e2e tests
|
||||||
# use 30m timeout because e2e coverage takes longer
|
# use 30m timeout because e2e coverage takes longer
|
||||||
# due to many tests cause etcd process to wait
|
# due to many tests cause etcd process to wait
|
||||||
# on leadership transfer timeout during gracefully shutdown
|
# on leadership transfer timeout during gracefully shutdown
|
||||||
echo Testing tests/e2e without proxy...
|
echo Testing tests/e2e without proxy...
|
||||||
go test -mod=mod -tags cov -timeout 30m -v "${REPO_PATH}/tests/e2e" || failed="$failed tests/e2e"
|
go test -tags cov -timeout 30m -v "${REPO_PATH}/tests/e2e" || failed="$failed tests/e2e"
|
||||||
echo Testing tests/e2e with proxy...
|
echo Testing tests/e2e with proxy...
|
||||||
go test -mod=mod -tags "cov cluster_proxy" -timeout 30m -v "${REPO_PATH}/tests/e2e" || failed="$failed tests/e2e-proxy"
|
go test -tags "cov cluster_proxy" -timeout 30m -v "${REPO_PATH}/tests/e2e" || failed="$failed tests/e2e-proxy"
|
||||||
|
|
||||||
# incrementally merge to get coverage data even if some coverage files are corrupted
|
# incrementally merge to get coverage data even if some coverage files are corrupted
|
||||||
# optimistically assume etcdserver package's coverage file is OK since gocovmerge
|
# optimistically assume etcdserver package's coverage file is OK since gocovmerge
|
||||||
|
@ -328,15 +333,15 @@ function e2e_pass {
|
||||||
USERTIMEOUT="${TIMEOUT}"
|
USERTIMEOUT="${TIMEOUT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
go test -mod=mod -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "${RUN_ARG}" "$@" "${REPO_PATH}/tests/e2e"
|
go test -timeout "${USERTIMEOUT}" -v -cpu "${TEST_CPUS}" "${RUN_ARG}" "$@" "${REPO_PATH}/tests/e2e"
|
||||||
}
|
}
|
||||||
|
|
||||||
function integration_e2e_pass {
|
function integration_e2e_pass {
|
||||||
echo "Running integration and e2e tests..."
|
echo "Running integration and e2e tests..."
|
||||||
|
|
||||||
go test -mod=mod -timeout 30m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/tests/e2e" &
|
go test -timeout 30m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/tests/e2e" &
|
||||||
e2epid="$!"
|
e2epid="$!"
|
||||||
go test -mod=mod -timeout 30m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration" &
|
go test -timeout 30m -v -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration" &
|
||||||
intpid="$!"
|
intpid="$!"
|
||||||
wait $e2epid
|
wait $e2epid
|
||||||
wait $intpid
|
wait $intpid
|
||||||
|
@ -344,9 +349,9 @@ function integration_e2e_pass {
|
||||||
}
|
}
|
||||||
|
|
||||||
function grpcproxy_pass {
|
function grpcproxy_pass {
|
||||||
go test -mod=mod -timeout 30m -v ${RACE} -tags cluster_proxy -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration"
|
go test -timeout 30m -v ${RACE} -tags cluster_proxy -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/integration"
|
||||||
go test -mod=mod -timeout 30m -v ${RACE} -tags cluster_proxy -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/clientv3/integration"
|
go test -timeout 30m -v ${RACE} -tags cluster_proxy -cpu "${TEST_CPUS}" "$@" "${REPO_PATH}/clientv3/integration"
|
||||||
go test -mod=mod -timeout 30m -v -tags cluster_proxy "$@" "${REPO_PATH}/tests/e2e"
|
go test -timeout 30m -v -tags cluster_proxy "$@" "${REPO_PATH}/tests/e2e"
|
||||||
}
|
}
|
||||||
|
|
||||||
function release_pass {
|
function release_pass {
|
||||||
|
@ -450,7 +455,7 @@ function gofmt_pass {
|
||||||
}
|
}
|
||||||
|
|
||||||
function govet_pass {
|
function govet_pass {
|
||||||
vetRes=$(go vet -mod=mod "${TEST[@]}")
|
vetRes=$(go vet "${TEST[@]}")
|
||||||
if [ -n "${vetRes}" ]; then
|
if [ -n "${vetRes}" ]; then
|
||||||
echo -e "govet checking failed:\\n${vetRes}"
|
echo -e "govet checking failed:\\n${vetRes}"
|
||||||
exit 255
|
exit 255
|
||||||
|
@ -641,7 +646,7 @@ function bom_pass {
|
||||||
fi
|
fi
|
||||||
echo "Checking bill of materials..."
|
echo "Checking bill of materials..."
|
||||||
# https://github.com/golang/go/commit/7c388cc89c76bc7167287fb488afcaf5a4aa12bf
|
# https://github.com/golang/go/commit/7c388cc89c76bc7167287fb488afcaf5a4aa12bf
|
||||||
GOFLAGS="-mod=mod" license-bill-of-materials \
|
license-bill-of-materials \
|
||||||
--override-file bill-of-materials.override.json \
|
--override-file bill-of-materials.override.json \
|
||||||
go.etcd.io/etcd/v3 go.etcd.io/etcd/v3/etcdctl >bom-now.json || true
|
go.etcd.io/etcd/v3 go.etcd.io/etcd/v3/etcdctl >bom-now.json || true
|
||||||
if ! diff bill-of-materials.json bom-now.json; then
|
if ! diff bill-of-materials.json bom-now.json; then
|
||||||
|
@ -667,16 +672,16 @@ function dep_pass {
|
||||||
function build_cov_pass {
|
function build_cov_pass {
|
||||||
out="bin"
|
out="bin"
|
||||||
if [ -n "${BINDIR}" ]; then out="${BINDIR}"; fi
|
if [ -n "${BINDIR}" ]; then out="${BINDIR}"; fi
|
||||||
go test -mod=mod -tags cov -c -covermode=set -coverpkg="$PKGS_COMMA" -o "${out}/etcd_test"
|
go test -tags cov -c -covermode=set -coverpkg="$PKGS_COMMA" -o "${out}/etcd_test"
|
||||||
|
|
||||||
go test -mod=mod -tags cov -c -covermode=set -coverpkg="$PKGS_COMMA" -o "${out}/etcdctl_test" "${REPO_PATH}/etcdctl"
|
go test -tags cov -c -covermode=set -coverpkg="$PKGS_COMMA" -o "${out}/etcdctl_test" "${REPO_PATH}/etcdctl"
|
||||||
}
|
}
|
||||||
|
|
||||||
# fail fast on static tests
|
# fail fast on static tests
|
||||||
function build_pass {
|
function build_pass {
|
||||||
echo "Checking build..."
|
echo "Checking build..."
|
||||||
GO_BUILD_FLAGS="-v -mod=mod" etcd_build
|
GO_BUILD_FLAGS="-v" etcd_build
|
||||||
GO_BUILD_FLAGS="-v -mod=mod" tools_build
|
GO_BUILD_FLAGS="-v" tools_build
|
||||||
}
|
}
|
||||||
|
|
||||||
for pass in $PASSES; do
|
for pass in $PASSES; do
|
||||||
|
|
Loading…
Reference in New Issue