Skip to content

Commit aa45a1c

Browse files
committed
prow.sh: more efficient execution of individual tests
When running only some tests, sometimes extra, unnecessarily work was done, like bringing up the cluster without alpha gates.
1 parent f3d1d2d commit aa45a1c

File tree

1 file changed

+116
-98
lines changed

1 file changed

+116
-98
lines changed

prow.sh

+116-98
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,30 @@ configvar CSI_PROW_SANITY_CONTAINER "hostpath" "Kubernetes container with CSI dr
202202
# is off by default. A CSI driver can change that default in its .prow.sh
203203
# by setting CSI_PROW_TESTS_SANITY.
204204
configvar CSI_PROW_TESTS "unit parallel serial parallel-alpha serial-alpha ${CSI_PROW_TESTS_SANITY}" "tests to run"
205-
test_enabled () {
206-
local test="$1"
207-
# We want word-splitting here, so ignore: Double quote to prevent globbing and word splitting.
208-
# shellcheck disable=SC2086
209-
set ${CSI_PROW_TESTS}
210-
for t in "$@"; do
211-
if [ "$t" = "$test" ]; then
212-
return
213-
fi
205+
tests_enabled () {
206+
local t1 t2
207+
# We want word-splitting here, so ignore: Quote to prevent word splitting, or split robustly with mapfile or read -a.
208+
# shellcheck disable=SC2206
209+
local tests=(${CSI_PROW_TESTS})
210+
for t1 in "$@"; do
211+
for t2 in "${tests[@]}"; do
212+
if [ "$t1" = "$t2" ]; then
213+
return
214+
fi
215+
done
214216
done
215217
return 1
216218
}
219+
tests_need_kind () {
220+
tests_enabled "sanity" "parallel" "serial" "serial-alpha" "parallel-alpha"
221+
}
222+
tests_need_non_alpha_cluster () {
223+
tests_enabled "sanity" "parallel" "serial"
224+
}
225+
tests_need_alpha_cluster () {
226+
tests_enabled "parallel-alpha" "serial-alpha"
227+
}
228+
217229

218230
# Serial vs. parallel is always determined by these regular expressions.
219231
# Individual regular expressions are seperated by spaces for readability
@@ -521,6 +533,15 @@ install_hostpath () {
521533
return 1
522534
fi
523535

536+
if ${CSI_PROW_BUILD_JOB}; then
537+
# Ignore: Double quote to prevent globbing and word splitting.
538+
# Ignore: To read lines rather than words, pipe/redirect to a 'while read' loop.
539+
# shellcheck disable=SC2086 disable=SC2013
540+
for i in $(grep '^\s*CMDS\s*=' Makefile | sed -e 's/\s*CMDS\s*=//'); do
541+
kind load docker-image --name csi-prow $i:csiprow || die "could not load the $i:latest image into the kind cluster"
542+
done
543+
fi
544+
524545
if deploy_hostpath="$(find_deployment "$(pwd)/deploy")"; then
525546
:
526547
elif [ "${CSI_PROW_HOSTPATH_REPO}" = "none" ]; then
@@ -836,7 +857,7 @@ main () {
836857
# might have been minor or unavoidable, for example when experimenting with
837858
# changes in "release-tools" in a PR (that fails the "is release-tools unmodified"
838859
# test).
839-
if test_enabled "unit"; then
860+
if tests_enabled "unit"; then
840861
if ! run_with_go "${CSI_PROW_GO_VERSION_BUILD}" make -k test 2>&1 | make_test_to_junit; then
841862
warn "'make test' failed, proceeding anyway"
842863
ret=1
@@ -846,102 +867,99 @@ main () {
846867
run_with_go "${CSI_PROW_GO_VERSION_BUILD}" make container || die "'make container' failed"
847868
fi
848869
849-
install_kind || die "installing kind failed"
850-
start_cluster || die "starting the cluster failed"
870+
if tests_need_kind; then
871+
install_kind || die "installing kind failed"
851872
852-
if ${CSI_PROW_BUILD_JOB}; then
853-
cmds="$(grep '^\s*CMDS\s*=' Makefile | sed -e 's/\s*CMDS\s*=//')"
854-
# Get the image that was just built (if any) from the
855-
# top-level Makefile CMDS variable and set the
856-
# deploy-hostpath.sh env variables for it. We also need to
857-
# side-load those images into the cluster.
858-
for i in $cmds; do
859-
e=$(echo "$i" | tr '[:lower:]' '[:upper:]' | tr - _)
860-
images="$images ${e}_REGISTRY=none ${e}_TAG=csiprow"
861-
862-
# We must avoid the tag "latest" because that implies
863-
# always pulling the image
864-
# (https://github.com/kubernetes-sigs/kind/issues/328).
865-
docker tag "$i:latest" "$i:csiprow" || die "tagging the locally built container image for $i failed"
866-
kind load docker-image --name csi-prow "$i:csiprow" || die "could not load the $i:latest image into the kind cluster"
867-
done
873+
if ${CSI_PROW_BUILD_JOB}; then
874+
cmds="$(grep '^\s*CMDS\s*=' Makefile | sed -e 's/\s*CMDS\s*=//')"
875+
# Get the image that was just built (if any) from the
876+
# top-level Makefile CMDS variable and set the
877+
# deploy-hostpath.sh env variables for it. We also need to
878+
# side-load those images into the cluster.
879+
for i in $cmds; do
880+
e=$(echo "$i" | tr '[:lower:]' '[:upper:]' | tr - _)
881+
images="$images ${e}_REGISTRY=none ${e}_TAG=csiprow"
882+
883+
# We must avoid the tag "latest" because that implies
884+
# always pulling the image
885+
# (https://github.com/kubernetes-sigs/kind/issues/328).
886+
docker tag "$i:latest" "$i:csiprow" || die "tagging the locally built container image for $i failed"
887+
done
868888
869-
if [ -e deploy/kubernetes/rbac.yaml ]; then
870-
# This is one of those components which has its own RBAC rules (like external-provisioner).
871-
# We are testing a locally built image and also want to test with the the current,
872-
# potentially modified RBAC rules.
873-
if [ "$(echo "$cmds" | wc -w)" != 1 ]; then
874-
die "ambiguous deploy/kubernetes/rbac.yaml: need exactly one command, got: $cmds"
889+
if [ -e deploy/kubernetes/rbac.yaml ]; then
890+
# This is one of those components which has its own RBAC rules (like external-provisioner).
891+
# We are testing a locally built image and also want to test with the the current,
892+
# potentially modified RBAC rules.
893+
if [ "$(echo "$cmds" | wc -w)" != 1 ]; then
894+
die "ambiguous deploy/kubernetes/rbac.yaml: need exactly one command, got: $cmds"
895+
fi
896+
e=$(echo "$cmds" | tr '[:lower:]' '[:upper:]' | tr - _)
897+
images="$images ${e}_RBAC=$(pwd)/deploy/kubernetes/rbac.yaml"
875898
fi
876-
e=$(echo "$cmds" | tr '[:lower:]' '[:upper:]' | tr - _)
877-
images="$images ${e}_RBAC=$(pwd)/deploy/kubernetes/rbac.yaml"
878-
fi
879-
fi
880-
881-
# Installing the driver might be disabled, in which case we bail out early.
882-
if ! install_hostpath "$images"; then
883-
info "hostpath driver installation disabled, skipping E2E testing"
884-
return "$ret"
885-
fi
886-
887-
collect_cluster_info
888-
889-
if test_enabled "sanity"; then
890-
if ! run_sanity; then
891-
ret=1
892-
fi
893-
fi
894-
895-
if test_enabled "parallel"; then
896-
# Ignore: Double quote to prevent globbing and word splitting.
897-
# shellcheck disable=SC2086
898-
if ! run_e2e parallel ${CSI_PROW_GINKO_PARALLEL} \
899-
-focus="External.Storage" \
900-
-skip="$(regex_join "${CSI_PROW_E2E_SERIAL}" "${CSI_PROW_E2E_ALPHA}" "${CSI_PROW_E2E_SKIP}")"; then
901-
warn "E2E parallel failed"
902-
ret=1
903899
fi
904-
fi
905-
906-
if test_enabled "serial"; then
907-
if ! run_e2e serial \
908-
-focus="External.Storage.*($(regex_join "${CSI_PROW_E2E_SERIAL}"))" \
909-
-skip="$(regex_join "${CSI_PROW_E2E_ALPHA}" "${CSI_PROW_E2E_SKIP}")"; then
910-
warn "E2E serial failed"
911-
ret=1
912-
fi
913-
fi
914900
915-
if (test_enabled "parallel-alpha" || test_enabled "serial-alpha") && [ "${CSI_PROW_E2E_ALPHA_GATES}" ]; then
916-
# Need to (re)create the cluster.
917-
start_cluster "${CSI_PROW_E2E_ALPHA_GATES}" || die "starting alpha cluster failed"
918-
if ${CSI_PROW_BUILD_JOB}; then
919-
# Ignore: Double quote to prevent globbing and word splitting.
920-
# Ignore: To read lines rather than words, pipe/redirect to a 'while read' loop.
921-
# shellcheck disable=SC2086 disable=SC2013
922-
for i in $(grep '^\s*CMDS\s*=' Makefile | sed -e 's/\s*CMDS\s*=//'); do
923-
kind load docker-image --name csi-prow $i:csiprow || die "could not load the $i:latest image into the kind cluster"
924-
done
925-
fi
926-
install_hostpath "$images" || die "hostpath driver installation failed unexpectedly on alpha cluster"
927-
928-
if test_enabled "parallel-alpha"; then
929-
# Ignore: Double quote to prevent globbing and word splitting.
930-
# shellcheck disable=SC2086
931-
if ! run_e2e parallel-alpha ${CSI_PROW_GINKO_PARALLEL} \
932-
-focus="External.Storage.*($(regex_join "${CSI_PROW_E2E_ALPHA}"))" \
933-
-skip="$(regex_join "${CSI_PROW_E2E_SERIAL}" "${CSI_PROW_E2E_SKIP}")"; then
934-
warn "E2E parallel alpha failed"
935-
ret=1
901+
if tests_need_non_alpha_cluster; then
902+
start_cluster || die "starting the non-alpha cluster failed"
903+
904+
# Installing the driver might be disabled.
905+
if install_hostpath "$images"; then
906+
collect_cluster_info
907+
908+
if tests_enabled "sanity"; then
909+
if ! run_sanity; then
910+
ret=1
911+
fi
912+
fi
913+
914+
if tests_enabled "parallel"; then
915+
# Ignore: Double quote to prevent globbing and word splitting.
916+
# shellcheck disable=SC2086
917+
if ! run_e2e parallel ${CSI_PROW_GINKO_PARALLEL} \
918+
-focus="External.Storage" \
919+
-skip="$(regex_join "${CSI_PROW_E2E_SERIAL}" "${CSI_PROW_E2E_ALPHA}" "${CSI_PROW_E2E_SKIP}")"; then
920+
warn "E2E parallel failed"
921+
ret=1
922+
fi
923+
fi
924+
925+
if tests_enabled "serial"; then
926+
if ! run_e2e serial \
927+
-focus="External.Storage.*($(regex_join "${CSI_PROW_E2E_SERIAL}"))" \
928+
-skip="$(regex_join "${CSI_PROW_E2E_ALPHA}" "${CSI_PROW_E2E_SKIP}")"; then
929+
warn "E2E serial failed"
930+
ret=1
931+
fi
932+
fi
936933
fi
937934
fi
938935
939-
if test_enabled "serial-alpha"; then
940-
if ! run_e2e serial-alpha \
941-
-focus="External.Storage.*(($(regex_join "${CSI_PROW_E2E_SERIAL}")).*($(regex_join "${CSI_PROW_E2E_ALPHA}"))|($(regex_join "${CSI_PROW_E2E_ALPHA}")).*($(regex_join "${CSI_PROW_E2E_SERIAL}")))" \
942-
-skip="$(regex_join "${CSI_PROW_E2E_SKIP}")"; then
943-
warn "E2E serial alpha failed"
944-
ret=1
936+
if tests_need_alpha_cluster && [ "${CSI_PROW_E2E_ALPHA_GATES}" ]; then
937+
# Need to (re)create the cluster.
938+
start_cluster "${CSI_PROW_E2E_ALPHA_GATES}" || die "starting alpha cluster failed"
939+
940+
# Installing the driver might be disabled.
941+
if install_hostpath "$images"; then
942+
collect_cluster_info
943+
944+
if tests_enabled "parallel-alpha"; then
945+
# Ignore: Double quote to prevent globbing and word splitting.
946+
# shellcheck disable=SC2086
947+
if ! run_e2e parallel-alpha ${CSI_PROW_GINKO_PARALLEL} \
948+
-focus="External.Storage.*($(regex_join "${CSI_PROW_E2E_ALPHA}"))" \
949+
-skip="$(regex_join "${CSI_PROW_E2E_SERIAL}" "${CSI_PROW_E2E_SKIP}")"; then
950+
warn "E2E parallel alpha failed"
951+
ret=1
952+
fi
953+
fi
954+
955+
if tests_enabled "serial-alpha"; then
956+
if ! run_e2e serial-alpha \
957+
-focus="External.Storage.*(($(regex_join "${CSI_PROW_E2E_SERIAL}")).*($(regex_join "${CSI_PROW_E2E_ALPHA}"))|($(regex_join "${CSI_PROW_E2E_ALPHA}")).*($(regex_join "${CSI_PROW_E2E_SERIAL}")))" \
958+
-skip="$(regex_join "${CSI_PROW_E2E_SKIP}")"; then
959+
warn "E2E serial alpha failed"
960+
ret=1
961+
fi
962+
fi
945963
fi
946964
fi
947965
fi

0 commit comments

Comments
 (0)