diff --git a/test/e2e/storage/vsphere/vsphere_common.go b/test/e2e/storage/vsphere/vsphere_common.go index cccd9f49e32..bce83bee1ed 100644 --- a/test/e2e/storage/vsphere/vsphere_common.go +++ b/test/e2e/storage/vsphere/vsphere_common.go @@ -24,6 +24,10 @@ import ( "k8s.io/kubernetes/test/e2e/framework" ) +// VSphereCSIMigrationEnabled is the environment variables to help +// determine test verification flow. +const VSphereCSIMigrationEnabled = "VSPHERE_CSI_MIGRATION_ENABLED" + // environment variables related to datastore parameters const ( SPBMPolicyName = "VSPHERE_SPBM_POLICY_NAME" @@ -111,3 +115,15 @@ func GetAndExpectIntEnvVar(varName string) int { framework.ExpectNoError(err, "Error Parsing "+varName) return varIntValue } + +// GetAndExpectBoolEnvVar returns the bool value of an environment variable +// if environment variable is not set return false +func GetAndExpectBoolEnvVar(varName string) bool { + varValue := os.Getenv(varName) + if varValue == "" { + return false + } + varBoolValue, err := strconv.ParseBool(varValue) + framework.ExpectNoError(err, "Error Parsing "+varName) + return varBoolValue +} diff --git a/test/e2e/storage/vsphere/vsphere_volume_datastore.go b/test/e2e/storage/vsphere/vsphere_volume_datastore.go index 55f6e724d7c..d0bb4ac5276 100644 --- a/test/e2e/storage/vsphere/vsphere_volume_datastore.go +++ b/test/e2e/storage/vsphere/vsphere_volume_datastore.go @@ -26,6 +26,7 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" + "k8s.io/kubernetes/test/e2e/framework" e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epv "k8s.io/kubernetes/test/e2e/framework/pv" @@ -51,9 +52,10 @@ const ( var _ = utils.SIGDescribe("Volume Provisioning on Datastore [Feature:vsphere]", func() { f := framework.NewDefaultFramework("volume-datastore") var ( - client clientset.Interface - namespace string - scParameters map[string]string + client clientset.Interface + namespace string + scParameters map[string]string + vSphereCSIMigrationEnabled bool ) ginkgo.BeforeEach(func() { e2eskipper.SkipUnlessProviderIs("vsphere") @@ -63,6 +65,7 @@ var _ = utils.SIGDescribe("Volume Provisioning on Datastore [Feature:vsphere]", scParameters = make(map[string]string) _, err := e2enode.GetRandomReadySchedulableNode(f.ClientSet) framework.ExpectNoError(err) + vSphereCSIMigrationEnabled = GetAndExpectBoolEnvVar(VSphereCSIMigrationEnabled) }) ginkgo.It("verify dynamically provisioned pv using storageclass fails on an invalid datastore", func() { @@ -71,7 +74,12 @@ var _ = utils.SIGDescribe("Volume Provisioning on Datastore [Feature:vsphere]", scParameters[DiskFormat] = ThinDisk err := invokeInvalidDatastoreTestNeg(client, namespace, scParameters) framework.ExpectError(err) - errorMsg := `Failed to provision volume with StorageClass \"` + datastoreSCName + `\": Datastore '` + invalidDatastore + `' not found` + var errorMsg string + if !vSphereCSIMigrationEnabled { + errorMsg = `Failed to provision volume with StorageClass \"` + datastoreSCName + `\": Datastore '` + invalidDatastore + `' not found` + } else { + errorMsg = `failed to find datastoreURL for datastore name: \"` + invalidDatastore + `\"` + } if !strings.Contains(err.Error(), errorMsg) { framework.ExpectNoError(err, errorMsg) } @@ -95,5 +103,12 @@ func invokeInvalidDatastoreTestNeg(client clientset.Interface, namespace string, eventList, err := client.CoreV1().Events(pvclaim.Namespace).List(context.TODO(), metav1.ListOptions{}) framework.ExpectNoError(err) - return fmt.Errorf("Failure message: %+q", eventList.Items[0].Message) + + var eventErrorMessages string + for _, event := range eventList.Items { + if event.Type != v1.EventTypeNormal { + eventErrorMessages = eventErrorMessages + event.Message + ";" + } + } + return fmt.Errorf("event messages: %+q", eventErrorMessages) }