@@ -856,20 +856,20 @@ inject_vgs_feature_gate() {
856856 fi
857857}
858858
859- # Replace controller image based on the deployment mode
859+ # Replace the snapshot controller image based on the test mode
860860# Arguments:
861861# $1: yaml content
862- # $2: mode ("external-snapshotter ", "canary", or "default")
863- # $3: new_tag (for external-snapshotter mode)
862+ # $2: mode ("local-build ", "canary", or "default")
863+ # $3: new_tag (for local-build mode)
864864# $4: registry (for canary mode)
865- replace_controller_image () {
865+ replace_snapshot_controller_image () {
866866 local yaml=" $1 "
867867 local mode=" $2 "
868868 local new_tag=" ${3:- } "
869869 local registry=" ${4:- } "
870870
871871 case " $mode " in
872- external-snapshotter )
872+ local-build )
873873 # Replace with snapshot-controller:new_tag
874874 echo " $yaml " | sed -E \
875875 " s|^([[:space:]]*image: )(.*snapshot-controller):[^[:space:]]*|\1snapshot-controller:${new_tag} |"
@@ -936,7 +936,7 @@ install_snapshot_controller() {
936936 # Replace image in SNAPSHOT_CONTROLLER_YAML with snapshot-controller:csiprow and deploy
937937 # NOTE: This logic is similar to the logic here:
938938 # https://github.com/kubernetes-csi/csi-driver-host-path/blob/v1.4.0/deploy/util/deploy-hostpath.sh#L155
939- modified=" $( replace_controller_image " $yaml " " external-snapshotter " " $NEW_TAG " | inject_vgs_feature_gate) "
939+ modified=" $( replace_snapshot_controller_image " $yaml " " local-build " " $NEW_TAG " | inject_vgs_feature_gate) "
940940 diff <( echo " $yaml " ) <( echo " $modified " )
941941 if ! echo " $modified " | kubectl apply -f -; then
942942 echo " modified version of ${SNAPSHOT_CONTROLLER_YAML} :"
@@ -945,7 +945,7 @@ install_snapshot_controller() {
945945 fi
946946 elif [ " ${CSI_PROW_DRIVER_CANARY} " = " canary" ]; then
947947 echo " Deploying snapshot-controller from ${SNAPSHOT_CONTROLLER_YAML} with canary images."
948- modified=" $( replace_controller_image " $yaml " " canary" " " " ${CSI_PROW_DRIVER_CANARY_REGISTRY} " | inject_vgs_feature_gate) "
948+ modified=" $( replace_snapshot_controller_image " $yaml " " canary" " " " ${CSI_PROW_DRIVER_CANARY_REGISTRY} " | inject_vgs_feature_gate) "
949949 diff <( echo " $yaml " ) <( echo " $modified " )
950950 if ! echo " $modified " | kubectl apply -f -; then
951951 echo " modified version of ${SNAPSHOT_CONTROLLER_YAML} :"
@@ -955,7 +955,7 @@ install_snapshot_controller() {
955955 else
956956 echo " kubectl apply -f $SNAPSHOT_CONTROLLER_YAML "
957957 # Replace snapshot-controller container tag to make it consistent with CSI_SNAPSHOTTER_VERSION
958- modified=" $( replace_controller_image " $yaml " " default" | inject_vgs_feature_gate) "
958+ modified=" $( replace_snapshot_controller_image " $yaml " " default" | inject_vgs_feature_gate) "
959959 diff <( echo " $yaml " ) <( echo " $modified " )
960960 if ! echo " $modified " | kubectl apply -f -; then
961961 echo " modified version of ${SNAPSHOT_CONTROLLER_YAML} :"
@@ -1060,23 +1060,24 @@ install_e2e () {
10601060 if sidecar_tests_enabled; then
10611061 run_with_go " ${CSI_PROW_GO_VERSION_BUILD} " go test -c -o " ${CSI_PROW_WORK} /e2e-local.test" " ${CSI_PROW_SIDECAR_E2E_IMPORT_PATH} "
10621062 fi
1063-
1063+
1064+ local e2e_src_dir
10641065 # In kubernetes presubmit do not need clone the src
10651066 if [[ $( basename " ${REPO_DIR} " ) == " kubernetes" ]]; then
10661067 echo " Using existing repo at ${REPO_DIR} "
1067- E2E_SRC_DIR =" ${REPO_DIR} "
1068+ e2e_src_dir =" ${REPO_DIR} "
10681069 else
10691070 git_checkout " ${CSI_PROW_E2E_REPO} " " ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} " " ${CSI_PROW_E2E_VERSION} " --depth=1
1070- E2E_SRC_DIR =" ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} "
1071+ e2e_src_dir =" ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} "
10711072 fi
10721073
10731074 if [ " ${CSI_PROW_E2E_IMPORT_PATH} " = " k8s.io/kubernetes" ]; then
10741075 patch_kubernetes " ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} " " ${CSI_PROW_WORK} " &&
1075- go_version=" ${CSI_PROW_GO_VERSION_E2E:- $(go_version_for_kubernetes " ${E2E_SRC_DIR } " " ${CSI_PROW_E2E_VERSION} " )} " &&
1076- run_with_go " $go_version " make WHAT=test/e2e/e2e.test " -C${E2E_SRC_DIR } " &&
1077- ln -s " ${E2E_SRC_DIR } /_output/bin/e2e.test" " ${CSI_PROW_WORK} " &&
1078- run_with_go " $go_version " make WHAT=vendor/github.com/onsi/ginkgo/ginkgo " -C${E2E_SRC_DIR } " &&
1079- ln -s " ${E2E_SRC_DIR } /_output/bin/ginkgo" " ${CSI_PROW_BIN} "
1076+ go_version=" ${CSI_PROW_GO_VERSION_E2E:- $(go_version_for_kubernetes " ${e2e_src_dir } " " ${CSI_PROW_E2E_VERSION} " )} " &&
1077+ run_with_go " $go_version " make WHAT=test/e2e/e2e.test " -C${e2e_src_dir } " &&
1078+ ln -s " ${e2e_src_dir } /_output/bin/e2e.test" " ${CSI_PROW_WORK} " &&
1079+ run_with_go " $go_version " make WHAT=vendor/github.com/onsi/ginkgo/ginkgo " -C${e2e_src_dir } " &&
1080+ ln -s " ${e2e_src_dir } /_output/bin/ginkgo" " ${CSI_PROW_BIN} "
10801081 else
10811082 run_with_go " ${CSI_PROW_GO_VERSION_E2E} " go test -c -o " ${CSI_PROW_WORK} /e2e.test" " ${CSI_PROW_E2E_IMPORT_PATH} /test/e2e"
10821083 fi
@@ -1103,7 +1104,16 @@ run_with_loggers () (
11031104
11041105# Invokes the filter-junit.go tool.
11051106run_filter_junit () {
1106- run_with_go " ${CSI_PROW_GO_VERSION_BUILD} " go run " ${RELEASE_TOOLS_ROOT} /filter-junit.go" " $@ "
1107+ local go_version ksrc version
1108+ go_version=" ${CSI_PROW_GO_VERSION_BUILD} "
1109+ # Detect if running inside k/k repo
1110+ if [[ $( basename " ${REPO_DIR} " ) == " kubernetes" ]]; then
1111+ echo " Using Kubernetes source from CI checkout ..."
1112+ ksrc=" ${REPO_DIR} "
1113+ version=" $( git -C " $ksrc " rev-parse HEAD) "
1114+ go_version=" $( go_version_for_kubernetes " $ksrc " " $version " ) " || die " cannot proceed without knowing Go version for run_filter_junit"
1115+ fi
1116+ run_with_go " ${go_version} " go run " ${RELEASE_TOOLS_ROOT} /filter-junit.go" " $@ "
11071117}
11081118
11091119# Runs the E2E test suite in a sub-shell.
@@ -1119,33 +1129,68 @@ run_e2e () (
11191129 # the full Kubernetes E2E testsuite while only running a few tests.
11201130 # shellcheck disable=SC2329
11211131 move_junit () {
1122- # shellcheck disable=SC2317
1123- FILTER=' External.Storage|CSI.mock.volume'
1124- # shellcheck disable=SC2317
1125- if [ " ${CSI_PROW_ENABLE_GROUP_SNAPSHOT} " = " true" ]; then
1126- FILTER=" ${FILTER} |\[Feature:volumegroupsnapshot\]"
1127- fi
1128-
11291132 # shellcheck disable=SC2317
11301133 if ls " ${ARTIFACTS} " /junit_[0-9]* .xml 2> /dev/null > /dev/null; then
11311134 mkdir -p " ${ARTIFACTS} /junit/${name} " &&
1132- mkdir -p " ${ARTIFACTS} /junit/steps" &&
1133- run_filter_junit -t=" ${FILTER} " -o " ${ARTIFACTS} /junit/steps/junit_${name} .xml" " ${ARTIFACTS} " /junit_[0-9]* .xml &&
1135+ mkdir -p " ${ARTIFACTS} /junit/steps"
1136+
1137+ # Skip filter-junit for in-tree (VGS) runs, because k/k already produces clean JUnit
1138+ if [[ " ${name} " == " vgs" ]]; then
1139+ echo " Skipping filter-junit for ${name} (in-tree tests already generate clean JUnit)"
1140+ mv " ${ARTIFACTS} " /junit_[0-9]* .xml " ${ARTIFACTS} /junit/${name} /"
1141+ else
1142+ # Run filtering for CSI tests to remove duplicates/skipped cases
1143+ run_filter_junit -t=" External.Storage|CSI.mock.volume" \
1144+ -o " ${ARTIFACTS} /junit/steps/junit_${name} .xml" \
1145+ " ${ARTIFACTS} " /junit_[0-9]* .xml &&
11341146 mv " ${ARTIFACTS} " /junit_[0-9]* .xml " ${ARTIFACTS} /junit/${name} /"
1147+ fi
11351148 fi
11361149 }
11371150 trap move_junit EXIT
11381151
1139- if [ " ${name} " == " local" ]; then
1140- cd " ${GOPATH} /src/${CSI_PROW_SIDECAR_E2E_PATH} " &&
1141- run_with_loggers env KUBECONFIG=" $KUBECONFIG " KUBE_TEST_REPO_LIST=" $( if [ -e " ${CSI_PROW_WORK} /e2e-repo-list" ]; then echo " ${CSI_PROW_WORK} /e2e-repo-list" ; fi) " ginkgo --timeout=" ${CSI_PROW_GINKGO_TIMEOUT} " -v " $@ " " ${CSI_PROW_WORK} /e2e-local.test" -- -report-dir " ${ARTIFACTS} " -report-prefix local
1142- elif [ " ${CSI_PROW_ENABLE_GROUP_SNAPSHOT} " = " true" ] && [ " ${name} " == " parallel-features" ]; then
1143- cd " ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} " &&
1144- run_with_loggers env KUBECONFIG=" $KUBECONFIG " KUBE_TEST_REPO_LIST=" $( if [ -e " ${CSI_PROW_WORK} /e2e-repo-list" ]; then echo " ${CSI_PROW_WORK} /e2e-repo-list" ; fi) " ginkgo --timeout=" ${CSI_PROW_GINKGO_TIMEOUT} " -v " $@ " " ${CSI_PROW_WORK} /e2e.test" -- -report-dir " ${ARTIFACTS} " -report-prefix vgs
1152+
1153+ # Only set up move_junit for non-VGS tests
1154+ if [ " $name " != " vgs" ]; then
1155+ trap move_junit EXIT
1156+ fi
1157+
1158+ # Determine ginkgo target and options
1159+ local ginkgo_target=" "
1160+ local extra_args=" "
1161+ local e2e_src_dir=" "
1162+ local args=()
1163+
1164+ if [[ $( basename " ${REPO_DIR} " ) == " kubernetes" ]]; then
1165+ e2e_src_dir=" ${REPO_DIR} "
11451166 else
1146- cd " ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} " &&
1147- run_with_loggers env KUBECONFIG=" $KUBECONFIG " KUBE_TEST_REPO_LIST=" $( if [ -e " ${CSI_PROW_WORK} /e2e-repo-list" ]; then echo " ${CSI_PROW_WORK} /e2e-repo-list" ; fi) " ginkgo --timeout=" ${CSI_PROW_GINKGO_TIMEOUT} " -v " $@ " " ${CSI_PROW_WORK} /e2e.test" -- -report-dir " ${ARTIFACTS} " -storage.testdriver=" ${CSI_PROW_WORK} /test-driver.yaml"
1167+ e2e_src_dir=" ${GOPATH} /src/${CSI_PROW_E2E_IMPORT_PATH} "
11481168 fi
1169+
1170+ case " $name " in
1171+ local)
1172+ ginkgo_target=" ${CSI_PROW_WORK} /e2e-local.test"
1173+ extra_args=" -report-prefix=local"
1174+ cd " ${GOPATH} /src/${CSI_PROW_SIDECAR_E2E_PATH} " || die " cd ${GOPATH} /src/${CSI_PROW_SIDECAR_E2E_PATH} failed"
1175+ ;;
1176+ vgs)
1177+ # VGS tests are in in-tree/core tests; do NOT pass -storage.testdriver
1178+ ginkgo_target=" ${CSI_PROW_WORK} /e2e.test"
1179+ cd " ${e2e_src_dir} " || die " cd ${e2e_src_dir} failed"
1180+ ;;
1181+ * )
1182+ # Default: CSI external driver tests
1183+ ginkgo_target=" ${CSI_PROW_WORK} /e2e.test"
1184+ extra_args=" -storage.testdriver=${CSI_PROW_WORK} /test-driver.yaml"
1185+ cd " ${e2e_src_dir} " || die " cd ${e2e_src_dir} failed"
1186+ ;;
1187+ esac
1188+
1189+ [ -n " $extra_args " ] && args+=(" $extra_args " )
1190+ run_with_loggers env \
1191+ KUBECONFIG=" $KUBECONFIG " \
1192+ KUBE_TEST_REPO_LIST=" $( if [ -e " ${CSI_PROW_WORK} /e2e-repo-list" ]; then echo " ${CSI_PROW_WORK} /e2e-repo-list" ; fi) " \
1193+ ginkgo --timeout=" ${CSI_PROW_GINKGO_TIMEOUT} " -v " $@ " " $ginkgo_target " -- -report-dir " ${ARTIFACTS} " " ${args[@]} "
11491194)
11501195
11511196# Run csi-sanity against installed CSI driver.
@@ -1444,18 +1489,11 @@ main () {
14441489 ret=1
14451490 fi
14461491
1447- # Only add feature regex if groupsnapshot is not enabled
1448- if [ " ${CSI_PROW_ENABLE_GROUP_SNAPSHOT} " = " true" ]; then
1449- combined_focus=" ${CSI_PROW_E2E_FOCUS} "
1450- else
1451- combined_focus=" $focus .*($( regex_join " ${CSI_PROW_E2E_FOCUS} " ) )"
1452- fi
1453-
14541492 # Run tests that are feature tagged, but non-alpha
14551493 # Ignore: Double quote to prevent globbing and word splitting.
14561494 # shellcheck disable=SC2086
14571495 if ! run_e2e parallel-features ${CSI_PROW_GINKGO_PARALLEL} \
1458- -focus=" $combined_focus " \
1496+ -focus=" $focus .*( $( regex_join " ${CSI_PROW_E2E_FOCUS} " ) ) " \
14591497 -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " ) " ; then
14601498 warn " E2E parallel features failed"
14611499 ret=1
@@ -1479,6 +1517,18 @@ main () {
14791517 ret=1
14801518 fi
14811519 fi
1520+
1521+ # Run VGS in-tree tests only if enabled
1522+ if [ " ${CSI_PROW_ENABLE_GROUP_SNAPSHOT} " = " true" ]; then
1523+ vgs_focus=" \[Feature:volumegroupsnapshot\]"
1524+ if ! run_e2e vgs \
1525+ -focus=" ${vgs_focus} " \
1526+ -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
1527+ warn " E2E VGS tests failed"
1528+ ret=1
1529+ fi
1530+ fi
1531+
14821532 fi
14831533 delete_cluster_inside_prow_job non-alpha
14841534 fi
0 commit comments