diff --git a/test/e2e/storage/csi_volumes.go b/test/e2e/storage/csi_volumes.go index 47f98c60618..71878ead83d 100644 --- a/test/e2e/storage/csi_volumes.go +++ b/test/e2e/storage/csi_volumes.go @@ -43,7 +43,7 @@ import ( ) // List of testDrivers to be executed in below loop -var csiTestDrivers = []func() testsuites.TestDriver{ +var csiTestDrivers = []func(config testsuites.TestConfig) testsuites.TestDriver{ drivers.InitHostPathCSIDriver, drivers.InitGcePDCSIDriver, drivers.InitGcePDExternalCSIDriver, @@ -81,7 +81,11 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { cancel context.CancelFunc cs clientset.Interface ns *v1.Namespace - config framework.VolumeTestConfig + // Common configuration options for each driver. + config = testsuites.TestConfig{ + Framework: f, + Prefix: "csi", + } ) BeforeEach(func() { @@ -89,10 +93,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { cancel = c cs = f.ClientSet ns = f.Namespace - config = framework.VolumeTestConfig{ - Namespace: ns.Name, - Prefix: "csi", - } + // Debugging of the following tests heavily depends on the log output // of the different containers. Therefore include all of that in log // files (when using --report-dir, as in the CI) or the output stream @@ -125,13 +126,12 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { }) for _, initDriver := range csiTestDrivers { - curDriver := initDriver() + curDriver := initDriver(config) Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() { driver := curDriver BeforeEach(func() { // setupDriver - testsuites.SetCommonDriverParameters(driver, f, config) driver.CreateDriver() }) @@ -140,7 +140,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { driver.CleanupDriver() }) - testsuites.RunTestSuite(f, config, driver, csiTestSuites, csiTunePattern) + testsuites.RunTestSuite(f, driver, csiTestSuites, csiTunePattern) }) } @@ -155,8 +155,11 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { BeforeEach(func() { cs = f.ClientSet csics = f.CSIClientSet - driver = drivers.InitHostPathCSIDriver() - testsuites.SetCommonDriverParameters(driver, f, config) + config := testsuites.TestConfig{ + Framework: f, + Prefix: "csi-attach", + } + driver = drivers.InitHostPathCSIDriver(config) driver.CreateDriver() }) diff --git a/test/e2e/storage/drivers/csi.go b/test/e2e/storage/drivers/csi.go index 62187a0f6c8..357ef2318ce 100644 --- a/test/e2e/storage/drivers/csi.go +++ b/test/e2e/storage/drivers/csi.go @@ -55,7 +55,7 @@ type hostpathCSIDriver struct { manifests []string } -func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriver { +func initHostPathCSIDriver(name string, config testsuites.TestConfig, manifests ...string) testsuites.TestDriver { return &hostpathCSIDriver{ driverInfo: testsuites.DriverInfo{ Name: name, @@ -67,6 +67,8 @@ func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriv Capabilities: map[testsuites.Capability]bool{ testsuites.CapPersistence: true, }, + + Config: config, }, manifests: manifests, } @@ -76,8 +78,8 @@ var _ testsuites.TestDriver = &hostpathCSIDriver{} var _ testsuites.DynamicPVTestDriver = &hostpathCSIDriver{} // InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface -func InitHostPathCSIDriver() testsuites.TestDriver { - return initHostPathCSIDriver("csi-hostpath", +func InitHostPathCSIDriver(config testsuites.TestConfig) testsuites.TestDriver { + return initHostPathCSIDriver("csi-hostpath", config, "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", @@ -98,7 +100,7 @@ func (h *hostpathCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern func (h *hostpathCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass { provisioner := testsuites.GetUniqueDriverName(h) parameters := map[string]string{} - ns := h.driverInfo.Framework.Namespace.Name + ns := h.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", provisioner) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -110,14 +112,13 @@ func (h *hostpathCSIDriver) GetClaimSize() string { func (h *hostpathCSIDriver) CreateDriver() { By(fmt.Sprintf("deploying %s driver", h.driverInfo.Name)) - f := h.driverInfo.Framework + f := h.driverInfo.Config.Framework cs := f.ClientSet - // pods should be scheduled on the node + // The hostpath CSI driver only works when everything runs on the same node. nodes := framework.GetReadySchedulableNodesOrDie(cs) - node := nodes.Items[rand.Intn(len(nodes.Items))] - h.driverInfo.Config.ClientNodeName = node.Name - h.driverInfo.Config.ServerNodeName = node.Name + nodeName := nodes.Items[rand.Intn(len(nodes.Items))].Name + h.driverInfo.Config.ClientNodeName = nodeName // TODO (?): the storage.csi.image.version and storage.csi.image.registry // settings are ignored for this test. We could patch the image definitions. @@ -126,10 +127,10 @@ func (h *hostpathCSIDriver) CreateDriver() { NewDriverName: testsuites.GetUniqueDriverName(h), DriverContainerName: "hostpath", ProvisionerContainerName: "csi-provisioner", - NodeName: h.driverInfo.Config.ServerNodeName, + NodeName: nodeName, } - cleanup, err := h.driverInfo.Framework.CreateFromManifests(func(item interface{}) error { - return utils.PatchCSIDeployment(h.driverInfo.Framework, o, item) + cleanup, err := h.driverInfo.Config.Framework.CreateFromManifests(func(item interface{}) error { + return utils.PatchCSIDeployment(h.driverInfo.Config.Framework, o, item) }, h.manifests...) h.cleanup = cleanup @@ -146,8 +147,8 @@ func (h *hostpathCSIDriver) CleanupDriver() { } // InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests. -func InitHostPathV0CSIDriver() testsuites.TestDriver { - return initHostPathCSIDriver("csi-hostpath-v0", +func InitHostPathV0CSIDriver(config testsuites.TestConfig) testsuites.TestDriver { + return initHostPathCSIDriver("csi-hostpath-v0", config, "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", @@ -168,7 +169,7 @@ var _ testsuites.TestDriver = &gcePDCSIDriver{} var _ testsuites.DynamicPVTestDriver = &gcePDCSIDriver{} // InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface -func InitGcePDCSIDriver() testsuites.TestDriver { +func InitGcePDCSIDriver(config testsuites.TestConfig) testsuites.TestDriver { return &gcePDCSIDriver{ driverInfo: testsuites.DriverInfo{ Name: "pd.csi.storage.gke.io", @@ -186,6 +187,8 @@ func InitGcePDCSIDriver() testsuites.TestDriver { testsuites.CapFsGroup: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -195,13 +198,13 @@ func (g *gcePDCSIDriver) GetDriverInfo() *testsuites.DriverInfo { } func (g *gcePDCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) { - f := g.driverInfo.Framework + f := g.driverInfo.Config.Framework framework.SkipUnlessProviderIs("gce", "gke") framework.SkipIfMultizone(f.ClientSet) } func (g *gcePDCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass { - ns := g.driverInfo.Framework.Namespace.Name + ns := g.driverInfo.Config.Framework.Namespace.Name provisioner := g.driverInfo.Name suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name) @@ -228,9 +231,9 @@ func (g *gcePDCSIDriver) CreateDriver() { // DriverContainerName: "gce-driver", // ProvisionerContainerName: "csi-external-provisioner", // } - createGCESecrets(g.driverInfo.Framework.ClientSet, g.driverInfo.Config) + createGCESecrets(g.driverInfo.Config.Framework.ClientSet, g.driverInfo.Config.Framework.Namespace.Name) - cleanup, err := g.driverInfo.Framework.CreateFromManifests(nil, + cleanup, err := g.driverInfo.Config.Framework.CreateFromManifests(nil, "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", @@ -260,7 +263,7 @@ var _ testsuites.TestDriver = &gcePDExternalCSIDriver{} var _ testsuites.DynamicPVTestDriver = &gcePDExternalCSIDriver{} // InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface -func InitGcePDExternalCSIDriver() testsuites.TestDriver { +func InitGcePDExternalCSIDriver(config testsuites.TestConfig) testsuites.TestDriver { return &gcePDExternalCSIDriver{ driverInfo: testsuites.DriverInfo{ Name: "pd.csi.storage.gke.io", @@ -280,6 +283,8 @@ func InitGcePDExternalCSIDriver() testsuites.TestDriver { testsuites.CapFsGroup: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -290,11 +295,11 @@ func (g *gcePDExternalCSIDriver) GetDriverInfo() *testsuites.DriverInfo { func (g *gcePDExternalCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) { framework.SkipUnlessProviderIs("gce", "gke") - framework.SkipIfMultizone(g.driverInfo.Framework.ClientSet) + framework.SkipIfMultizone(g.driverInfo.Config.Framework.ClientSet) } func (g *gcePDExternalCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass { - ns := g.driverInfo.Framework.Namespace.Name + ns := g.driverInfo.Config.Framework.Namespace.Name provisioner := g.driverInfo.Name suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name) diff --git a/test/e2e/storage/drivers/csi_objects.go b/test/e2e/storage/drivers/csi_objects.go index 1a4c2af592f..9960da8add4 100644 --- a/test/e2e/storage/drivers/csi_objects.go +++ b/test/e2e/storage/drivers/csi_objects.go @@ -80,7 +80,7 @@ func shredFile(filePath string) { // createGCESecrets downloads the GCP IAM Key for the default compute service account // and puts it in a secret for the GCE PD CSI Driver to consume -func createGCESecrets(client clientset.Interface, config framework.VolumeTestConfig) { +func createGCESecrets(client clientset.Interface, ns string) { saEnv := "E2E_GOOGLE_APPLICATION_CREDENTIALS" saFile := fmt.Sprintf("/tmp/%s/cloud-sa.json", string(uuid.NewUUID())) @@ -107,7 +107,7 @@ func createGCESecrets(client clientset.Interface, config framework.VolumeTestCon s := &v1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: "cloud-sa", - Namespace: config.Namespace, + Namespace: ns, }, Type: v1.SecretTypeOpaque, Data: map[string][]byte{ @@ -115,7 +115,7 @@ func createGCESecrets(client clientset.Interface, config framework.VolumeTestCon }, } - _, err = client.CoreV1().Secrets(config.Namespace).Create(s) + _, err = client.CoreV1().Secrets(ns).Create(s) if !apierrors.IsAlreadyExists(err) { framework.ExpectNoError(err, "Failed to create Secret %v", s.GetName()) } diff --git a/test/e2e/storage/drivers/in_tree.go b/test/e2e/storage/drivers/in_tree.go index d121f3e4fa9..20d192502e2 100644 --- a/test/e2e/storage/drivers/in_tree.go +++ b/test/e2e/storage/drivers/in_tree.go @@ -81,7 +81,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &nfsDriver{} var _ testsuites.DynamicPVTestDriver = &nfsDriver{} // InitNFSDriver returns nfsDriver that implements TestDriver interface -func InitNFSDriver() testsuites.TestDriver { +func InitNFSDriver(config testsuites.TestConfig) testsuites.TestDriver { return &nfsDriver{ driverInfo: testsuites.DriverInfo{ Name: "nfs", @@ -95,6 +95,8 @@ func InitNFSDriver() testsuites.TestDriver { testsuites.CapPersistence: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -133,7 +135,7 @@ func (n *nfsDriver) GetPersistentVolumeSource(readOnly bool, fsType string, test func (n *nfsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass { provisioner := n.externalPluginName parameters := map[string]string{"mountOptions": "vers=4.1"} - ns := n.driverInfo.Framework.Namespace.Name + ns := n.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", n.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -144,11 +146,14 @@ func (n *nfsDriver) GetClaimSize() string { } func (n *nfsDriver) CreateDriver() { - f := n.driverInfo.Framework + f := n.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace n.externalPluginName = fmt.Sprintf("example.com/nfs-%s", ns.Name) + // Reset config. It might have been modified by a previous CreateVolume call. + n.driverInfo.Config.ServerConfig = nil + // TODO(mkimuram): cluster-admin gives too much right but system:persistent-volume-provisioner // is not enough. We should create new clusterrole for testing. framework.BindClusterRole(cs.RbacV1beta1(), "cluster-admin", ns.Name, @@ -164,7 +169,7 @@ func (n *nfsDriver) CreateDriver() { } func (n *nfsDriver) CleanupDriver() { - f := n.driverInfo.Framework + f := n.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace @@ -174,7 +179,7 @@ func (n *nfsDriver) CleanupDriver() { } func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := n.driverInfo.Framework + f := n.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace @@ -186,7 +191,7 @@ func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { fallthrough case testpatterns.PreprovisionedPV: config, serverPod, serverIP := framework.NewNFSServer(cs, ns.Name, []string{}) - n.driverInfo.Config = config + n.driverInfo.Config.ServerConfig = &config return &nfsTestResource{ serverIP: serverIP, serverPod: serverPod, @@ -200,7 +205,7 @@ func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { } func (n *nfsDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := n.driverInfo.Framework + f := n.driverInfo.Config.Framework ntr, ok := testResource.(*nfsTestResource) Expect(ok).To(BeTrue(), "Failed to cast test resource to NFS Test Resource") @@ -233,7 +238,7 @@ var _ testsuites.InlineVolumeTestDriver = &glusterFSDriver{} var _ testsuites.PreprovisionedPVTestDriver = &glusterFSDriver{} // InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface -func InitGlusterFSDriver() testsuites.TestDriver { +func InitGlusterFSDriver(config testsuites.TestConfig) testsuites.TestDriver { return &glusterFSDriver{ driverInfo: testsuites.DriverInfo{ Name: "gluster", @@ -245,6 +250,8 @@ func InitGlusterFSDriver() testsuites.TestDriver { testsuites.CapPersistence: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -291,18 +298,20 @@ func (g *glusterFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string } func (g *glusterFSDriver) CreateDriver() { + // Reset config. It might have been modified by a previous CreateVolume call. + g.driverInfo.Config.ServerConfig = nil } func (g *glusterFSDriver) CleanupDriver() { } func (g *glusterFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := g.driverInfo.Framework + f := g.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace config, serverPod, _ := framework.NewGlusterfsServer(cs, ns.Name) - g.driverInfo.Config = config + g.driverInfo.Config.ServerConfig = &config return &glusterTestResource{ prefix: config.Prefix, serverPod: serverPod, @@ -310,7 +319,7 @@ func (g *glusterFSDriver) CreateVolume(volType testpatterns.TestVolType) interfa } func (g *glusterFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := g.driverInfo.Framework + f := g.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace @@ -350,7 +359,7 @@ var _ testsuites.InlineVolumeTestDriver = &iSCSIDriver{} var _ testsuites.PreprovisionedPVTestDriver = &iSCSIDriver{} // InitISCSIDriver returns iSCSIDriver that implements TestDriver interface -func InitISCSIDriver() testsuites.TestDriver { +func InitISCSIDriver(config testsuites.TestConfig) testsuites.TestDriver { return &iSCSIDriver{ driverInfo: testsuites.DriverInfo{ Name: "iscsi", @@ -369,6 +378,8 @@ func InitISCSIDriver() testsuites.TestDriver { testsuites.CapBlock: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -418,18 +429,20 @@ func (i *iSCSIDriver) GetPersistentVolumeSource(readOnly bool, fsType string, te } func (i *iSCSIDriver) CreateDriver() { + // Reset config. It might have been modified by a previous CreateVolume call. + i.driverInfo.Config.ServerConfig = nil } func (i *iSCSIDriver) CleanupDriver() { } func (i *iSCSIDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := i.driverInfo.Framework + f := i.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace config, serverPod, serverIP := framework.NewISCSIServer(cs, ns.Name) - i.driverInfo.Config = config + i.driverInfo.Config.ServerConfig = &config return &iSCSITestResource{ serverPod: serverPod, serverIP: serverIP, @@ -437,7 +450,7 @@ func (i *iSCSIDriver) CreateVolume(volType testpatterns.TestVolType) interface{} } func (i *iSCSIDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := i.driverInfo.Framework + f := i.driverInfo.Config.Framework itr, ok := testResource.(*iSCSITestResource) Expect(ok).To(BeTrue(), "Failed to cast test resource to iSCSI Test Resource") @@ -462,7 +475,7 @@ var _ testsuites.InlineVolumeTestDriver = &rbdDriver{} var _ testsuites.PreprovisionedPVTestDriver = &rbdDriver{} // InitRbdDriver returns rbdDriver that implements TestDriver interface -func InitRbdDriver() testsuites.TestDriver { +func InitRbdDriver(config testsuites.TestConfig) testsuites.TestDriver { return &rbdDriver{ driverInfo: testsuites.DriverInfo{ Name: "rbd", @@ -481,6 +494,8 @@ func InitRbdDriver() testsuites.TestDriver { testsuites.CapBlock: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -515,7 +530,7 @@ func (r *rbdDriver) GetVolumeSource(readOnly bool, fsType string, testResource i } func (r *rbdDriver) GetPersistentVolumeSource(readOnly bool, fsType string, testResource interface{}) *v1.PersistentVolumeSource { - f := r.driverInfo.Framework + f := r.driverInfo.Config.Framework ns := f.Namespace rtr, ok := testResource.(*rbdTestResource) @@ -541,18 +556,20 @@ func (r *rbdDriver) GetPersistentVolumeSource(readOnly bool, fsType string, test } func (r *rbdDriver) CreateDriver() { + // Reset config. It might have been modified by a previous CreateVolume call. + r.driverInfo.Config.ServerConfig = nil } func (r *rbdDriver) CleanupDriver() { } func (r *rbdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := r.driverInfo.Framework + f := r.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name) - r.driverInfo.Config = config + r.driverInfo.Config.ServerConfig = &config return &rbdTestResource{ serverPod: serverPod, serverIP: serverIP, @@ -561,7 +578,7 @@ func (r *rbdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { } func (r *rbdDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := r.driverInfo.Framework + f := r.driverInfo.Config.Framework rtr, ok := testResource.(*rbdTestResource) Expect(ok).To(BeTrue(), "Failed to cast test resource to RBD Test Resource") @@ -590,7 +607,7 @@ var _ testsuites.InlineVolumeTestDriver = &cephFSDriver{} var _ testsuites.PreprovisionedPVTestDriver = &cephFSDriver{} // InitCephFSDriver returns cephFSDriver that implements TestDriver interface -func InitCephFSDriver() testsuites.TestDriver { +func InitCephFSDriver(config testsuites.TestConfig) testsuites.TestDriver { return &cephFSDriver{ driverInfo: testsuites.DriverInfo{ Name: "ceph", @@ -603,6 +620,8 @@ func InitCephFSDriver() testsuites.TestDriver { testsuites.CapPersistence: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -631,7 +650,7 @@ func (c *cephFSDriver) GetVolumeSource(readOnly bool, fsType string, testResourc } func (c *cephFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string, testResource interface{}) *v1.PersistentVolumeSource { - f := c.driverInfo.Framework + f := c.driverInfo.Config.Framework ns := f.Namespace ctr, ok := testResource.(*cephTestResource) @@ -651,18 +670,20 @@ func (c *cephFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string, t } func (c *cephFSDriver) CreateDriver() { + // Reset config. It might have been modified by a previous CreateVolume call. + c.driverInfo.Config.ServerConfig = nil } func (c *cephFSDriver) CleanupDriver() { } func (c *cephFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := c.driverInfo.Framework + f := c.driverInfo.Config.Framework cs := f.ClientSet ns := f.Namespace config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name) - c.driverInfo.Config = config + c.driverInfo.Config.ServerConfig = &config return &cephTestResource{ serverPod: serverPod, serverIP: serverIP, @@ -671,7 +692,7 @@ func (c *cephFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{ } func (c *cephFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := c.driverInfo.Framework + f := c.driverInfo.Config.Framework ctr, ok := testResource.(*cephTestResource) Expect(ok).To(BeTrue(), "Failed to cast test resource to Ceph Test Resource") @@ -691,7 +712,7 @@ var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathDriver{} var _ testsuites.InlineVolumeTestDriver = &hostPathDriver{} // InitHostPathDriver returns hostPathDriver that implements TestDriver interface -func InitHostPathDriver() testsuites.TestDriver { +func InitHostPathDriver(config testsuites.TestConfig) testsuites.TestDriver { return &hostPathDriver{ driverInfo: testsuites.DriverInfo{ Name: "hostPath", @@ -702,6 +723,8 @@ func InitHostPathDriver() testsuites.TestDriver { Capabilities: map[testsuites.Capability]bool{ testsuites.CapPersistence: true, }, + + Config: config, }, } } @@ -732,7 +755,7 @@ func (h *hostPathDriver) CleanupDriver() { } func (h *hostPathDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := h.driverInfo.Framework + f := h.driverInfo.Config.Framework cs := f.ClientSet // pods should be scheduled on the node @@ -763,7 +786,7 @@ var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{} var _ testsuites.InlineVolumeTestDriver = &hostPathSymlinkDriver{} // InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface -func InitHostPathSymlinkDriver() testsuites.TestDriver { +func InitHostPathSymlinkDriver(config testsuites.TestConfig) testsuites.TestDriver { return &hostPathSymlinkDriver{ driverInfo: testsuites.DriverInfo{ Name: "hostPathSymlink", @@ -774,6 +797,8 @@ func InitHostPathSymlinkDriver() testsuites.TestDriver { Capabilities: map[testsuites.Capability]bool{ testsuites.CapPersistence: true, }, + + Config: config, }, } } @@ -807,7 +832,7 @@ func (h *hostPathSymlinkDriver) CleanupDriver() { } func (h *hostPathSymlinkDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := h.driverInfo.Framework + f := h.driverInfo.Config.Framework cs := f.ClientSet sourcePath := fmt.Sprintf("/tmp/%v", f.Namespace.Name) @@ -875,7 +900,7 @@ func (h *hostPathSymlinkDriver) CreateVolume(volType testpatterns.TestVolType) i } func (h *hostPathSymlinkDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) { - f := h.driverInfo.Framework + f := h.driverInfo.Config.Framework htr, ok := testResource.(*hostPathSymlinkTestResource) Expect(ok).To(BeTrue(), "Failed to cast test resource to Hostpath Symlink Test Resource") @@ -903,7 +928,7 @@ var _ testsuites.PreprovisionedVolumeTestDriver = &emptydirDriver{} var _ testsuites.InlineVolumeTestDriver = &emptydirDriver{} // InitEmptydirDriver returns emptydirDriver that implements TestDriver interface -func InitEmptydirDriver() testsuites.TestDriver { +func InitEmptydirDriver(config testsuites.TestConfig) testsuites.TestDriver { return &emptydirDriver{ driverInfo: testsuites.DriverInfo{ Name: "emptydir", @@ -914,6 +939,8 @@ func InitEmptydirDriver() testsuites.TestDriver { Capabilities: map[testsuites.Capability]bool{ testsuites.CapExec: true, }, + + Config: config, }, } } @@ -969,7 +996,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &cinderDriver{} var _ testsuites.DynamicPVTestDriver = &cinderDriver{} // InitCinderDriver returns cinderDriver that implements TestDriver interface -func InitCinderDriver() testsuites.TestDriver { +func InitCinderDriver(config testsuites.TestConfig) testsuites.TestDriver { return &cinderDriver{ driverInfo: testsuites.DriverInfo{ Name: "cinder", @@ -983,6 +1010,8 @@ func InitCinderDriver() testsuites.TestDriver { testsuites.CapFsGroup: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -1033,7 +1062,7 @@ func (c *cinderDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1 if fsType != "" { parameters["fsType"] = fsType } - ns := c.driverInfo.Framework.Namespace.Name + ns := c.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", c.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -1050,7 +1079,7 @@ func (c *cinderDriver) CleanupDriver() { } func (c *cinderDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := c.driverInfo.Framework + f := c.driverInfo.Config.Framework ns := f.Namespace // We assume that namespace.Name is a random string @@ -1129,7 +1158,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &gcePdDriver{} var _ testsuites.DynamicPVTestDriver = &gcePdDriver{} // InitGceDriver returns gcePdDriver that implements TestDriver interface -func InitGcePdDriver() testsuites.TestDriver { +func InitGcePdDriver(config testsuites.TestConfig) testsuites.TestDriver { return &gcePdDriver{ driverInfo: testsuites.DriverInfo{ Name: "gcepd", @@ -1148,6 +1177,8 @@ func InitGcePdDriver() testsuites.TestDriver { testsuites.CapBlock: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -1199,7 +1230,7 @@ func (g *gcePdDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1. if fsType != "" { parameters["fsType"] = fsType } - ns := g.driverInfo.Framework.Namespace.Name + ns := g.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -1219,7 +1250,7 @@ func (g *gcePdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} if volType == testpatterns.InlineVolume { // PD will be created in framework.TestContext.CloudConfig.Zone zone, // so pods should be also scheduled there. - g.driverInfo.Config.NodeSelector = map[string]string{ + g.driverInfo.Config.ClientNodeSelector = map[string]string{ kubeletapis.LabelZoneFailureDomain: framework.TestContext.CloudConfig.Zone, } } @@ -1254,7 +1285,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &vSphereDriver{} var _ testsuites.DynamicPVTestDriver = &vSphereDriver{} // InitVSphereDriver returns vSphereDriver that implements TestDriver interface -func InitVSphereDriver() testsuites.TestDriver { +func InitVSphereDriver(config testsuites.TestConfig) testsuites.TestDriver { return &vSphereDriver{ driverInfo: testsuites.DriverInfo{ Name: "vSphere", @@ -1268,6 +1299,8 @@ func InitVSphereDriver() testsuites.TestDriver { testsuites.CapFsGroup: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -1325,7 +1358,7 @@ func (v *vSphereDriver) GetDynamicProvisionStorageClass(fsType string) *storagev if fsType != "" { parameters["fsType"] = fsType } - ns := v.driverInfo.Framework.Namespace.Name + ns := v.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", v.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -1342,7 +1375,7 @@ func (v *vSphereDriver) CleanupDriver() { } func (v *vSphereDriver) CreateVolume(volType testpatterns.TestVolType) interface{} { - f := v.driverInfo.Framework + f := v.driverInfo.Config.Framework vspheretest.Bootstrap(f) nodeInfo := vspheretest.GetReadySchedulableRandomNodeInfo() volumePath, err := nodeInfo.VSphere.CreateVolume(&vspheretest.VolumeOptions{}, nodeInfo.DataCenterRef) @@ -1376,7 +1409,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &azureDriver{} var _ testsuites.DynamicPVTestDriver = &azureDriver{} // InitAzureDriver returns azureDriver that implements TestDriver interface -func InitAzureDriver() testsuites.TestDriver { +func InitAzureDriver(config testsuites.TestConfig) testsuites.TestDriver { return &azureDriver{ driverInfo: testsuites.DriverInfo{ Name: "azure", @@ -1391,6 +1424,8 @@ func InitAzureDriver() testsuites.TestDriver { testsuites.CapBlock: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -1447,7 +1482,7 @@ func (a *azureDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1. if fsType != "" { parameters["fsType"] = fsType } - ns := a.driverInfo.Framework.Namespace.Name + ns := a.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) @@ -1495,7 +1530,7 @@ var _ testsuites.TestDriver = &awsDriver{} var _ testsuites.DynamicPVTestDriver = &awsDriver{} // InitAwsDriver returns awsDriver that implements TestDriver interface -func InitAwsDriver() testsuites.TestDriver { +func InitAwsDriver(config testsuites.TestConfig) testsuites.TestDriver { return &awsDriver{ driverInfo: testsuites.DriverInfo{ Name: "aws", @@ -1511,6 +1546,8 @@ func InitAwsDriver() testsuites.TestDriver { testsuites.CapBlock: true, testsuites.CapExec: true, }, + + Config: config, }, } } @@ -1558,7 +1595,7 @@ func (a *awsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St if fsType != "" { parameters["fsType"] = fsType } - ns := a.driverInfo.Framework.Namespace.Name + ns := a.driverInfo.Config.Framework.Namespace.Name suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name) return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix) diff --git a/test/e2e/storage/in_tree_volumes.go b/test/e2e/storage/in_tree_volumes.go index 11c9e73459d..c9f6401578f 100644 --- a/test/e2e/storage/in_tree_volumes.go +++ b/test/e2e/storage/in_tree_volumes.go @@ -18,7 +18,6 @@ package storage import ( . "github.com/onsi/ginkgo" - "k8s.io/api/core/v1" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/storage/drivers" "k8s.io/kubernetes/test/e2e/storage/testpatterns" @@ -27,7 +26,7 @@ import ( ) // List of testDrivers to be executed in below loop -var testDrivers = []func() testsuites.TestDriver{ +var testDrivers = []func(config testsuites.TestConfig) testsuites.TestDriver{ drivers.InitNFSDriver, drivers.InitGlusterFSDriver, drivers.InitISCSIDriver, @@ -61,26 +60,20 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() { f := framework.NewDefaultFramework("volumes") var ( - ns *v1.Namespace - config framework.VolumeTestConfig + // Common configuration options for all drivers. + config = testsuites.TestConfig{ + Framework: f, + Prefix: "in-tree", + } ) - BeforeEach(func() { - ns = f.Namespace - config = framework.VolumeTestConfig{ - Namespace: ns.Name, - Prefix: "volume", - } - }) - for _, initDriver := range testDrivers { - curDriver := initDriver() + curDriver := initDriver(config) Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() { driver := curDriver BeforeEach(func() { // setupDriver - testsuites.SetCommonDriverParameters(driver, f, config) driver.CreateDriver() }) @@ -89,7 +82,7 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() { driver.CleanupDriver() }) - testsuites.RunTestSuite(f, config, driver, testSuites, intreeTunePattern) + testsuites.RunTestSuite(f, driver, testSuites, intreeTunePattern) }) } }) diff --git a/test/e2e/storage/testsuites/base.go b/test/e2e/storage/testsuites/base.go index c257b849620..8638a90cfe1 100644 --- a/test/e2e/storage/testsuites/base.go +++ b/test/e2e/storage/testsuites/base.go @@ -65,7 +65,7 @@ func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string { } // RunTestSuite runs all testpatterns of all testSuites for a driver -func RunTestSuite(f *framework.Framework, config framework.VolumeTestConfig, driver TestDriver, tsInits []func() TestSuite, tunePatternFunc func([]testpatterns.TestPattern) []testpatterns.TestPattern) { +func RunTestSuite(f *framework.Framework, driver TestDriver, tsInits []func() TestSuite, tunePatternFunc func([]testpatterns.TestPattern) []testpatterns.TestPattern) { for _, testSuiteInit := range tsInits { suite := testSuiteInit() patterns := tunePatternFunc(suite.getTestSuiteInfo().testPatterns) @@ -136,7 +136,7 @@ var _ TestResource = &genericVolumeTestResource{} func (r *genericVolumeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) { r.driver = driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework cs := f.ClientSet fsType := pattern.FsType volType := pattern.VolType @@ -189,7 +189,7 @@ func (r *genericVolumeTestResource) setupResource(driver TestDriver, pattern tes // cleanupResource cleans up genericVolumeTestResource func (r *genericVolumeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) { dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework volType := pattern.VolType if r.pvc != nil || r.pv != nil { @@ -323,3 +323,24 @@ func deleteStorageClass(cs clientset.Interface, className string) { Expect(err).NotTo(HaveOccurred()) } } + +// convertTestConfig returns a framework test config with the +// parameters specified for the testsuite or (if available) the +// dynamically created config for the volume server. +// +// This is done because TestConfig is the public API for +// the testsuites package whereas framework.VolumeTestConfig is merely +// an implementation detail. It contains fields that have no effect, +// which makes it unsuitable for use in the testsuits public API. +func convertTestConfig(in *TestConfig) framework.VolumeTestConfig { + if in.ServerConfig != nil { + return *in.ServerConfig + } + + return framework.VolumeTestConfig{ + Namespace: in.Framework.Namespace.Name, + Prefix: in.Prefix, + ClientNodeName: in.ClientNodeName, + NodeSelector: in.ClientNodeSelector, + } +} diff --git a/test/e2e/storage/testsuites/driveroperations.go b/test/e2e/storage/testsuites/driveroperations.go index 41c2d3eb22f..1e233b48387 100644 --- a/test/e2e/storage/testsuites/driveroperations.go +++ b/test/e2e/storage/testsuites/driveroperations.go @@ -68,19 +68,6 @@ func DeleteVolume(driver TestDriver, volType testpatterns.TestVolType, testResou } } -// SetCommonDriverParameters sets a common driver parameters to TestDriver -// This function is intended to be called in BeforeEach() inside test loop. -func SetCommonDriverParameters( - driver TestDriver, - f *framework.Framework, - config framework.VolumeTestConfig, -) { - dInfo := driver.GetDriverInfo() - - dInfo.Framework = f - dInfo.Config = config -} - // GetStorageClass constructs a new StorageClass instance // with a unique name that is based on namespace + suffix. func GetStorageClass( @@ -110,5 +97,5 @@ func GetStorageClass( // GetUniqueDriverName returns unique driver name that can be used parallelly in tests func GetUniqueDriverName(driver TestDriver) string { - return fmt.Sprintf("%s-%s", driver.GetDriverInfo().Name, driver.GetDriverInfo().Framework.UniqueName) + return fmt.Sprintf("%s-%s", driver.GetDriverInfo().Name, driver.GetDriverInfo().Config.Framework.UniqueName) } diff --git a/test/e2e/storage/testsuites/provisioning.go b/test/e2e/storage/testsuites/provisioning.go index 7524af9fc1c..527218d23ca 100644 --- a/test/e2e/storage/testsuites/provisioning.go +++ b/test/e2e/storage/testsuites/provisioning.go @@ -86,7 +86,7 @@ func createProvisioningTestInput(driver TestDriver, pattern testpatterns.TestPat ClaimSize: resource.claimSize, ExpectedSize: resource.claimSize, }, - cs: driver.GetDriverInfo().Framework.ClientSet, + cs: driver.GetDriverInfo().Config.Framework.ClientSet, pvc: resource.pvc, sc: resource.sc, dInfo: driver.GetDriverInfo(), @@ -151,7 +151,7 @@ func (p *provisioningTestResource) setupResource(driver TestDriver, pattern test } p.driver = driver p.claimSize = dDriver.GetClaimSize() - p.pvc = getClaim(p.claimSize, driver.GetDriverInfo().Framework.Namespace.Name) + p.pvc = getClaim(p.claimSize, driver.GetDriverInfo().Config.Framework.Namespace.Name) p.pvc.Spec.StorageClassName = &p.sc.Name framework.Logf("In creating storage class object and pvc object for driver - sc: %v, pvc: %v", p.sc, p.pvc) } diff --git a/test/e2e/storage/testsuites/subpath.go b/test/e2e/storage/testsuites/subpath.go index 50daffeaeee..b8e957884a1 100644 --- a/test/e2e/storage/testsuites/subpath.go +++ b/test/e2e/storage/testsuites/subpath.go @@ -77,7 +77,7 @@ func (s *subPathTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTestResource) subPathTestInput { driver := resource.driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework subPath := f.Namespace.Name subPathDir := filepath.Join(volumePath, subPath) @@ -139,7 +139,7 @@ var _ TestResource = &subPathTestResource{} func (s *subPathTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) { s.driver = driver dInfo := s.driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework fsType := pattern.FsType volType := pattern.VolType @@ -174,16 +174,16 @@ func (s *subPathTestResource) setupResource(driver TestDriver, pattern testpatte config := dInfo.Config s.pod = SubpathTestPod(f, subPath, s.volType, s.volSource, true) s.pod.Spec.NodeName = config.ClientNodeName - s.pod.Spec.NodeSelector = config.NodeSelector + s.pod.Spec.NodeSelector = config.ClientNodeSelector s.formatPod = volumeFormatPod(f, s.volSource) s.formatPod.Spec.NodeName = config.ClientNodeName - s.formatPod.Spec.NodeSelector = config.NodeSelector + s.formatPod.Spec.NodeSelector = config.ClientNodeSelector } func (s *subPathTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) { dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework // Cleanup subPath test dependent resource By("Deleting pod") diff --git a/test/e2e/storage/testsuites/testdriver.go b/test/e2e/storage/testsuites/testdriver.go index 6af6ba70855..beb8ea1a429 100644 --- a/test/e2e/storage/testsuites/testdriver.go +++ b/test/e2e/storage/testsuites/testdriver.go @@ -99,9 +99,35 @@ type DriverInfo struct { RequiredMountOption sets.String // Map of string for required mount option (Optional) Capabilities map[Capability]bool // Map that represents plugin capabilities - // Parameters below will be set inside test loop by using SetCommonDriverParameters. - // Drivers that implement TestDriver is required to set all the above parameters - // and return DriverInfo on GetDriverInfo() call. - Framework *framework.Framework // Framework for the test - Config framework.VolumeTestConfig // VolumeTestConfig for thet test + Config TestConfig // Test configuration for the current test. +} + +// TestConfig represents parameters that control test execution. +// They can still be modified after defining tests, for example +// in a BeforeEach or when creating the driver. +type TestConfig struct { + // Some short word that gets inserted into dynamically + // generated entities (pods, paths) as first part of the name + // to make debugging easier. Can be the same for different + // tests inside the test suite. + Prefix string + + // The framework instance allocated for the current test. + Framework *framework.Framework + + // If non-empty, then pods using a volume will be scheduled + // onto the node with this name. Otherwise Kubernetes will + // pick a node. + ClientNodeName string + + // Some tests also support scheduling pods onto nodes with + // these label/value pairs. As not all tests use this field, + // a driver that absolutely needs the pods on a specific + // node must use ClientNodeName. + ClientNodeSelector map[string]string + + // Some test drivers initialize a storage server. This is + // the configuration that then has to be used to run tests. + // The values above are ignored for such tests. + ServerConfig *framework.VolumeTestConfig } diff --git a/test/e2e/storage/testsuites/volume_io.go b/test/e2e/storage/testsuites/volume_io.go index eed39c78c97..ad32f84fa5f 100644 --- a/test/e2e/storage/testsuites/volume_io.go +++ b/test/e2e/storage/testsuites/volume_io.go @@ -81,7 +81,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV var fsGroup *int64 driver := resource.driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework fileSizes := createFileSizes(dInfo.MaxFileSize) volSource := resource.volSource @@ -97,7 +97,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV return volumeIOTestInput{ f: f, name: dInfo.Name, - config: dInfo.Config, + config: &dInfo.Config, volSource: *volSource, testFile: fmt.Sprintf("%s_io_test_%s", dInfo.Name, f.Namespace.Name), podSec: v1.PodSecurityContext{ @@ -142,7 +142,7 @@ func (t *volumeIOTestSuite) execTest(driver TestDriver, pattern testpatterns.Tes type volumeIOTestInput struct { f *framework.Framework name string - config framework.VolumeTestConfig + config *TestConfig volSource v1.VolumeSource testFile string podSec v1.PodSecurityContext @@ -154,7 +154,7 @@ func execTestVolumeIO(input *volumeIOTestInput) { f := input.f cs := f.ClientSet - err := testVolumeIO(f, cs, input.config, input.volSource, &input.podSec, input.testFile, input.fileSizes) + err := testVolumeIO(f, cs, convertTestConfig(input.config), input.volSource, &input.podSec, input.testFile, input.fileSizes) Expect(err).NotTo(HaveOccurred()) }) } diff --git a/test/e2e/storage/testsuites/volumemode.go b/test/e2e/storage/testsuites/volumemode.go index 86888bd0339..03eb2a43b09 100644 --- a/test/e2e/storage/testsuites/volumemode.go +++ b/test/e2e/storage/testsuites/volumemode.go @@ -67,7 +67,7 @@ func (t *volumeModeTestSuite) skipUnsupportedTest(pattern testpatterns.TestPatte func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volumeModeTestResource) volumeModeTestInput { driver := resource.driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework return volumeModeTestInput{ f: f, @@ -154,7 +154,7 @@ var _ TestResource = &volumeModeTestResource{} func (s *volumeModeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) { s.driver = driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework ns := f.Namespace fsType := pattern.FsType volBindMode := storagev1.VolumeBindingImmediate @@ -207,7 +207,7 @@ func (s *volumeModeTestResource) setupResource(driver TestDriver, pattern testpa func (s *volumeModeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) { dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework cs := f.ClientSet ns := f.Namespace volType := pattern.VolType diff --git a/test/e2e/storage/testsuites/volumes.go b/test/e2e/storage/testsuites/volumes.go index 8c6ef94a546..1d890e085a9 100644 --- a/test/e2e/storage/testsuites/volumes.go +++ b/test/e2e/storage/testsuites/volumes.go @@ -93,7 +93,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo var fsGroup *int64 driver := resource.driver dInfo := driver.GetDriverInfo() - f := dInfo.Framework + f := dInfo.Config.Framework volSource := resource.volSource if volSource == nil { @@ -108,7 +108,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo return volumesTestInput{ f: f, name: dInfo.Name, - config: dInfo.Config, + config: &dInfo.Config, fsGroup: fsGroup, resource: resource, tests: []framework.VolumeTest{ @@ -158,7 +158,7 @@ func (t *volumesTestSuite) execTest(driver TestDriver, pattern testpatterns.Test type volumesTestInput struct { f *framework.Framework name string - config framework.VolumeTestConfig + config *TestConfig fsGroup *int64 tests []framework.VolumeTest resource genericVolumeTestResource @@ -168,19 +168,20 @@ func testVolumes(input *volumesTestInput) { It("should be mountable", func() { f := input.f cs := f.ClientSet - defer framework.VolumeTestCleanup(f, input.config) + defer framework.VolumeTestCleanup(f, convertTestConfig(input.config)) skipPersistenceTest(input.resource.driver) volumeTest := input.tests - framework.InjectHtml(cs, input.config, volumeTest[0].Volume, volumeTest[0].ExpectedContent) - framework.TestVolumeClient(cs, input.config, input.fsGroup, input.tests) + config := convertTestConfig(input.config) + framework.InjectHtml(cs, config, volumeTest[0].Volume, volumeTest[0].ExpectedContent) + framework.TestVolumeClient(cs, config, input.fsGroup, input.tests) }) It("should allow exec of files on the volume", func() { f := input.f skipExecTest(input.resource.driver) - testScriptInPod(f, input.resource.volType, input.resource.volSource, input.config.NodeSelector) + testScriptInPod(f, input.resource.volType, input.resource.volSource, input.resource.driver.GetDriverInfo().Config.ClientNodeSelector) }) }