mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
e2e/storage: refactor test config
Exposing framework.VolumeTestConfig as part of the testsuite package API was confusing because it was unclear which of the values in it really have an effect. How it was set also was a bit awkward: a test driver had a copy that had to be overwritten at test runtime and then might have been updated and/or overwritten again by the driver. Now testsuites has its own test config structure. It contains the values that might have to be set dynamically at runtime. Instead of overwriting a copy of that struct inside the test driver, the test driver takes some common defaults (specifically, the framework pointer and the prefix) when it gets initialized and then manages its own copy. For example, the hostpath driver has to lock the pods to a single node. framework.VolumeTestConfig is still used internally and test drivers can decide to run tests with a fully populated instance if needed (for example, after setting up an NFS server).
This commit is contained in:
parent
dfcf2ca345
commit
3253e9ab6b
@ -43,7 +43,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// List of testDrivers to be executed in below loop
|
// 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.InitHostPathCSIDriver,
|
||||||
drivers.InitGcePDCSIDriver,
|
drivers.InitGcePDCSIDriver,
|
||||||
drivers.InitGcePDExternalCSIDriver,
|
drivers.InitGcePDExternalCSIDriver,
|
||||||
@ -81,7 +81,11 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
cs clientset.Interface
|
cs clientset.Interface
|
||||||
ns *v1.Namespace
|
ns *v1.Namespace
|
||||||
config framework.VolumeTestConfig
|
// Common configuration options for each driver.
|
||||||
|
config = testsuites.TestConfig{
|
||||||
|
Framework: f,
|
||||||
|
Prefix: "csi",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
@ -89,10 +93,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
cancel = c
|
cancel = c
|
||||||
cs = f.ClientSet
|
cs = f.ClientSet
|
||||||
ns = f.Namespace
|
ns = f.Namespace
|
||||||
config = framework.VolumeTestConfig{
|
|
||||||
Namespace: ns.Name,
|
|
||||||
Prefix: "csi",
|
|
||||||
}
|
|
||||||
// Debugging of the following tests heavily depends on the log output
|
// Debugging of the following tests heavily depends on the log output
|
||||||
// of the different containers. Therefore include all of that in log
|
// of the different containers. Therefore include all of that in log
|
||||||
// files (when using --report-dir, as in the CI) or the output stream
|
// 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 {
|
for _, initDriver := range csiTestDrivers {
|
||||||
curDriver := initDriver()
|
curDriver := initDriver(config)
|
||||||
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||||
driver := curDriver
|
driver := curDriver
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
// setupDriver
|
// setupDriver
|
||||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
driver.CleanupDriver()
|
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() {
|
BeforeEach(func() {
|
||||||
cs = f.ClientSet
|
cs = f.ClientSet
|
||||||
csics = f.CSIClientSet
|
csics = f.CSIClientSet
|
||||||
driver = drivers.InitHostPathCSIDriver()
|
config := testsuites.TestConfig{
|
||||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
Framework: f,
|
||||||
|
Prefix: "csi-attach",
|
||||||
|
}
|
||||||
|
driver = drivers.InitHostPathCSIDriver(config)
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ type hostpathCSIDriver struct {
|
|||||||
manifests []string
|
manifests []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriver {
|
func initHostPathCSIDriver(name string, config testsuites.TestConfig, manifests ...string) testsuites.TestDriver {
|
||||||
return &hostpathCSIDriver{
|
return &hostpathCSIDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: name,
|
Name: name,
|
||||||
@ -67,6 +67,8 @@ func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriv
|
|||||||
Capabilities: map[testsuites.Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
manifests: manifests,
|
manifests: manifests,
|
||||||
}
|
}
|
||||||
@ -76,8 +78,8 @@ var _ testsuites.TestDriver = &hostpathCSIDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &hostpathCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &hostpathCSIDriver{}
|
||||||
|
|
||||||
// InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface
|
// InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface
|
||||||
func InitHostPathCSIDriver() testsuites.TestDriver {
|
func InitHostPathCSIDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return initHostPathCSIDriver("csi-hostpath",
|
return initHostPathCSIDriver("csi-hostpath", config,
|
||||||
"test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml",
|
"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-attacher/rbac.yaml",
|
||||||
"test/e2e/testing-manifests/storage-csi/external-provisioner/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 {
|
func (h *hostpathCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
||||||
provisioner := testsuites.GetUniqueDriverName(h)
|
provisioner := testsuites.GetUniqueDriverName(h)
|
||||||
parameters := map[string]string{}
|
parameters := map[string]string{}
|
||||||
ns := h.driverInfo.Framework.Namespace.Name
|
ns := h.driverInfo.Config.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", provisioner)
|
suffix := fmt.Sprintf("%s-sc", provisioner)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -110,14 +112,13 @@ func (h *hostpathCSIDriver) GetClaimSize() string {
|
|||||||
|
|
||||||
func (h *hostpathCSIDriver) CreateDriver() {
|
func (h *hostpathCSIDriver) CreateDriver() {
|
||||||
By(fmt.Sprintf("deploying %s driver", h.driverInfo.Name))
|
By(fmt.Sprintf("deploying %s driver", h.driverInfo.Name))
|
||||||
f := h.driverInfo.Framework
|
f := h.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
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)
|
nodes := framework.GetReadySchedulableNodesOrDie(cs)
|
||||||
node := nodes.Items[rand.Intn(len(nodes.Items))]
|
nodeName := nodes.Items[rand.Intn(len(nodes.Items))].Name
|
||||||
h.driverInfo.Config.ClientNodeName = node.Name
|
h.driverInfo.Config.ClientNodeName = nodeName
|
||||||
h.driverInfo.Config.ServerNodeName = node.Name
|
|
||||||
|
|
||||||
// TODO (?): the storage.csi.image.version and storage.csi.image.registry
|
// TODO (?): the storage.csi.image.version and storage.csi.image.registry
|
||||||
// settings are ignored for this test. We could patch the image definitions.
|
// settings are ignored for this test. We could patch the image definitions.
|
||||||
@ -126,10 +127,10 @@ func (h *hostpathCSIDriver) CreateDriver() {
|
|||||||
NewDriverName: testsuites.GetUniqueDriverName(h),
|
NewDriverName: testsuites.GetUniqueDriverName(h),
|
||||||
DriverContainerName: "hostpath",
|
DriverContainerName: "hostpath",
|
||||||
ProvisionerContainerName: "csi-provisioner",
|
ProvisionerContainerName: "csi-provisioner",
|
||||||
NodeName: h.driverInfo.Config.ServerNodeName,
|
NodeName: nodeName,
|
||||||
}
|
}
|
||||||
cleanup, err := h.driverInfo.Framework.CreateFromManifests(func(item interface{}) error {
|
cleanup, err := h.driverInfo.Config.Framework.CreateFromManifests(func(item interface{}) error {
|
||||||
return utils.PatchCSIDeployment(h.driverInfo.Framework, o, item)
|
return utils.PatchCSIDeployment(h.driverInfo.Config.Framework, o, item)
|
||||||
},
|
},
|
||||||
h.manifests...)
|
h.manifests...)
|
||||||
h.cleanup = cleanup
|
h.cleanup = cleanup
|
||||||
@ -146,8 +147,8 @@ func (h *hostpathCSIDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests.
|
// InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests.
|
||||||
func InitHostPathV0CSIDriver() testsuites.TestDriver {
|
func InitHostPathV0CSIDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return initHostPathCSIDriver("csi-hostpath-v0",
|
return initHostPathCSIDriver("csi-hostpath-v0", config,
|
||||||
"test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml",
|
"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-attacher/rbac.yaml",
|
||||||
"test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml",
|
"test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml",
|
||||||
@ -168,7 +169,7 @@ var _ testsuites.TestDriver = &gcePDCSIDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &gcePDCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePDCSIDriver{}
|
||||||
|
|
||||||
// InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface
|
// InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface
|
||||||
func InitGcePDCSIDriver() testsuites.TestDriver {
|
func InitGcePDCSIDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &gcePDCSIDriver{
|
return &gcePDCSIDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "pd.csi.storage.gke.io",
|
Name: "pd.csi.storage.gke.io",
|
||||||
@ -186,6 +187,8 @@ func InitGcePDCSIDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -195,13 +198,13 @@ func (g *gcePDCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) {
|
func (g *gcePDCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) {
|
||||||
f := g.driverInfo.Framework
|
f := g.driverInfo.Config.Framework
|
||||||
framework.SkipUnlessProviderIs("gce", "gke")
|
framework.SkipUnlessProviderIs("gce", "gke")
|
||||||
framework.SkipIfMultizone(f.ClientSet)
|
framework.SkipIfMultizone(f.ClientSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
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
|
provisioner := g.driverInfo.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
||||||
|
|
||||||
@ -228,9 +231,9 @@ func (g *gcePDCSIDriver) CreateDriver() {
|
|||||||
// DriverContainerName: "gce-driver",
|
// DriverContainerName: "gce-driver",
|
||||||
// ProvisionerContainerName: "csi-external-provisioner",
|
// 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/driver-registrar/rbac.yaml",
|
||||||
"test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml",
|
"test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml",
|
||||||
"test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml",
|
"test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml",
|
||||||
@ -260,7 +263,7 @@ var _ testsuites.TestDriver = &gcePDExternalCSIDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
||||||
|
|
||||||
// InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface
|
// InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface
|
||||||
func InitGcePDExternalCSIDriver() testsuites.TestDriver {
|
func InitGcePDExternalCSIDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &gcePDExternalCSIDriver{
|
return &gcePDExternalCSIDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "pd.csi.storage.gke.io",
|
Name: "pd.csi.storage.gke.io",
|
||||||
@ -280,6 +283,8 @@ func InitGcePDExternalCSIDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -290,11 +295,11 @@ func (g *gcePDExternalCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
|||||||
|
|
||||||
func (g *gcePDExternalCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) {
|
func (g *gcePDExternalCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern) {
|
||||||
framework.SkipUnlessProviderIs("gce", "gke")
|
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 {
|
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
|
provisioner := g.driverInfo.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ func shredFile(filePath string) {
|
|||||||
|
|
||||||
// createGCESecrets downloads the GCP IAM Key for the default compute service account
|
// 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
|
// 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"
|
saEnv := "E2E_GOOGLE_APPLICATION_CREDENTIALS"
|
||||||
saFile := fmt.Sprintf("/tmp/%s/cloud-sa.json", string(uuid.NewUUID()))
|
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{
|
s := &v1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "cloud-sa",
|
Name: "cloud-sa",
|
||||||
Namespace: config.Namespace,
|
Namespace: ns,
|
||||||
},
|
},
|
||||||
Type: v1.SecretTypeOpaque,
|
Type: v1.SecretTypeOpaque,
|
||||||
Data: map[string][]byte{
|
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) {
|
if !apierrors.IsAlreadyExists(err) {
|
||||||
framework.ExpectNoError(err, "Failed to create Secret %v", s.GetName())
|
framework.ExpectNoError(err, "Failed to create Secret %v", s.GetName())
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &nfsDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &nfsDriver{}
|
var _ testsuites.DynamicPVTestDriver = &nfsDriver{}
|
||||||
|
|
||||||
// InitNFSDriver returns nfsDriver that implements TestDriver interface
|
// InitNFSDriver returns nfsDriver that implements TestDriver interface
|
||||||
func InitNFSDriver() testsuites.TestDriver {
|
func InitNFSDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &nfsDriver{
|
return &nfsDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "nfs",
|
Name: "nfs",
|
||||||
@ -95,6 +95,8 @@ func InitNFSDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
testsuites.CapExec: 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 {
|
func (n *nfsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
||||||
provisioner := n.externalPluginName
|
provisioner := n.externalPluginName
|
||||||
parameters := map[string]string{"mountOptions": "vers=4.1"}
|
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)
|
suffix := fmt.Sprintf("%s-sc", n.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -144,11 +146,14 @@ func (n *nfsDriver) GetClaimSize() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) CreateDriver() {
|
func (n *nfsDriver) CreateDriver() {
|
||||||
f := n.driverInfo.Framework
|
f := n.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
n.externalPluginName = fmt.Sprintf("example.com/nfs-%s", ns.Name)
|
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
|
// TODO(mkimuram): cluster-admin gives too much right but system:persistent-volume-provisioner
|
||||||
// is not enough. We should create new clusterrole for testing.
|
// is not enough. We should create new clusterrole for testing.
|
||||||
framework.BindClusterRole(cs.RbacV1beta1(), "cluster-admin", ns.Name,
|
framework.BindClusterRole(cs.RbacV1beta1(), "cluster-admin", ns.Name,
|
||||||
@ -164,7 +169,7 @@ func (n *nfsDriver) CreateDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) CleanupDriver() {
|
func (n *nfsDriver) CleanupDriver() {
|
||||||
f := n.driverInfo.Framework
|
f := n.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
@ -174,7 +179,7 @@ func (n *nfsDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := n.driverInfo.Framework
|
f := n.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
@ -186,7 +191,7 @@ func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
|||||||
fallthrough
|
fallthrough
|
||||||
case testpatterns.PreprovisionedPV:
|
case testpatterns.PreprovisionedPV:
|
||||||
config, serverPod, serverIP := framework.NewNFSServer(cs, ns.Name, []string{})
|
config, serverPod, serverIP := framework.NewNFSServer(cs, ns.Name, []string{})
|
||||||
n.driverInfo.Config = config
|
n.driverInfo.Config.ServerConfig = &config
|
||||||
return &nfsTestResource{
|
return &nfsTestResource{
|
||||||
serverIP: serverIP,
|
serverIP: serverIP,
|
||||||
serverPod: serverPod,
|
serverPod: serverPod,
|
||||||
@ -200,7 +205,7 @@ func (n *nfsDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
func (n *nfsDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := n.driverInfo.Framework
|
f := n.driverInfo.Config.Framework
|
||||||
|
|
||||||
ntr, ok := testResource.(*nfsTestResource)
|
ntr, ok := testResource.(*nfsTestResource)
|
||||||
Expect(ok).To(BeTrue(), "Failed to cast test resource to NFS Test Resource")
|
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{}
|
var _ testsuites.PreprovisionedPVTestDriver = &glusterFSDriver{}
|
||||||
|
|
||||||
// InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface
|
// InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface
|
||||||
func InitGlusterFSDriver() testsuites.TestDriver {
|
func InitGlusterFSDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &glusterFSDriver{
|
return &glusterFSDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "gluster",
|
Name: "gluster",
|
||||||
@ -245,6 +250,8 @@ func InitGlusterFSDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,18 +298,20 @@ func (g *glusterFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *glusterFSDriver) CreateDriver() {
|
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) CleanupDriver() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *glusterFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (g *glusterFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := g.driverInfo.Framework
|
f := g.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
config, serverPod, _ := framework.NewGlusterfsServer(cs, ns.Name)
|
config, serverPod, _ := framework.NewGlusterfsServer(cs, ns.Name)
|
||||||
g.driverInfo.Config = config
|
g.driverInfo.Config.ServerConfig = &config
|
||||||
return &glusterTestResource{
|
return &glusterTestResource{
|
||||||
prefix: config.Prefix,
|
prefix: config.Prefix,
|
||||||
serverPod: serverPod,
|
serverPod: serverPod,
|
||||||
@ -310,7 +319,7 @@ func (g *glusterFSDriver) CreateVolume(volType testpatterns.TestVolType) interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *glusterFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
func (g *glusterFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := g.driverInfo.Framework
|
f := g.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
@ -350,7 +359,7 @@ var _ testsuites.InlineVolumeTestDriver = &iSCSIDriver{}
|
|||||||
var _ testsuites.PreprovisionedPVTestDriver = &iSCSIDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &iSCSIDriver{}
|
||||||
|
|
||||||
// InitISCSIDriver returns iSCSIDriver that implements TestDriver interface
|
// InitISCSIDriver returns iSCSIDriver that implements TestDriver interface
|
||||||
func InitISCSIDriver() testsuites.TestDriver {
|
func InitISCSIDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &iSCSIDriver{
|
return &iSCSIDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "iscsi",
|
Name: "iscsi",
|
||||||
@ -369,6 +378,8 @@ func InitISCSIDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -418,18 +429,20 @@ func (i *iSCSIDriver) GetPersistentVolumeSource(readOnly bool, fsType string, te
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (i *iSCSIDriver) CreateDriver() {
|
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) CleanupDriver() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *iSCSIDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (i *iSCSIDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := i.driverInfo.Framework
|
f := i.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
config, serverPod, serverIP := framework.NewISCSIServer(cs, ns.Name)
|
config, serverPod, serverIP := framework.NewISCSIServer(cs, ns.Name)
|
||||||
i.driverInfo.Config = config
|
i.driverInfo.Config.ServerConfig = &config
|
||||||
return &iSCSITestResource{
|
return &iSCSITestResource{
|
||||||
serverPod: serverPod,
|
serverPod: serverPod,
|
||||||
serverIP: serverIP,
|
serverIP: serverIP,
|
||||||
@ -437,7 +450,7 @@ func (i *iSCSIDriver) CreateVolume(volType testpatterns.TestVolType) interface{}
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (i *iSCSIDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
func (i *iSCSIDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := i.driverInfo.Framework
|
f := i.driverInfo.Config.Framework
|
||||||
|
|
||||||
itr, ok := testResource.(*iSCSITestResource)
|
itr, ok := testResource.(*iSCSITestResource)
|
||||||
Expect(ok).To(BeTrue(), "Failed to cast test resource to iSCSI Test Resource")
|
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{}
|
var _ testsuites.PreprovisionedPVTestDriver = &rbdDriver{}
|
||||||
|
|
||||||
// InitRbdDriver returns rbdDriver that implements TestDriver interface
|
// InitRbdDriver returns rbdDriver that implements TestDriver interface
|
||||||
func InitRbdDriver() testsuites.TestDriver {
|
func InitRbdDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &rbdDriver{
|
return &rbdDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "rbd",
|
Name: "rbd",
|
||||||
@ -481,6 +494,8 @@ func InitRbdDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
testsuites.CapExec: 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 {
|
func (r *rbdDriver) GetPersistentVolumeSource(readOnly bool, fsType string, testResource interface{}) *v1.PersistentVolumeSource {
|
||||||
f := r.driverInfo.Framework
|
f := r.driverInfo.Config.Framework
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
rtr, ok := testResource.(*rbdTestResource)
|
rtr, ok := testResource.(*rbdTestResource)
|
||||||
@ -541,18 +556,20 @@ func (r *rbdDriver) GetPersistentVolumeSource(readOnly bool, fsType string, test
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *rbdDriver) CreateDriver() {
|
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) CleanupDriver() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *rbdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (r *rbdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := r.driverInfo.Framework
|
f := r.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name)
|
config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name)
|
||||||
r.driverInfo.Config = config
|
r.driverInfo.Config.ServerConfig = &config
|
||||||
return &rbdTestResource{
|
return &rbdTestResource{
|
||||||
serverPod: serverPod,
|
serverPod: serverPod,
|
||||||
serverIP: serverIP,
|
serverIP: serverIP,
|
||||||
@ -561,7 +578,7 @@ func (r *rbdDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *rbdDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
func (r *rbdDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := r.driverInfo.Framework
|
f := r.driverInfo.Config.Framework
|
||||||
|
|
||||||
rtr, ok := testResource.(*rbdTestResource)
|
rtr, ok := testResource.(*rbdTestResource)
|
||||||
Expect(ok).To(BeTrue(), "Failed to cast test resource to RBD Test Resource")
|
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{}
|
var _ testsuites.PreprovisionedPVTestDriver = &cephFSDriver{}
|
||||||
|
|
||||||
// InitCephFSDriver returns cephFSDriver that implements TestDriver interface
|
// InitCephFSDriver returns cephFSDriver that implements TestDriver interface
|
||||||
func InitCephFSDriver() testsuites.TestDriver {
|
func InitCephFSDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &cephFSDriver{
|
return &cephFSDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "ceph",
|
Name: "ceph",
|
||||||
@ -603,6 +620,8 @@ func InitCephFSDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
testsuites.CapExec: 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 {
|
func (c *cephFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string, testResource interface{}) *v1.PersistentVolumeSource {
|
||||||
f := c.driverInfo.Framework
|
f := c.driverInfo.Config.Framework
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
ctr, ok := testResource.(*cephTestResource)
|
ctr, ok := testResource.(*cephTestResource)
|
||||||
@ -651,18 +670,20 @@ func (c *cephFSDriver) GetPersistentVolumeSource(readOnly bool, fsType string, t
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *cephFSDriver) CreateDriver() {
|
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) CleanupDriver() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cephFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (c *cephFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := c.driverInfo.Framework
|
f := c.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name)
|
config, serverPod, secret, serverIP := framework.NewRBDServer(cs, ns.Name)
|
||||||
c.driverInfo.Config = config
|
c.driverInfo.Config.ServerConfig = &config
|
||||||
return &cephTestResource{
|
return &cephTestResource{
|
||||||
serverPod: serverPod,
|
serverPod: serverPod,
|
||||||
serverIP: serverIP,
|
serverIP: serverIP,
|
||||||
@ -671,7 +692,7 @@ func (c *cephFSDriver) CreateVolume(volType testpatterns.TestVolType) interface{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *cephFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
func (c *cephFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := c.driverInfo.Framework
|
f := c.driverInfo.Config.Framework
|
||||||
|
|
||||||
ctr, ok := testResource.(*cephTestResource)
|
ctr, ok := testResource.(*cephTestResource)
|
||||||
Expect(ok).To(BeTrue(), "Failed to cast test resource to Ceph Test Resource")
|
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{}
|
var _ testsuites.InlineVolumeTestDriver = &hostPathDriver{}
|
||||||
|
|
||||||
// InitHostPathDriver returns hostPathDriver that implements TestDriver interface
|
// InitHostPathDriver returns hostPathDriver that implements TestDriver interface
|
||||||
func InitHostPathDriver() testsuites.TestDriver {
|
func InitHostPathDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &hostPathDriver{
|
return &hostPathDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "hostPath",
|
Name: "hostPath",
|
||||||
@ -702,6 +723,8 @@ func InitHostPathDriver() testsuites.TestDriver {
|
|||||||
Capabilities: map[testsuites.Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -732,7 +755,7 @@ func (h *hostPathDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostPathDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (h *hostPathDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := h.driverInfo.Framework
|
f := h.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
|
|
||||||
// pods should be scheduled on the node
|
// pods should be scheduled on the node
|
||||||
@ -763,7 +786,7 @@ var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{}
|
|||||||
var _ testsuites.InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||||
|
|
||||||
// InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface
|
// InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface
|
||||||
func InitHostPathSymlinkDriver() testsuites.TestDriver {
|
func InitHostPathSymlinkDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &hostPathSymlinkDriver{
|
return &hostPathSymlinkDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "hostPathSymlink",
|
Name: "hostPathSymlink",
|
||||||
@ -774,6 +797,8 @@ func InitHostPathSymlinkDriver() testsuites.TestDriver {
|
|||||||
Capabilities: map[testsuites.Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
testsuites.CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -807,7 +832,7 @@ func (h *hostPathSymlinkDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostPathSymlinkDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (h *hostPathSymlinkDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := h.driverInfo.Framework
|
f := h.driverInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
|
|
||||||
sourcePath := fmt.Sprintf("/tmp/%v", f.Namespace.Name)
|
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{}) {
|
func (h *hostPathSymlinkDriver) DeleteVolume(volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
f := h.driverInfo.Framework
|
f := h.driverInfo.Config.Framework
|
||||||
|
|
||||||
htr, ok := testResource.(*hostPathSymlinkTestResource)
|
htr, ok := testResource.(*hostPathSymlinkTestResource)
|
||||||
Expect(ok).To(BeTrue(), "Failed to cast test resource to Hostpath Symlink Test Resource")
|
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{}
|
var _ testsuites.InlineVolumeTestDriver = &emptydirDriver{}
|
||||||
|
|
||||||
// InitEmptydirDriver returns emptydirDriver that implements TestDriver interface
|
// InitEmptydirDriver returns emptydirDriver that implements TestDriver interface
|
||||||
func InitEmptydirDriver() testsuites.TestDriver {
|
func InitEmptydirDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &emptydirDriver{
|
return &emptydirDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "emptydir",
|
Name: "emptydir",
|
||||||
@ -914,6 +939,8 @@ func InitEmptydirDriver() testsuites.TestDriver {
|
|||||||
Capabilities: map[testsuites.Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -969,7 +996,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &cinderDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &cinderDriver{}
|
var _ testsuites.DynamicPVTestDriver = &cinderDriver{}
|
||||||
|
|
||||||
// InitCinderDriver returns cinderDriver that implements TestDriver interface
|
// InitCinderDriver returns cinderDriver that implements TestDriver interface
|
||||||
func InitCinderDriver() testsuites.TestDriver {
|
func InitCinderDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &cinderDriver{
|
return &cinderDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "cinder",
|
Name: "cinder",
|
||||||
@ -983,6 +1010,8 @@ func InitCinderDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1033,7 +1062,7 @@ func (c *cinderDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1
|
|||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
parameters["fsType"] = 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)
|
suffix := fmt.Sprintf("%s-sc", c.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -1050,7 +1079,7 @@ func (c *cinderDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *cinderDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (c *cinderDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := c.driverInfo.Framework
|
f := c.driverInfo.Config.Framework
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
|
|
||||||
// We assume that namespace.Name is a random string
|
// We assume that namespace.Name is a random string
|
||||||
@ -1129,7 +1158,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &gcePdDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &gcePdDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePdDriver{}
|
||||||
|
|
||||||
// InitGceDriver returns gcePdDriver that implements TestDriver interface
|
// InitGceDriver returns gcePdDriver that implements TestDriver interface
|
||||||
func InitGcePdDriver() testsuites.TestDriver {
|
func InitGcePdDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &gcePdDriver{
|
return &gcePdDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "gcepd",
|
Name: "gcepd",
|
||||||
@ -1148,6 +1177,8 @@ func InitGcePdDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1199,7 +1230,7 @@ func (g *gcePdDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
|||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
parameters["fsType"] = 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)
|
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -1219,7 +1250,7 @@ func (g *gcePdDriver) CreateVolume(volType testpatterns.TestVolType) interface{}
|
|||||||
if volType == testpatterns.InlineVolume {
|
if volType == testpatterns.InlineVolume {
|
||||||
// PD will be created in framework.TestContext.CloudConfig.Zone zone,
|
// PD will be created in framework.TestContext.CloudConfig.Zone zone,
|
||||||
// so pods should be also scheduled there.
|
// 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,
|
kubeletapis.LabelZoneFailureDomain: framework.TestContext.CloudConfig.Zone,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1254,7 +1285,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &vSphereDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &vSphereDriver{}
|
var _ testsuites.DynamicPVTestDriver = &vSphereDriver{}
|
||||||
|
|
||||||
// InitVSphereDriver returns vSphereDriver that implements TestDriver interface
|
// InitVSphereDriver returns vSphereDriver that implements TestDriver interface
|
||||||
func InitVSphereDriver() testsuites.TestDriver {
|
func InitVSphereDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &vSphereDriver{
|
return &vSphereDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "vSphere",
|
Name: "vSphere",
|
||||||
@ -1268,6 +1299,8 @@ func InitVSphereDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1325,7 +1358,7 @@ func (v *vSphereDriver) GetDynamicProvisionStorageClass(fsType string) *storagev
|
|||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
parameters["fsType"] = 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)
|
suffix := fmt.Sprintf("%s-sc", v.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -1342,7 +1375,7 @@ func (v *vSphereDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *vSphereDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
func (v *vSphereDriver) CreateVolume(volType testpatterns.TestVolType) interface{} {
|
||||||
f := v.driverInfo.Framework
|
f := v.driverInfo.Config.Framework
|
||||||
vspheretest.Bootstrap(f)
|
vspheretest.Bootstrap(f)
|
||||||
nodeInfo := vspheretest.GetReadySchedulableRandomNodeInfo()
|
nodeInfo := vspheretest.GetReadySchedulableRandomNodeInfo()
|
||||||
volumePath, err := nodeInfo.VSphere.CreateVolume(&vspheretest.VolumeOptions{}, nodeInfo.DataCenterRef)
|
volumePath, err := nodeInfo.VSphere.CreateVolume(&vspheretest.VolumeOptions{}, nodeInfo.DataCenterRef)
|
||||||
@ -1376,7 +1409,7 @@ var _ testsuites.PreprovisionedPVTestDriver = &azureDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &azureDriver{}
|
var _ testsuites.DynamicPVTestDriver = &azureDriver{}
|
||||||
|
|
||||||
// InitAzureDriver returns azureDriver that implements TestDriver interface
|
// InitAzureDriver returns azureDriver that implements TestDriver interface
|
||||||
func InitAzureDriver() testsuites.TestDriver {
|
func InitAzureDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &azureDriver{
|
return &azureDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "azure",
|
Name: "azure",
|
||||||
@ -1391,6 +1424,8 @@ func InitAzureDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1447,7 +1482,7 @@ func (a *azureDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
|||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
parameters["fsType"] = 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)
|
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
@ -1495,7 +1530,7 @@ var _ testsuites.TestDriver = &awsDriver{}
|
|||||||
var _ testsuites.DynamicPVTestDriver = &awsDriver{}
|
var _ testsuites.DynamicPVTestDriver = &awsDriver{}
|
||||||
|
|
||||||
// InitAwsDriver returns awsDriver that implements TestDriver interface
|
// InitAwsDriver returns awsDriver that implements TestDriver interface
|
||||||
func InitAwsDriver() testsuites.TestDriver {
|
func InitAwsDriver(config testsuites.TestConfig) testsuites.TestDriver {
|
||||||
return &awsDriver{
|
return &awsDriver{
|
||||||
driverInfo: testsuites.DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "aws",
|
Name: "aws",
|
||||||
@ -1511,6 +1546,8 @@ func InitAwsDriver() testsuites.TestDriver {
|
|||||||
testsuites.CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
testsuites.CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Config: config,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1558,7 +1595,7 @@ func (a *awsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St
|
|||||||
if fsType != "" {
|
if fsType != "" {
|
||||||
parameters["fsType"] = 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)
|
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
||||||
|
|
||||||
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
|
@ -18,7 +18,6 @@ package storage
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
"k8s.io/api/core/v1"
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/drivers"
|
"k8s.io/kubernetes/test/e2e/storage/drivers"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
@ -27,7 +26,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// List of testDrivers to be executed in below loop
|
// 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.InitNFSDriver,
|
||||||
drivers.InitGlusterFSDriver,
|
drivers.InitGlusterFSDriver,
|
||||||
drivers.InitISCSIDriver,
|
drivers.InitISCSIDriver,
|
||||||
@ -61,26 +60,20 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() {
|
|||||||
f := framework.NewDefaultFramework("volumes")
|
f := framework.NewDefaultFramework("volumes")
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ns *v1.Namespace
|
// Common configuration options for all drivers.
|
||||||
config framework.VolumeTestConfig
|
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 {
|
for _, initDriver := range testDrivers {
|
||||||
curDriver := initDriver()
|
curDriver := initDriver(config)
|
||||||
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||||
driver := curDriver
|
driver := curDriver
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
// setupDriver
|
// setupDriver
|
||||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -89,7 +82,7 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() {
|
|||||||
driver.CleanupDriver()
|
driver.CleanupDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
testsuites.RunTestSuite(f, config, driver, testSuites, intreeTunePattern)
|
testsuites.RunTestSuite(f, driver, testSuites, intreeTunePattern)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -65,7 +65,7 @@ func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunTestSuite runs all testpatterns of all testSuites for a driver
|
// 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 {
|
for _, testSuiteInit := range tsInits {
|
||||||
suite := testSuiteInit()
|
suite := testSuiteInit()
|
||||||
patterns := tunePatternFunc(suite.getTestSuiteInfo().testPatterns)
|
patterns := tunePatternFunc(suite.getTestSuiteInfo().testPatterns)
|
||||||
@ -136,7 +136,7 @@ var _ TestResource = &genericVolumeTestResource{}
|
|||||||
func (r *genericVolumeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (r *genericVolumeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
r.driver = driver
|
r.driver = driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
fsType := pattern.FsType
|
fsType := pattern.FsType
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
@ -189,7 +189,7 @@ func (r *genericVolumeTestResource) setupResource(driver TestDriver, pattern tes
|
|||||||
// cleanupResource cleans up genericVolumeTestResource
|
// cleanupResource cleans up genericVolumeTestResource
|
||||||
func (r *genericVolumeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (r *genericVolumeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
|
|
||||||
if r.pvc != nil || r.pv != nil {
|
if r.pvc != nil || r.pv != nil {
|
||||||
@ -323,3 +323,24 @@ func deleteStorageClass(cs clientset.Interface, className string) {
|
|||||||
Expect(err).NotTo(HaveOccurred())
|
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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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
|
// GetStorageClass constructs a new StorageClass instance
|
||||||
// with a unique name that is based on namespace + suffix.
|
// with a unique name that is based on namespace + suffix.
|
||||||
func GetStorageClass(
|
func GetStorageClass(
|
||||||
@ -110,5 +97,5 @@ func GetStorageClass(
|
|||||||
|
|
||||||
// GetUniqueDriverName returns unique driver name that can be used parallelly in tests
|
// GetUniqueDriverName returns unique driver name that can be used parallelly in tests
|
||||||
func GetUniqueDriverName(driver TestDriver) string {
|
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)
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ func createProvisioningTestInput(driver TestDriver, pattern testpatterns.TestPat
|
|||||||
ClaimSize: resource.claimSize,
|
ClaimSize: resource.claimSize,
|
||||||
ExpectedSize: resource.claimSize,
|
ExpectedSize: resource.claimSize,
|
||||||
},
|
},
|
||||||
cs: driver.GetDriverInfo().Framework.ClientSet,
|
cs: driver.GetDriverInfo().Config.Framework.ClientSet,
|
||||||
pvc: resource.pvc,
|
pvc: resource.pvc,
|
||||||
sc: resource.sc,
|
sc: resource.sc,
|
||||||
dInfo: driver.GetDriverInfo(),
|
dInfo: driver.GetDriverInfo(),
|
||||||
@ -151,7 +151,7 @@ func (p *provisioningTestResource) setupResource(driver TestDriver, pattern test
|
|||||||
}
|
}
|
||||||
p.driver = driver
|
p.driver = driver
|
||||||
p.claimSize = dDriver.GetClaimSize()
|
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
|
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)
|
framework.Logf("In creating storage class object and pvc object for driver - sc: %v, pvc: %v", p.sc, p.pvc)
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ func (s *subPathTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern,
|
|||||||
func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTestResource) subPathTestInput {
|
func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTestResource) subPathTestInput {
|
||||||
driver := resource.driver
|
driver := resource.driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
subPath := f.Namespace.Name
|
subPath := f.Namespace.Name
|
||||||
subPathDir := filepath.Join(volumePath, subPath)
|
subPathDir := filepath.Join(volumePath, subPath)
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ var _ TestResource = &subPathTestResource{}
|
|||||||
func (s *subPathTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *subPathTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
s.driver = driver
|
s.driver = driver
|
||||||
dInfo := s.driver.GetDriverInfo()
|
dInfo := s.driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
fsType := pattern.FsType
|
fsType := pattern.FsType
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
|
|
||||||
@ -174,16 +174,16 @@ func (s *subPathTestResource) setupResource(driver TestDriver, pattern testpatte
|
|||||||
config := dInfo.Config
|
config := dInfo.Config
|
||||||
s.pod = SubpathTestPod(f, subPath, s.volType, s.volSource, true)
|
s.pod = SubpathTestPod(f, subPath, s.volType, s.volSource, true)
|
||||||
s.pod.Spec.NodeName = config.ClientNodeName
|
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 = volumeFormatPod(f, s.volSource)
|
||||||
s.formatPod.Spec.NodeName = config.ClientNodeName
|
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) {
|
func (s *subPathTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
|
|
||||||
// Cleanup subPath test dependent resource
|
// Cleanup subPath test dependent resource
|
||||||
By("Deleting pod")
|
By("Deleting pod")
|
||||||
|
@ -99,9 +99,35 @@ type DriverInfo struct {
|
|||||||
RequiredMountOption sets.String // Map of string for required mount option (Optional)
|
RequiredMountOption sets.String // Map of string for required mount option (Optional)
|
||||||
Capabilities map[Capability]bool // Map that represents plugin capabilities
|
Capabilities map[Capability]bool // Map that represents plugin capabilities
|
||||||
|
|
||||||
// Parameters below will be set inside test loop by using SetCommonDriverParameters.
|
Config TestConfig // Test configuration for the current test.
|
||||||
// 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
|
// TestConfig represents parameters that control test execution.
|
||||||
Config framework.VolumeTestConfig // VolumeTestConfig for thet test
|
// 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
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV
|
|||||||
var fsGroup *int64
|
var fsGroup *int64
|
||||||
driver := resource.driver
|
driver := resource.driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
fileSizes := createFileSizes(dInfo.MaxFileSize)
|
fileSizes := createFileSizes(dInfo.MaxFileSize)
|
||||||
volSource := resource.volSource
|
volSource := resource.volSource
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV
|
|||||||
return volumeIOTestInput{
|
return volumeIOTestInput{
|
||||||
f: f,
|
f: f,
|
||||||
name: dInfo.Name,
|
name: dInfo.Name,
|
||||||
config: dInfo.Config,
|
config: &dInfo.Config,
|
||||||
volSource: *volSource,
|
volSource: *volSource,
|
||||||
testFile: fmt.Sprintf("%s_io_test_%s", dInfo.Name, f.Namespace.Name),
|
testFile: fmt.Sprintf("%s_io_test_%s", dInfo.Name, f.Namespace.Name),
|
||||||
podSec: v1.PodSecurityContext{
|
podSec: v1.PodSecurityContext{
|
||||||
@ -142,7 +142,7 @@ func (t *volumeIOTestSuite) execTest(driver TestDriver, pattern testpatterns.Tes
|
|||||||
type volumeIOTestInput struct {
|
type volumeIOTestInput struct {
|
||||||
f *framework.Framework
|
f *framework.Framework
|
||||||
name string
|
name string
|
||||||
config framework.VolumeTestConfig
|
config *TestConfig
|
||||||
volSource v1.VolumeSource
|
volSource v1.VolumeSource
|
||||||
testFile string
|
testFile string
|
||||||
podSec v1.PodSecurityContext
|
podSec v1.PodSecurityContext
|
||||||
@ -154,7 +154,7 @@ func execTestVolumeIO(input *volumeIOTestInput) {
|
|||||||
f := input.f
|
f := input.f
|
||||||
cs := f.ClientSet
|
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())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ func (t *volumeModeTestSuite) skipUnsupportedTest(pattern testpatterns.TestPatte
|
|||||||
func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volumeModeTestResource) volumeModeTestInput {
|
func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volumeModeTestResource) volumeModeTestInput {
|
||||||
driver := resource.driver
|
driver := resource.driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
|
|
||||||
return volumeModeTestInput{
|
return volumeModeTestInput{
|
||||||
f: f,
|
f: f,
|
||||||
@ -154,7 +154,7 @@ var _ TestResource = &volumeModeTestResource{}
|
|||||||
func (s *volumeModeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *volumeModeTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
s.driver = driver
|
s.driver = driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
fsType := pattern.FsType
|
fsType := pattern.FsType
|
||||||
volBindMode := storagev1.VolumeBindingImmediate
|
volBindMode := storagev1.VolumeBindingImmediate
|
||||||
@ -207,7 +207,7 @@ func (s *volumeModeTestResource) setupResource(driver TestDriver, pattern testpa
|
|||||||
|
|
||||||
func (s *volumeModeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *volumeModeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
ns := f.Namespace
|
ns := f.Namespace
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
|
@ -93,7 +93,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo
|
|||||||
var fsGroup *int64
|
var fsGroup *int64
|
||||||
driver := resource.driver
|
driver := resource.driver
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Config.Framework
|
||||||
volSource := resource.volSource
|
volSource := resource.volSource
|
||||||
|
|
||||||
if volSource == nil {
|
if volSource == nil {
|
||||||
@ -108,7 +108,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo
|
|||||||
return volumesTestInput{
|
return volumesTestInput{
|
||||||
f: f,
|
f: f,
|
||||||
name: dInfo.Name,
|
name: dInfo.Name,
|
||||||
config: dInfo.Config,
|
config: &dInfo.Config,
|
||||||
fsGroup: fsGroup,
|
fsGroup: fsGroup,
|
||||||
resource: resource,
|
resource: resource,
|
||||||
tests: []framework.VolumeTest{
|
tests: []framework.VolumeTest{
|
||||||
@ -158,7 +158,7 @@ func (t *volumesTestSuite) execTest(driver TestDriver, pattern testpatterns.Test
|
|||||||
type volumesTestInput struct {
|
type volumesTestInput struct {
|
||||||
f *framework.Framework
|
f *framework.Framework
|
||||||
name string
|
name string
|
||||||
config framework.VolumeTestConfig
|
config *TestConfig
|
||||||
fsGroup *int64
|
fsGroup *int64
|
||||||
tests []framework.VolumeTest
|
tests []framework.VolumeTest
|
||||||
resource genericVolumeTestResource
|
resource genericVolumeTestResource
|
||||||
@ -168,19 +168,20 @@ func testVolumes(input *volumesTestInput) {
|
|||||||
It("should be mountable", func() {
|
It("should be mountable", func() {
|
||||||
f := input.f
|
f := input.f
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
defer framework.VolumeTestCleanup(f, input.config)
|
defer framework.VolumeTestCleanup(f, convertTestConfig(input.config))
|
||||||
|
|
||||||
skipPersistenceTest(input.resource.driver)
|
skipPersistenceTest(input.resource.driver)
|
||||||
|
|
||||||
volumeTest := input.tests
|
volumeTest := input.tests
|
||||||
framework.InjectHtml(cs, input.config, volumeTest[0].Volume, volumeTest[0].ExpectedContent)
|
config := convertTestConfig(input.config)
|
||||||
framework.TestVolumeClient(cs, input.config, input.fsGroup, input.tests)
|
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() {
|
It("should allow exec of files on the volume", func() {
|
||||||
f := input.f
|
f := input.f
|
||||||
skipExecTest(input.resource.driver)
|
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)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user