mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
e2e/storage: separate generic testsuites from specific drivers
This makes it possible to use the testsuites package out-of-tree without pulling in unnecessary dependencies and code (in test/e2e/storage/vsphere) that defines tests that are not wanted in a custom test suite.
This commit is contained in:
parent
41ab9449ed
commit
dfcf2ca345
@ -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() drivers.TestDriver{
|
var csiTestDrivers = []func() testsuites.TestDriver{
|
||||||
drivers.InitHostPathCSIDriver,
|
drivers.InitHostPathCSIDriver,
|
||||||
drivers.InitGcePDCSIDriver,
|
drivers.InitGcePDCSIDriver,
|
||||||
drivers.InitGcePDExternalCSIDriver,
|
drivers.InitGcePDExternalCSIDriver,
|
||||||
@ -126,12 +126,12 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
|
|
||||||
for _, initDriver := range csiTestDrivers {
|
for _, initDriver := range csiTestDrivers {
|
||||||
curDriver := initDriver()
|
curDriver := initDriver()
|
||||||
Context(drivers.GetDriverNameWithFeatureTags(curDriver), func() {
|
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||||
driver := curDriver
|
driver := curDriver
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
// setupDriver
|
// setupDriver
|
||||||
drivers.SetCommonDriverParameters(driver, f, config)
|
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -149,14 +149,14 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
var (
|
var (
|
||||||
cs clientset.Interface
|
cs clientset.Interface
|
||||||
csics csiclient.Interface
|
csics csiclient.Interface
|
||||||
driver drivers.TestDriver
|
driver testsuites.TestDriver
|
||||||
)
|
)
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
cs = f.ClientSet
|
cs = f.ClientSet
|
||||||
csics = f.CSIClientSet
|
csics = f.CSIClientSet
|
||||||
driver = drivers.InitHostPathCSIDriver()
|
driver = drivers.InitHostPathCSIDriver()
|
||||||
drivers.SetCommonDriverParameters(driver, f, config)
|
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -193,7 +193,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
test := t
|
test := t
|
||||||
It(test.name, func() {
|
It(test.name, func() {
|
||||||
if test.driverExists {
|
if test.driverExists {
|
||||||
csiDriver := createCSIDriver(csics, drivers.GetUniqueDriverName(driver), test.driverAttachable)
|
csiDriver := createCSIDriver(csics, testsuites.GetUniqueDriverName(driver), test.driverAttachable)
|
||||||
if csiDriver != nil {
|
if csiDriver != nil {
|
||||||
defer csics.CsiV1alpha1().CSIDrivers().Delete(csiDriver.Name, nil)
|
defer csics.CsiV1alpha1().CSIDrivers().Delete(csiDriver.Name, nil)
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
|||||||
|
|
||||||
By("Creating pod")
|
By("Creating pod")
|
||||||
var sc *storagev1.StorageClass
|
var sc *storagev1.StorageClass
|
||||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
if dDriver, ok := driver.(testsuites.DynamicPVTestDriver); ok {
|
||||||
sc = dDriver.GetDynamicProvisionStorageClass("")
|
sc = dDriver.GetDynamicProvisionStorageClass("")
|
||||||
}
|
}
|
||||||
nodeName := driver.GetDriverInfo().Config.ClientNodeName
|
nodeName := driver.GetDriverInfo().Config.ClientNodeName
|
||||||
|
@ -44,38 +44,39 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
|
"k8s.io/kubernetes/test/e2e/storage/testsuites"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// hostpathCSI
|
// hostpathCSI
|
||||||
type hostpathCSIDriver struct {
|
type hostpathCSIDriver struct {
|
||||||
cleanup func()
|
cleanup func()
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
manifests []string
|
manifests []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func initHostPathCSIDriver(name string, manifests ...string) TestDriver {
|
func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriver {
|
||||||
return &hostpathCSIDriver{
|
return &hostpathCSIDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: name,
|
Name: name,
|
||||||
FeatureTag: "",
|
FeatureTag: "",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
manifests: manifests,
|
manifests: manifests,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &hostpathCSIDriver{}
|
var _ testsuites.TestDriver = &hostpathCSIDriver{}
|
||||||
var _ DynamicPVTestDriver = &hostpathCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &hostpathCSIDriver{}
|
||||||
|
|
||||||
// InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface
|
// InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface
|
||||||
func InitHostPathCSIDriver() TestDriver {
|
func InitHostPathCSIDriver() testsuites.TestDriver {
|
||||||
return initHostPathCSIDriver("csi-hostpath",
|
return initHostPathCSIDriver("csi-hostpath",
|
||||||
"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",
|
||||||
@ -87,7 +88,7 @@ func InitHostPathCSIDriver() TestDriver {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostpathCSIDriver) GetDriverInfo() *DriverInfo {
|
func (h *hostpathCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &h.driverInfo
|
return &h.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,12 +96,12 @@ func (h *hostpathCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostpathCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
func (h *hostpathCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
||||||
provisioner := GetUniqueDriverName(h)
|
provisioner := testsuites.GetUniqueDriverName(h)
|
||||||
parameters := map[string]string{}
|
parameters := map[string]string{}
|
||||||
ns := h.driverInfo.Framework.Namespace.Name
|
ns := h.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", provisioner)
|
suffix := fmt.Sprintf("%s-sc", provisioner)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostpathCSIDriver) GetClaimSize() string {
|
func (h *hostpathCSIDriver) GetClaimSize() string {
|
||||||
@ -122,7 +123,7 @@ func (h *hostpathCSIDriver) CreateDriver() {
|
|||||||
// settings are ignored for this test. We could patch the image definitions.
|
// settings are ignored for this test. We could patch the image definitions.
|
||||||
o := utils.PatchCSIOptions{
|
o := utils.PatchCSIOptions{
|
||||||
OldDriverName: h.driverInfo.Name,
|
OldDriverName: h.driverInfo.Name,
|
||||||
NewDriverName: GetUniqueDriverName(h),
|
NewDriverName: testsuites.GetUniqueDriverName(h),
|
||||||
DriverContainerName: "hostpath",
|
DriverContainerName: "hostpath",
|
||||||
ProvisionerContainerName: "csi-provisioner",
|
ProvisionerContainerName: "csi-provisioner",
|
||||||
NodeName: h.driverInfo.Config.ServerNodeName,
|
NodeName: h.driverInfo.Config.ServerNodeName,
|
||||||
@ -145,7 +146,7 @@ func (h *hostpathCSIDriver) CleanupDriver() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests.
|
// InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests.
|
||||||
func InitHostPathV0CSIDriver() TestDriver {
|
func InitHostPathV0CSIDriver() testsuites.TestDriver {
|
||||||
return initHostPathCSIDriver("csi-hostpath-v0",
|
return initHostPathCSIDriver("csi-hostpath-v0",
|
||||||
"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",
|
||||||
@ -160,16 +161,16 @@ func InitHostPathV0CSIDriver() TestDriver {
|
|||||||
// gce-pd
|
// gce-pd
|
||||||
type gcePDCSIDriver struct {
|
type gcePDCSIDriver struct {
|
||||||
cleanup func()
|
cleanup func()
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &gcePDCSIDriver{}
|
var _ testsuites.TestDriver = &gcePDCSIDriver{}
|
||||||
var _ DynamicPVTestDriver = &gcePDCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePDCSIDriver{}
|
||||||
|
|
||||||
// InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface
|
// InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface
|
||||||
func InitGcePDCSIDriver() TestDriver {
|
func InitGcePDCSIDriver() testsuites.TestDriver {
|
||||||
return &gcePDCSIDriver{
|
return &gcePDCSIDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "pd.csi.storage.gke.io",
|
Name: "pd.csi.storage.gke.io",
|
||||||
FeatureTag: "[Serial]",
|
FeatureTag: "[Serial]",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
@ -180,16 +181,16 @@ func InitGcePDCSIDriver() TestDriver {
|
|||||||
"ext4",
|
"ext4",
|
||||||
"xfs",
|
"xfs",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDCSIDriver) GetDriverInfo() *DriverInfo {
|
func (g *gcePDCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &g.driverInfo
|
return &g.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +207,7 @@ func (g *gcePDCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storage
|
|||||||
|
|
||||||
parameters := map[string]string{"type": "pd-standard"}
|
parameters := map[string]string{"type": "pd-standard"}
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDCSIDriver) GetClaimSize() string {
|
func (g *gcePDCSIDriver) GetClaimSize() string {
|
||||||
@ -223,7 +224,7 @@ func (g *gcePDCSIDriver) CreateDriver() {
|
|||||||
// These are the options which would have to be used:
|
// These are the options which would have to be used:
|
||||||
// o := utils.PatchCSIOptions{
|
// o := utils.PatchCSIOptions{
|
||||||
// OldDriverName: g.driverInfo.Name,
|
// OldDriverName: g.driverInfo.Name,
|
||||||
// NewDriverName: GetUniqueDriverName(g),
|
// NewDriverName: testsuites.GetUniqueDriverName(g),
|
||||||
// DriverContainerName: "gce-driver",
|
// DriverContainerName: "gce-driver",
|
||||||
// ProvisionerContainerName: "csi-external-provisioner",
|
// ProvisionerContainerName: "csi-external-provisioner",
|
||||||
// }
|
// }
|
||||||
@ -252,17 +253,18 @@ func (g *gcePDCSIDriver) CleanupDriver() {
|
|||||||
|
|
||||||
// gcePd-external
|
// gcePd-external
|
||||||
type gcePDExternalCSIDriver struct {
|
type gcePDExternalCSIDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &gcePDExternalCSIDriver{}
|
var _ testsuites.TestDriver = &gcePDExternalCSIDriver{}
|
||||||
var _ DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
||||||
|
|
||||||
// InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface
|
// InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface
|
||||||
func InitGcePDExternalCSIDriver() TestDriver {
|
func InitGcePDExternalCSIDriver() testsuites.TestDriver {
|
||||||
return &gcePDExternalCSIDriver{
|
return &gcePDExternalCSIDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "pd.csi.storage.gke.io",
|
Name: "pd.csi.storage.gke.io",
|
||||||
|
|
||||||
// TODO(#70258): this is temporary until we can figure out how to make e2e tests a library
|
// TODO(#70258): this is temporary until we can figure out how to make e2e tests a library
|
||||||
FeatureTag: "[Feature: gcePD-external]",
|
FeatureTag: "[Feature: gcePD-external]",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
@ -273,16 +275,16 @@ func InitGcePDExternalCSIDriver() TestDriver {
|
|||||||
"ext4",
|
"ext4",
|
||||||
"xfs",
|
"xfs",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDExternalCSIDriver) GetDriverInfo() *DriverInfo {
|
func (g *gcePDExternalCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &g.driverInfo
|
return &g.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +300,7 @@ func (g *gcePDExternalCSIDriver) GetDynamicProvisionStorageClass(fsType string)
|
|||||||
|
|
||||||
parameters := map[string]string{"type": "pd-standard"}
|
parameters := map[string]string{"type": "pd-standard"}
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePDExternalCSIDriver) GetClaimSize() string {
|
func (g *gcePDExternalCSIDriver) GetClaimSize() string {
|
||||||
|
@ -55,6 +55,7 @@ import (
|
|||||||
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
|
"k8s.io/kubernetes/test/e2e/storage/testsuites"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||||
vspheretest "k8s.io/kubernetes/test/e2e/storage/vsphere"
|
vspheretest "k8s.io/kubernetes/test/e2e/storage/vsphere"
|
||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
@ -65,7 +66,7 @@ type nfsDriver struct {
|
|||||||
externalProvisionerPod *v1.Pod
|
externalProvisionerPod *v1.Pod
|
||||||
externalPluginName string
|
externalPluginName string
|
||||||
|
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type nfsTestResource struct {
|
type nfsTestResource struct {
|
||||||
@ -73,16 +74,16 @@ type nfsTestResource struct {
|
|||||||
serverPod *v1.Pod
|
serverPod *v1.Pod
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &nfsDriver{}
|
var _ testsuites.TestDriver = &nfsDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &nfsDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &nfsDriver{}
|
||||||
var _ InlineVolumeTestDriver = &nfsDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &nfsDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &nfsDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &nfsDriver{}
|
||||||
var _ DynamicPVTestDriver = &nfsDriver{}
|
var _ testsuites.DynamicPVTestDriver = &nfsDriver{}
|
||||||
|
|
||||||
// InitNFSDriver returns nfsDriver that implements TestDriver interface
|
// InitNFSDriver returns nfsDriver that implements TestDriver interface
|
||||||
func InitNFSDriver() TestDriver {
|
func InitNFSDriver() testsuites.TestDriver {
|
||||||
return &nfsDriver{
|
return &nfsDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "nfs",
|
Name: "nfs",
|
||||||
MaxFileSize: testpatterns.FileSizeLarge,
|
MaxFileSize: testpatterns.FileSizeLarge,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
@ -90,15 +91,15 @@ func InitNFSDriver() TestDriver {
|
|||||||
),
|
),
|
||||||
SupportedMountOption: sets.NewString("proto=tcp", "relatime"),
|
SupportedMountOption: sets.NewString("proto=tcp", "relatime"),
|
||||||
RequiredMountOption: sets.NewString("vers=4.1"),
|
RequiredMountOption: sets.NewString("vers=4.1"),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) GetDriverInfo() *DriverInfo {
|
func (n *nfsDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &n.driverInfo
|
return &n.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +136,7 @@ func (n *nfsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St
|
|||||||
ns := n.driverInfo.Framework.Namespace.Name
|
ns := n.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", n.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", n.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *nfsDriver) GetClaimSize() string {
|
func (n *nfsDriver) GetClaimSize() string {
|
||||||
@ -218,7 +219,7 @@ func (n *nfsDriver) DeleteVolume(volType testpatterns.TestVolType, testResource
|
|||||||
|
|
||||||
// Gluster
|
// Gluster
|
||||||
type glusterFSDriver struct {
|
type glusterFSDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type glusterTestResource struct {
|
type glusterTestResource struct {
|
||||||
@ -226,29 +227,29 @@ type glusterTestResource struct {
|
|||||||
serverPod *v1.Pod
|
serverPod *v1.Pod
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &glusterFSDriver{}
|
var _ testsuites.TestDriver = &glusterFSDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &glusterFSDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &glusterFSDriver{}
|
||||||
var _ InlineVolumeTestDriver = &glusterFSDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &glusterFSDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &glusterFSDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &glusterFSDriver{}
|
||||||
|
|
||||||
// InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface
|
// InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface
|
||||||
func InitGlusterFSDriver() TestDriver {
|
func InitGlusterFSDriver() testsuites.TestDriver {
|
||||||
return &glusterFSDriver{
|
return &glusterFSDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "gluster",
|
Name: "gluster",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *glusterFSDriver) GetDriverInfo() *DriverInfo {
|
func (g *glusterFSDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &g.driverInfo
|
return &g.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,22 +337,22 @@ func (g *glusterFSDriver) DeleteVolume(volType testpatterns.TestVolType, testRes
|
|||||||
// iSCSI
|
// iSCSI
|
||||||
// The iscsiadm utility and iscsi target kernel modules must be installed on all nodes.
|
// The iscsiadm utility and iscsi target kernel modules must be installed on all nodes.
|
||||||
type iSCSIDriver struct {
|
type iSCSIDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
type iSCSITestResource struct {
|
type iSCSITestResource struct {
|
||||||
serverPod *v1.Pod
|
serverPod *v1.Pod
|
||||||
serverIP string
|
serverIP string
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &iSCSIDriver{}
|
var _ testsuites.TestDriver = &iSCSIDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &iSCSIDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &iSCSIDriver{}
|
||||||
var _ InlineVolumeTestDriver = &iSCSIDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &iSCSIDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &iSCSIDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &iSCSIDriver{}
|
||||||
|
|
||||||
// InitISCSIDriver returns iSCSIDriver that implements TestDriver interface
|
// InitISCSIDriver returns iSCSIDriver that implements TestDriver interface
|
||||||
func InitISCSIDriver() TestDriver {
|
func InitISCSIDriver() testsuites.TestDriver {
|
||||||
return &iSCSIDriver{
|
return &iSCSIDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "iscsi",
|
Name: "iscsi",
|
||||||
FeatureTag: "[Feature:Volumes]",
|
FeatureTag: "[Feature:Volumes]",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
@ -362,17 +363,17 @@ func InitISCSIDriver() TestDriver {
|
|||||||
//"ext3",
|
//"ext3",
|
||||||
"ext4",
|
"ext4",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *iSCSIDriver) GetDriverInfo() *DriverInfo {
|
func (i *iSCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &i.driverInfo
|
return &i.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,7 +447,7 @@ func (i *iSCSIDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
|||||||
|
|
||||||
// Ceph RBD
|
// Ceph RBD
|
||||||
type rbdDriver struct {
|
type rbdDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type rbdTestResource struct {
|
type rbdTestResource struct {
|
||||||
@ -455,15 +456,15 @@ type rbdTestResource struct {
|
|||||||
secret *v1.Secret
|
secret *v1.Secret
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &rbdDriver{}
|
var _ testsuites.TestDriver = &rbdDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &rbdDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &rbdDriver{}
|
||||||
var _ InlineVolumeTestDriver = &rbdDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &rbdDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &rbdDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &rbdDriver{}
|
||||||
|
|
||||||
// InitRbdDriver returns rbdDriver that implements TestDriver interface
|
// InitRbdDriver returns rbdDriver that implements TestDriver interface
|
||||||
func InitRbdDriver() TestDriver {
|
func InitRbdDriver() testsuites.TestDriver {
|
||||||
return &rbdDriver{
|
return &rbdDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "rbd",
|
Name: "rbd",
|
||||||
FeatureTag: "[Feature:Volumes]",
|
FeatureTag: "[Feature:Volumes]",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
@ -474,17 +475,17 @@ func InitRbdDriver() TestDriver {
|
|||||||
//"ext3",
|
//"ext3",
|
||||||
"ext4",
|
"ext4",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *rbdDriver) GetDriverInfo() *DriverInfo {
|
func (r *rbdDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &r.driverInfo
|
return &r.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,7 +575,7 @@ type cephFSDriver struct {
|
|||||||
serverPod *v1.Pod
|
serverPod *v1.Pod
|
||||||
secret *v1.Secret
|
secret *v1.Secret
|
||||||
|
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type cephTestResource struct {
|
type cephTestResource struct {
|
||||||
@ -583,30 +584,30 @@ type cephTestResource struct {
|
|||||||
secret *v1.Secret
|
secret *v1.Secret
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &cephFSDriver{}
|
var _ testsuites.TestDriver = &cephFSDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &cephFSDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &cephFSDriver{}
|
||||||
var _ InlineVolumeTestDriver = &cephFSDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &cephFSDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &cephFSDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &cephFSDriver{}
|
||||||
|
|
||||||
// InitCephFSDriver returns cephFSDriver that implements TestDriver interface
|
// InitCephFSDriver returns cephFSDriver that implements TestDriver interface
|
||||||
func InitCephFSDriver() TestDriver {
|
func InitCephFSDriver() testsuites.TestDriver {
|
||||||
return &cephFSDriver{
|
return &cephFSDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "ceph",
|
Name: "ceph",
|
||||||
FeatureTag: "[Feature:Volumes]",
|
FeatureTag: "[Feature:Volumes]",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cephFSDriver) GetDriverInfo() *DriverInfo {
|
func (c *cephFSDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &c.driverInfo
|
return &c.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,30 +683,30 @@ func (c *cephFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResour
|
|||||||
type hostPathDriver struct {
|
type hostPathDriver struct {
|
||||||
node v1.Node
|
node v1.Node
|
||||||
|
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &hostPathDriver{}
|
var _ testsuites.TestDriver = &hostPathDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &hostPathDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathDriver{}
|
||||||
var _ InlineVolumeTestDriver = &hostPathDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &hostPathDriver{}
|
||||||
|
|
||||||
// InitHostPathDriver returns hostPathDriver that implements TestDriver interface
|
// InitHostPathDriver returns hostPathDriver that implements TestDriver interface
|
||||||
func InitHostPathDriver() TestDriver {
|
func InitHostPathDriver() testsuites.TestDriver {
|
||||||
return &hostPathDriver{
|
return &hostPathDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "hostPath",
|
Name: "hostPath",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostPathDriver) GetDriverInfo() *DriverInfo {
|
func (h *hostPathDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &h.driverInfo
|
return &h.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -748,7 +749,7 @@ func (h *hostPathDriver) DeleteVolume(volType testpatterns.TestVolType, testReso
|
|||||||
type hostPathSymlinkDriver struct {
|
type hostPathSymlinkDriver struct {
|
||||||
node v1.Node
|
node v1.Node
|
||||||
|
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type hostPathSymlinkTestResource struct {
|
type hostPathSymlinkTestResource struct {
|
||||||
@ -757,27 +758,27 @@ type hostPathSymlinkTestResource struct {
|
|||||||
prepPod *v1.Pod
|
prepPod *v1.Pod
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &hostPathSymlinkDriver{}
|
var _ testsuites.TestDriver = &hostPathSymlinkDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||||
var _ InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||||
|
|
||||||
// InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface
|
// InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface
|
||||||
func InitHostPathSymlinkDriver() TestDriver {
|
func InitHostPathSymlinkDriver() testsuites.TestDriver {
|
||||||
return &hostPathSymlinkDriver{
|
return &hostPathSymlinkDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "hostPathSymlink",
|
Name: "hostPathSymlink",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *hostPathSymlinkDriver) GetDriverInfo() *DriverInfo {
|
func (h *hostPathSymlinkDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &h.driverInfo
|
return &h.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -894,30 +895,30 @@ func (h *hostPathSymlinkDriver) DeleteVolume(volType testpatterns.TestVolType, t
|
|||||||
|
|
||||||
// emptydir
|
// emptydir
|
||||||
type emptydirDriver struct {
|
type emptydirDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &emptydirDriver{}
|
var _ testsuites.TestDriver = &emptydirDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &emptydirDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &emptydirDriver{}
|
||||||
var _ InlineVolumeTestDriver = &emptydirDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &emptydirDriver{}
|
||||||
|
|
||||||
// InitEmptydirDriver returns emptydirDriver that implements TestDriver interface
|
// InitEmptydirDriver returns emptydirDriver that implements TestDriver interface
|
||||||
func InitEmptydirDriver() TestDriver {
|
func InitEmptydirDriver() testsuites.TestDriver {
|
||||||
return &emptydirDriver{
|
return &emptydirDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "emptydir",
|
Name: "emptydir",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *emptydirDriver) GetDriverInfo() *DriverInfo {
|
func (e *emptydirDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &e.driverInfo
|
return &e.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,7 +954,7 @@ func (e *emptydirDriver) CleanupDriver() {
|
|||||||
// and that the usual OpenStack authentication env. variables are set
|
// and that the usual OpenStack authentication env. variables are set
|
||||||
// (OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME at least).
|
// (OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME at least).
|
||||||
type cinderDriver struct {
|
type cinderDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type cinderTestResource struct {
|
type cinderTestResource struct {
|
||||||
@ -961,32 +962,32 @@ type cinderTestResource struct {
|
|||||||
volumeID string
|
volumeID string
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &cinderDriver{}
|
var _ testsuites.TestDriver = &cinderDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &cinderDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &cinderDriver{}
|
||||||
var _ InlineVolumeTestDriver = &cinderDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &cinderDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &cinderDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &cinderDriver{}
|
||||||
var _ DynamicPVTestDriver = &cinderDriver{}
|
var _ testsuites.DynamicPVTestDriver = &cinderDriver{}
|
||||||
|
|
||||||
// InitCinderDriver returns cinderDriver that implements TestDriver interface
|
// InitCinderDriver returns cinderDriver that implements TestDriver interface
|
||||||
func InitCinderDriver() TestDriver {
|
func InitCinderDriver() testsuites.TestDriver {
|
||||||
return &cinderDriver{
|
return &cinderDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "cinder",
|
Name: "cinder",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
"ext3",
|
"ext3",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cinderDriver) GetDriverInfo() *DriverInfo {
|
func (c *cinderDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &c.driverInfo
|
return &c.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1035,7 +1036,7 @@ func (c *cinderDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1
|
|||||||
ns := c.driverInfo.Framework.Namespace.Name
|
ns := c.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", c.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", c.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *cinderDriver) GetClaimSize() string {
|
func (c *cinderDriver) GetClaimSize() string {
|
||||||
@ -1114,23 +1115,23 @@ func deleteCinderVolume(name string) error {
|
|||||||
|
|
||||||
// GCE
|
// GCE
|
||||||
type gcePdDriver struct {
|
type gcePdDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type gcePdTestResource struct {
|
type gcePdTestResource struct {
|
||||||
volumeName string
|
volumeName string
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &gcePdDriver{}
|
var _ testsuites.TestDriver = &gcePdDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &gcePdDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &gcePdDriver{}
|
||||||
var _ InlineVolumeTestDriver = &gcePdDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &gcePdDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &gcePdDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &gcePdDriver{}
|
||||||
var _ DynamicPVTestDriver = &gcePdDriver{}
|
var _ testsuites.DynamicPVTestDriver = &gcePdDriver{}
|
||||||
|
|
||||||
// InitGceDriver returns gcePdDriver that implements TestDriver interface
|
// InitGceDriver returns gcePdDriver that implements TestDriver interface
|
||||||
func InitGcePdDriver() TestDriver {
|
func InitGcePdDriver() testsuites.TestDriver {
|
||||||
return &gcePdDriver{
|
return &gcePdDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "gcepd",
|
Name: "gcepd",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
@ -1141,17 +1142,17 @@ func InitGcePdDriver() TestDriver {
|
|||||||
"xfs",
|
"xfs",
|
||||||
),
|
),
|
||||||
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gcePdDriver) GetDriverInfo() *DriverInfo {
|
func (g *gcePdDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &g.driverInfo
|
return &g.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1201,7 +1202,7 @@ func (g *gcePdDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
|||||||
ns := g.driverInfo.Framework.Namespace.Name
|
ns := g.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", g.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *gcePdDriver) GetClaimSize() string {
|
func (h *gcePdDriver) GetClaimSize() string {
|
||||||
@ -1238,7 +1239,7 @@ func (g *gcePdDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
|||||||
|
|
||||||
// vSphere
|
// vSphere
|
||||||
type vSphereDriver struct {
|
type vSphereDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type vSphereTestResource struct {
|
type vSphereTestResource struct {
|
||||||
@ -1246,31 +1247,31 @@ type vSphereTestResource struct {
|
|||||||
nodeInfo *vspheretest.NodeInfo
|
nodeInfo *vspheretest.NodeInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &vSphereDriver{}
|
var _ testsuites.TestDriver = &vSphereDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &vSphereDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &vSphereDriver{}
|
||||||
var _ InlineVolumeTestDriver = &vSphereDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &vSphereDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &vSphereDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &vSphereDriver{}
|
||||||
var _ DynamicPVTestDriver = &vSphereDriver{}
|
var _ testsuites.DynamicPVTestDriver = &vSphereDriver{}
|
||||||
|
|
||||||
// InitVSphereDriver returns vSphereDriver that implements TestDriver interface
|
// InitVSphereDriver returns vSphereDriver that implements TestDriver interface
|
||||||
func InitVSphereDriver() TestDriver {
|
func InitVSphereDriver() testsuites.TestDriver {
|
||||||
return &vSphereDriver{
|
return &vSphereDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "vSphere",
|
Name: "vSphere",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
"ext4",
|
"ext4",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func (v *vSphereDriver) GetDriverInfo() *DriverInfo {
|
func (v *vSphereDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &v.driverInfo
|
return &v.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1327,7 +1328,7 @@ func (v *vSphereDriver) GetDynamicProvisionStorageClass(fsType string) *storagev
|
|||||||
ns := v.driverInfo.Framework.Namespace.Name
|
ns := v.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", v.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", v.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *vSphereDriver) GetClaimSize() string {
|
func (v *vSphereDriver) GetClaimSize() string {
|
||||||
@ -1361,40 +1362,40 @@ func (v *vSphereDriver) DeleteVolume(volType testpatterns.TestVolType, testResou
|
|||||||
|
|
||||||
// Azure
|
// Azure
|
||||||
type azureDriver struct {
|
type azureDriver struct {
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
type azureTestResource struct {
|
type azureTestResource struct {
|
||||||
volumeName string
|
volumeName string
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &azureDriver{}
|
var _ testsuites.TestDriver = &azureDriver{}
|
||||||
var _ PreprovisionedVolumeTestDriver = &azureDriver{}
|
var _ testsuites.PreprovisionedVolumeTestDriver = &azureDriver{}
|
||||||
var _ InlineVolumeTestDriver = &azureDriver{}
|
var _ testsuites.InlineVolumeTestDriver = &azureDriver{}
|
||||||
var _ PreprovisionedPVTestDriver = &azureDriver{}
|
var _ testsuites.PreprovisionedPVTestDriver = &azureDriver{}
|
||||||
var _ DynamicPVTestDriver = &azureDriver{}
|
var _ testsuites.DynamicPVTestDriver = &azureDriver{}
|
||||||
|
|
||||||
// InitAzureDriver returns azureDriver that implements TestDriver interface
|
// InitAzureDriver returns azureDriver that implements TestDriver interface
|
||||||
func InitAzureDriver() TestDriver {
|
func InitAzureDriver() testsuites.TestDriver {
|
||||||
return &azureDriver{
|
return &azureDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "azure",
|
Name: "azure",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
"", // Default fsType
|
"", // Default fsType
|
||||||
"ext4",
|
"ext4",
|
||||||
),
|
),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *azureDriver) GetDriverInfo() *DriverInfo {
|
func (a *azureDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &a.driverInfo
|
return &a.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1449,7 +1450,7 @@ func (a *azureDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
|||||||
ns := a.driverInfo.Framework.Namespace.Name
|
ns := a.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *azureDriver) GetClaimSize() string {
|
func (a *azureDriver) GetClaimSize() string {
|
||||||
@ -1482,21 +1483,21 @@ func (a *azureDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
|||||||
type awsDriver struct {
|
type awsDriver struct {
|
||||||
volumeName string
|
volumeName string
|
||||||
|
|
||||||
driverInfo DriverInfo
|
driverInfo testsuites.DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ TestDriver = &awsDriver{}
|
var _ testsuites.TestDriver = &awsDriver{}
|
||||||
|
|
||||||
// TODO: Fix authorization error in attach operation and uncomment below
|
// TODO: Fix authorization error in attach operation and uncomment below
|
||||||
//var _ PreprovisionedVolumeTestDriver = &awsDriver{}
|
//var _ testsuites.PreprovisionedVolumeTestDriver = &awsDriver{}
|
||||||
//var _ InlineVolumeTestDriver = &awsDriver{}
|
//var _ testsuites.InlineVolumeTestDriver = &awsDriver{}
|
||||||
//var _ PreprovisionedPVTestDriver = &awsDriver{}
|
//var _ testsuites.PreprovisionedPVTestDriver = &awsDriver{}
|
||||||
var _ DynamicPVTestDriver = &awsDriver{}
|
var _ testsuites.DynamicPVTestDriver = &awsDriver{}
|
||||||
|
|
||||||
// InitAwsDriver returns awsDriver that implements TestDriver interface
|
// InitAwsDriver returns awsDriver that implements TestDriver interface
|
||||||
func InitAwsDriver() TestDriver {
|
func InitAwsDriver() testsuites.TestDriver {
|
||||||
return &awsDriver{
|
return &awsDriver{
|
||||||
driverInfo: DriverInfo{
|
driverInfo: testsuites.DriverInfo{
|
||||||
Name: "aws",
|
Name: "aws",
|
||||||
MaxFileSize: testpatterns.FileSizeMedium,
|
MaxFileSize: testpatterns.FileSizeMedium,
|
||||||
SupportedFsType: sets.NewString(
|
SupportedFsType: sets.NewString(
|
||||||
@ -1504,17 +1505,17 @@ func InitAwsDriver() TestDriver {
|
|||||||
"ext3",
|
"ext3",
|
||||||
),
|
),
|
||||||
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
||||||
Capabilities: map[Capability]bool{
|
Capabilities: map[testsuites.Capability]bool{
|
||||||
CapPersistence: true,
|
testsuites.CapPersistence: true,
|
||||||
CapFsGroup: true,
|
testsuites.CapFsGroup: true,
|
||||||
CapBlock: true,
|
testsuites.CapBlock: true,
|
||||||
CapExec: true,
|
testsuites.CapExec: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *awsDriver) GetDriverInfo() *DriverInfo {
|
func (a *awsDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||||
return &a.driverInfo
|
return &a.driverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1560,7 +1561,7 @@ func (a *awsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St
|
|||||||
ns := a.driverInfo.Framework.Namespace.Name
|
ns := a.driverInfo.Framework.Namespace.Name
|
||||||
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
suffix := fmt.Sprintf("%s-sc", a.driverInfo.Name)
|
||||||
|
|
||||||
return getStorageClass(provisioner, parameters, nil, ns, suffix)
|
return testsuites.GetStorageClass(provisioner, parameters, nil, ns, suffix)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *awsDriver) GetClaimSize() string {
|
func (a *awsDriver) GetClaimSize() string {
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// List of testDrivers to be executed in below loop
|
// List of testDrivers to be executed in below loop
|
||||||
var testDrivers = []func() drivers.TestDriver{
|
var testDrivers = []func() testsuites.TestDriver{
|
||||||
drivers.InitNFSDriver,
|
drivers.InitNFSDriver,
|
||||||
drivers.InitGlusterFSDriver,
|
drivers.InitGlusterFSDriver,
|
||||||
drivers.InitISCSIDriver,
|
drivers.InitISCSIDriver,
|
||||||
@ -75,12 +75,12 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() {
|
|||||||
|
|
||||||
for _, initDriver := range testDrivers {
|
for _, initDriver := range testDrivers {
|
||||||
curDriver := initDriver()
|
curDriver := initDriver()
|
||||||
Context(drivers.GetDriverNameWithFeatureTags(curDriver), func() {
|
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||||
driver := curDriver
|
driver := curDriver
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
// setupDriver
|
// setupDriver
|
||||||
drivers.SetCommonDriverParameters(driver, f, config)
|
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||||
driver.CreateDriver()
|
driver.CreateDriver()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -30,7 +30,6 @@ import (
|
|||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,9 +38,9 @@ type TestSuite interface {
|
|||||||
// getTestSuiteInfo returns the TestSuiteInfo for this TestSuite
|
// getTestSuiteInfo returns the TestSuiteInfo for this TestSuite
|
||||||
getTestSuiteInfo() TestSuiteInfo
|
getTestSuiteInfo() TestSuiteInfo
|
||||||
// skipUnsupportedTest skips the test if this TestSuite is not suitable to be tested with the combination of TestPattern and TestDriver
|
// skipUnsupportedTest skips the test if this TestSuite is not suitable to be tested with the combination of TestPattern and TestDriver
|
||||||
skipUnsupportedTest(testpatterns.TestPattern, drivers.TestDriver)
|
skipUnsupportedTest(testpatterns.TestPattern, TestDriver)
|
||||||
// execTest executes test of the testpattern for the driver
|
// execTest executes test of the testpattern for the driver
|
||||||
execTest(drivers.TestDriver, testpatterns.TestPattern)
|
execTest(TestDriver, testpatterns.TestPattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSuiteInfo represents a set of parameters for TestSuite
|
// TestSuiteInfo represents a set of parameters for TestSuite
|
||||||
@ -55,9 +54,9 @@ type TestSuiteInfo struct {
|
|||||||
type TestResource interface {
|
type TestResource interface {
|
||||||
// setupResource sets up test resources to be used for the tests with the
|
// setupResource sets up test resources to be used for the tests with the
|
||||||
// combination of TestDriver and TestPattern
|
// combination of TestDriver and TestPattern
|
||||||
setupResource(drivers.TestDriver, testpatterns.TestPattern)
|
setupResource(TestDriver, testpatterns.TestPattern)
|
||||||
// cleanupResource clean up the test resources created in SetupResource
|
// cleanupResource clean up the test resources created in SetupResource
|
||||||
cleanupResource(drivers.TestDriver, testpatterns.TestPattern)
|
cleanupResource(TestDriver, testpatterns.TestPattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string {
|
func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string {
|
||||||
@ -66,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 drivers.TestDriver, tsInits []func() TestSuite, tunePatternFunc func([]testpatterns.TestPattern) []testpatterns.TestPattern) {
|
func RunTestSuite(f *framework.Framework, config framework.VolumeTestConfig, 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)
|
||||||
@ -84,18 +83,18 @@ func RunTestSuite(f *framework.Framework, config framework.VolumeTestConfig, dri
|
|||||||
// 2. Check if fsType is supported by driver
|
// 2. Check if fsType is supported by driver
|
||||||
// 3. Check with driver specific logic
|
// 3. Check with driver specific logic
|
||||||
// 4. Check with testSuite specific logic
|
// 4. Check with testSuite specific logic
|
||||||
func skipUnsupportedTest(suite TestSuite, driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func skipUnsupportedTest(suite TestSuite, driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
|
|
||||||
// 1. Check if Whether volType is supported by driver from its interface
|
// 1. Check if Whether volType is supported by driver from its interface
|
||||||
var isSupported bool
|
var isSupported bool
|
||||||
switch pattern.VolType {
|
switch pattern.VolType {
|
||||||
case testpatterns.InlineVolume:
|
case testpatterns.InlineVolume:
|
||||||
_, isSupported = driver.(drivers.InlineVolumeTestDriver)
|
_, isSupported = driver.(InlineVolumeTestDriver)
|
||||||
case testpatterns.PreprovisionedPV:
|
case testpatterns.PreprovisionedPV:
|
||||||
_, isSupported = driver.(drivers.PreprovisionedPVTestDriver)
|
_, isSupported = driver.(PreprovisionedPVTestDriver)
|
||||||
case testpatterns.DynamicPV:
|
case testpatterns.DynamicPV:
|
||||||
_, isSupported = driver.(drivers.DynamicPVTestDriver)
|
_, isSupported = driver.(DynamicPVTestDriver)
|
||||||
default:
|
default:
|
||||||
isSupported = false
|
isSupported = false
|
||||||
}
|
}
|
||||||
@ -121,7 +120,7 @@ func skipUnsupportedTest(suite TestSuite, driver drivers.TestDriver, pattern tes
|
|||||||
// See volume_io.go or volumes.go in test/e2e/storage/testsuites/ for how to use this resource.
|
// See volume_io.go or volumes.go in test/e2e/storage/testsuites/ for how to use this resource.
|
||||||
// Also, see subpath.go in the same directory for how to extend and use it.
|
// Also, see subpath.go in the same directory for how to extend and use it.
|
||||||
type genericVolumeTestResource struct {
|
type genericVolumeTestResource struct {
|
||||||
driver drivers.TestDriver
|
driver TestDriver
|
||||||
volType string
|
volType string
|
||||||
volSource *v1.VolumeSource
|
volSource *v1.VolumeSource
|
||||||
pvc *v1.PersistentVolumeClaim
|
pvc *v1.PersistentVolumeClaim
|
||||||
@ -134,7 +133,7 @@ type genericVolumeTestResource struct {
|
|||||||
var _ TestResource = &genericVolumeTestResource{}
|
var _ TestResource = &genericVolumeTestResource{}
|
||||||
|
|
||||||
// setupResource sets up genericVolumeTestResource
|
// setupResource sets up genericVolumeTestResource
|
||||||
func (r *genericVolumeTestResource) setupResource(driver drivers.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.Framework
|
||||||
@ -143,18 +142,18 @@ func (r *genericVolumeTestResource) setupResource(driver drivers.TestDriver, pat
|
|||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
|
|
||||||
// Create volume for pre-provisioned volume tests
|
// Create volume for pre-provisioned volume tests
|
||||||
r.driverTestResource = drivers.CreateVolume(driver, volType)
|
r.driverTestResource = CreateVolume(driver, volType)
|
||||||
|
|
||||||
switch volType {
|
switch volType {
|
||||||
case testpatterns.InlineVolume:
|
case testpatterns.InlineVolume:
|
||||||
framework.Logf("Creating resource for inline volume")
|
framework.Logf("Creating resource for inline volume")
|
||||||
if iDriver, ok := driver.(drivers.InlineVolumeTestDriver); ok {
|
if iDriver, ok := driver.(InlineVolumeTestDriver); ok {
|
||||||
r.volSource = iDriver.GetVolumeSource(false, fsType, r.driverTestResource)
|
r.volSource = iDriver.GetVolumeSource(false, fsType, r.driverTestResource)
|
||||||
r.volType = dInfo.Name
|
r.volType = dInfo.Name
|
||||||
}
|
}
|
||||||
case testpatterns.PreprovisionedPV:
|
case testpatterns.PreprovisionedPV:
|
||||||
framework.Logf("Creating resource for pre-provisioned PV")
|
framework.Logf("Creating resource for pre-provisioned PV")
|
||||||
if pDriver, ok := driver.(drivers.PreprovisionedPVTestDriver); ok {
|
if pDriver, ok := driver.(PreprovisionedPVTestDriver); ok {
|
||||||
pvSource := pDriver.GetPersistentVolumeSource(false, fsType, r.driverTestResource)
|
pvSource := pDriver.GetPersistentVolumeSource(false, fsType, r.driverTestResource)
|
||||||
if pvSource != nil {
|
if pvSource != nil {
|
||||||
r.volSource, r.pv, r.pvc = createVolumeSourceWithPVCPV(f, dInfo.Name, pvSource, false)
|
r.volSource, r.pv, r.pvc = createVolumeSourceWithPVCPV(f, dInfo.Name, pvSource, false)
|
||||||
@ -163,7 +162,7 @@ func (r *genericVolumeTestResource) setupResource(driver drivers.TestDriver, pat
|
|||||||
}
|
}
|
||||||
case testpatterns.DynamicPV:
|
case testpatterns.DynamicPV:
|
||||||
framework.Logf("Creating resource for dynamic PV")
|
framework.Logf("Creating resource for dynamic PV")
|
||||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||||
claimSize := dDriver.GetClaimSize()
|
claimSize := dDriver.GetClaimSize()
|
||||||
r.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
r.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
||||||
|
|
||||||
@ -188,7 +187,7 @@ func (r *genericVolumeTestResource) setupResource(driver drivers.TestDriver, pat
|
|||||||
}
|
}
|
||||||
|
|
||||||
// cleanupResource cleans up genericVolumeTestResource
|
// cleanupResource cleans up genericVolumeTestResource
|
||||||
func (r *genericVolumeTestResource) cleanupResource(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (r *genericVolumeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Framework
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
@ -222,7 +221,7 @@ func (r *genericVolumeTestResource) cleanupResource(driver drivers.TestDriver, p
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup volume for pre-provisioned volume tests
|
// Cleanup volume for pre-provisioned volume tests
|
||||||
drivers.DeleteVolume(driver, volType, r.driverTestResource)
|
DeleteVolume(driver, volType, r.driverTestResource)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createVolumeSourceWithPVCPV(
|
func createVolumeSourceWithPVCPV(
|
||||||
|
114
test/e2e/storage/testsuites/driveroperations.go
Normal file
114
test/e2e/storage/testsuites/driveroperations.go
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package testsuites
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetDriverNameWithFeatureTags returns driver name with feature tags
|
||||||
|
// For example)
|
||||||
|
// - [Driver: nfs]
|
||||||
|
// - [Driver: rbd][Feature:Volumes]
|
||||||
|
func GetDriverNameWithFeatureTags(driver TestDriver) string {
|
||||||
|
dInfo := driver.GetDriverInfo()
|
||||||
|
|
||||||
|
return fmt.Sprintf("[Driver: %s]%s", dInfo.Name, dInfo.FeatureTag)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateVolume creates volume for test unless dynamicPV test
|
||||||
|
func CreateVolume(driver TestDriver, volType testpatterns.TestVolType) interface{} {
|
||||||
|
switch volType {
|
||||||
|
case testpatterns.InlineVolume:
|
||||||
|
fallthrough
|
||||||
|
case testpatterns.PreprovisionedPV:
|
||||||
|
if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok {
|
||||||
|
return pDriver.CreateVolume(volType)
|
||||||
|
}
|
||||||
|
case testpatterns.DynamicPV:
|
||||||
|
// No need to create volume
|
||||||
|
default:
|
||||||
|
framework.Failf("Invalid volType specified: %v", volType)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVolume deletes volume for test unless dynamicPV test
|
||||||
|
func DeleteVolume(driver TestDriver, volType testpatterns.TestVolType, testResource interface{}) {
|
||||||
|
switch volType {
|
||||||
|
case testpatterns.InlineVolume:
|
||||||
|
fallthrough
|
||||||
|
case testpatterns.PreprovisionedPV:
|
||||||
|
if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok {
|
||||||
|
pDriver.DeleteVolume(volType, testResource)
|
||||||
|
}
|
||||||
|
case testpatterns.DynamicPV:
|
||||||
|
// No need to delete volume
|
||||||
|
default:
|
||||||
|
framework.Failf("Invalid volType specified: %v", volType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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(
|
||||||
|
provisioner string,
|
||||||
|
parameters map[string]string,
|
||||||
|
bindingMode *storagev1.VolumeBindingMode,
|
||||||
|
ns string,
|
||||||
|
suffix string,
|
||||||
|
) *storagev1.StorageClass {
|
||||||
|
if bindingMode == nil {
|
||||||
|
defaultBindingMode := storagev1.VolumeBindingImmediate
|
||||||
|
bindingMode = &defaultBindingMode
|
||||||
|
}
|
||||||
|
return &storagev1.StorageClass{
|
||||||
|
TypeMeta: metav1.TypeMeta{
|
||||||
|
Kind: "StorageClass",
|
||||||
|
},
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
// Name must be unique, so let's base it on namespace name
|
||||||
|
Name: ns + "-" + suffix,
|
||||||
|
},
|
||||||
|
Provisioner: provisioner,
|
||||||
|
Parameters: parameters,
|
||||||
|
VolumeBindingMode: bindingMode,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
}
|
@ -31,7 +31,6 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
)
|
)
|
||||||
@ -74,10 +73,10 @@ func (p *provisioningTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return p.tsInfo
|
return p.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *provisioningTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver drivers.TestDriver) {
|
func (p *provisioningTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createProvisioningTestInput(driver drivers.TestDriver, pattern testpatterns.TestPattern) (provisioningTestResource, provisioningTestInput) {
|
func createProvisioningTestInput(driver TestDriver, pattern testpatterns.TestPattern) (provisioningTestResource, provisioningTestInput) {
|
||||||
// Setup test resource for driver and testpattern
|
// Setup test resource for driver and testpattern
|
||||||
resource := provisioningTestResource{}
|
resource := provisioningTestResource{}
|
||||||
resource.setupResource(driver, pattern)
|
resource.setupResource(driver, pattern)
|
||||||
@ -100,7 +99,7 @@ func createProvisioningTestInput(driver drivers.TestDriver, pattern testpatterns
|
|||||||
return resource, input
|
return resource, input
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *provisioningTestSuite) execTest(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (p *provisioningTestSuite) execTest(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
Context(getTestNameStr(p, pattern), func() {
|
Context(getTestNameStr(p, pattern), func() {
|
||||||
var (
|
var (
|
||||||
resource provisioningTestResource
|
resource provisioningTestResource
|
||||||
@ -132,7 +131,7 @@ func (p *provisioningTestSuite) execTest(driver drivers.TestDriver, pattern test
|
|||||||
}
|
}
|
||||||
|
|
||||||
type provisioningTestResource struct {
|
type provisioningTestResource struct {
|
||||||
driver drivers.TestDriver
|
driver TestDriver
|
||||||
|
|
||||||
claimSize string
|
claimSize string
|
||||||
sc *storage.StorageClass
|
sc *storage.StorageClass
|
||||||
@ -141,11 +140,11 @@ type provisioningTestResource struct {
|
|||||||
|
|
||||||
var _ TestResource = &provisioningTestResource{}
|
var _ TestResource = &provisioningTestResource{}
|
||||||
|
|
||||||
func (p *provisioningTestResource) setupResource(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (p *provisioningTestResource) setupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
// Setup provisioningTest resource
|
// Setup provisioningTest resource
|
||||||
switch pattern.VolType {
|
switch pattern.VolType {
|
||||||
case testpatterns.DynamicPV:
|
case testpatterns.DynamicPV:
|
||||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||||
p.sc = dDriver.GetDynamicProvisionStorageClass("")
|
p.sc = dDriver.GetDynamicProvisionStorageClass("")
|
||||||
if p.sc == nil {
|
if p.sc == nil {
|
||||||
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", driver.GetDriverInfo().Name)
|
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", driver.GetDriverInfo().Name)
|
||||||
@ -161,7 +160,7 @@ func (p *provisioningTestResource) setupResource(driver drivers.TestDriver, patt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *provisioningTestResource) cleanupResource(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (p *provisioningTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type provisioningTestInput struct {
|
type provisioningTestInput struct {
|
||||||
@ -169,7 +168,7 @@ type provisioningTestInput struct {
|
|||||||
cs clientset.Interface
|
cs clientset.Interface
|
||||||
pvc *v1.PersistentVolumeClaim
|
pvc *v1.PersistentVolumeClaim
|
||||||
sc *storage.StorageClass
|
sc *storage.StorageClass
|
||||||
dInfo *drivers.DriverInfo
|
dInfo *DriverInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func testProvisioning(input *provisioningTestInput) {
|
func testProvisioning(input *provisioningTestInput) {
|
||||||
@ -187,7 +186,7 @@ func testProvisioning(input *provisioningTestInput) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
It("should create and delete block persistent volumes", func() {
|
It("should create and delete block persistent volumes", func() {
|
||||||
if !input.dInfo.Capabilities[drivers.CapBlock] {
|
if !input.dInfo.Capabilities[CapBlock] {
|
||||||
framework.Skipf("Driver %q does not support BlockVolume - skipping", input.dInfo.Name)
|
framework.Skipf("Driver %q does not support BlockVolume - skipping", input.dInfo.Name)
|
||||||
}
|
}
|
||||||
block := v1.PersistentVolumeBlock
|
block := v1.PersistentVolumeBlock
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/rand"
|
"k8s.io/apimachinery/pkg/util/rand"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
@ -72,7 +71,7 @@ func (s *subPathTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return s.tsInfo
|
return s.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *subPathTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver drivers.TestDriver) {
|
func (s *subPathTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTestResource) subPathTestInput {
|
func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTestResource) subPathTestInput {
|
||||||
@ -95,7 +94,7 @@ func createSubPathTestInput(pattern testpatterns.TestPattern, resource subPathTe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *subPathTestSuite) execTest(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (s *subPathTestSuite) execTest(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
Context(getTestNameStr(s, pattern), func() {
|
Context(getTestNameStr(s, pattern), func() {
|
||||||
var (
|
var (
|
||||||
resource subPathTestResource
|
resource subPathTestResource
|
||||||
@ -137,7 +136,7 @@ type subPathTestResource struct {
|
|||||||
|
|
||||||
var _ TestResource = &subPathTestResource{}
|
var _ TestResource = &subPathTestResource{}
|
||||||
|
|
||||||
func (s *subPathTestResource) setupResource(driver drivers.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.Framework
|
||||||
@ -150,7 +149,7 @@ func (s *subPathTestResource) setupResource(driver drivers.TestDriver, pattern t
|
|||||||
// Setup subPath test dependent resource
|
// Setup subPath test dependent resource
|
||||||
switch volType {
|
switch volType {
|
||||||
case testpatterns.InlineVolume:
|
case testpatterns.InlineVolume:
|
||||||
if iDriver, ok := driver.(drivers.InlineVolumeTestDriver); ok {
|
if iDriver, ok := driver.(InlineVolumeTestDriver); ok {
|
||||||
s.roVolSource = iDriver.GetVolumeSource(true, fsType, s.genericVolumeTestResource.driverTestResource)
|
s.roVolSource = iDriver.GetVolumeSource(true, fsType, s.genericVolumeTestResource.driverTestResource)
|
||||||
}
|
}
|
||||||
case testpatterns.PreprovisionedPV:
|
case testpatterns.PreprovisionedPV:
|
||||||
@ -182,7 +181,7 @@ func (s *subPathTestResource) setupResource(driver drivers.TestDriver, pattern t
|
|||||||
s.formatPod.Spec.NodeSelector = config.NodeSelector
|
s.formatPod.Spec.NodeSelector = config.NodeSelector
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *subPathTestResource) cleanupResource(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (s *subPathTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Framework
|
||||||
|
|
||||||
|
@ -14,14 +14,11 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package drivers
|
package testsuites
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
@ -108,89 +105,3 @@ type DriverInfo struct {
|
|||||||
Framework *framework.Framework // Framework for the test
|
Framework *framework.Framework // Framework for the test
|
||||||
Config framework.VolumeTestConfig // VolumeTestConfig for thet test
|
Config framework.VolumeTestConfig // VolumeTestConfig for thet test
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetDriverNameWithFeatureTags returns driver name with feature tags
|
|
||||||
// For example)
|
|
||||||
// - [Driver: nfs]
|
|
||||||
// - [Driver: rbd][Feature:Volumes]
|
|
||||||
func GetDriverNameWithFeatureTags(driver TestDriver) string {
|
|
||||||
dInfo := driver.GetDriverInfo()
|
|
||||||
|
|
||||||
return fmt.Sprintf("[Driver: %s]%s", dInfo.Name, dInfo.FeatureTag)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateVolume creates volume for test unless dynamicPV test
|
|
||||||
func CreateVolume(driver TestDriver, volType testpatterns.TestVolType) interface{} {
|
|
||||||
switch volType {
|
|
||||||
case testpatterns.InlineVolume:
|
|
||||||
fallthrough
|
|
||||||
case testpatterns.PreprovisionedPV:
|
|
||||||
if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok {
|
|
||||||
return pDriver.CreateVolume(volType)
|
|
||||||
}
|
|
||||||
case testpatterns.DynamicPV:
|
|
||||||
// No need to create volume
|
|
||||||
default:
|
|
||||||
framework.Failf("Invalid volType specified: %v", volType)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteVolume deletes volume for test unless dynamicPV test
|
|
||||||
func DeleteVolume(driver TestDriver, volType testpatterns.TestVolType, testResource interface{}) {
|
|
||||||
switch volType {
|
|
||||||
case testpatterns.InlineVolume:
|
|
||||||
fallthrough
|
|
||||||
case testpatterns.PreprovisionedPV:
|
|
||||||
if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok {
|
|
||||||
pDriver.DeleteVolume(volType, testResource)
|
|
||||||
}
|
|
||||||
case testpatterns.DynamicPV:
|
|
||||||
// No need to delete volume
|
|
||||||
default:
|
|
||||||
framework.Failf("Invalid volType specified: %v", volType)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
|
||||||
|
|
||||||
func getStorageClass(
|
|
||||||
provisioner string,
|
|
||||||
parameters map[string]string,
|
|
||||||
bindingMode *storagev1.VolumeBindingMode,
|
|
||||||
ns string,
|
|
||||||
suffix string,
|
|
||||||
) *storagev1.StorageClass {
|
|
||||||
if bindingMode == nil {
|
|
||||||
defaultBindingMode := storagev1.VolumeBindingImmediate
|
|
||||||
bindingMode = &defaultBindingMode
|
|
||||||
}
|
|
||||||
return &storagev1.StorageClass{
|
|
||||||
TypeMeta: metav1.TypeMeta{
|
|
||||||
Kind: "StorageClass",
|
|
||||||
},
|
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
|
||||||
// Name must be unique, so let's base it on namespace name
|
|
||||||
Name: ns + "-" + suffix,
|
|
||||||
},
|
|
||||||
Provisioner: provisioner,
|
|
||||||
Parameters: parameters,
|
|
||||||
VolumeBindingMode: bindingMode,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
}
|
|
@ -35,7 +35,6 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||||
)
|
)
|
||||||
@ -75,7 +74,7 @@ func (t *volumeIOTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumeIOTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver drivers.TestDriver) {
|
func (t *volumeIOTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericVolumeTestResource) volumeIOTestInput {
|
func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericVolumeTestResource) volumeIOTestInput {
|
||||||
@ -90,7 +89,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV
|
|||||||
framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if dInfo.Capabilities[drivers.CapFsGroup] {
|
if dInfo.Capabilities[CapFsGroup] {
|
||||||
fsGroupVal := int64(1234)
|
fsGroupVal := int64(1234)
|
||||||
fsGroup = &fsGroupVal
|
fsGroup = &fsGroupVal
|
||||||
}
|
}
|
||||||
@ -108,7 +107,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumeIOTestSuite) execTest(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (t *volumeIOTestSuite) execTest(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
Context(getTestNameStr(t, pattern), func() {
|
Context(getTestNameStr(t, pattern), func() {
|
||||||
var (
|
var (
|
||||||
resource genericVolumeTestResource
|
resource genericVolumeTestResource
|
||||||
|
@ -27,7 +27,6 @@ import (
|
|||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||||
)
|
)
|
||||||
@ -62,7 +61,7 @@ func (t *volumeModeTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumeModeTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver drivers.TestDriver) {
|
func (t *volumeModeTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volumeModeTestResource) volumeModeTestInput {
|
func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volumeModeTestResource) volumeModeTestInput {
|
||||||
@ -78,13 +77,13 @@ func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volume
|
|||||||
testVolType: pattern.VolType,
|
testVolType: pattern.VolType,
|
||||||
nodeName: dInfo.Config.ClientNodeName,
|
nodeName: dInfo.Config.ClientNodeName,
|
||||||
volMode: pattern.VolMode,
|
volMode: pattern.VolMode,
|
||||||
isBlockSupported: dInfo.Capabilities[drivers.CapBlock],
|
isBlockSupported: dInfo.Capabilities[CapBlock],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVolumeModeTestFunc(pattern testpatterns.TestPattern, driver drivers.TestDriver) func(*volumeModeTestInput) {
|
func getVolumeModeTestFunc(pattern testpatterns.TestPattern, driver TestDriver) func(*volumeModeTestInput) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
isBlockSupported := dInfo.Capabilities[drivers.CapBlock]
|
isBlockSupported := dInfo.Capabilities[CapBlock]
|
||||||
volMode := pattern.VolMode
|
volMode := pattern.VolMode
|
||||||
volType := pattern.VolType
|
volType := pattern.VolType
|
||||||
|
|
||||||
@ -105,7 +104,7 @@ func getVolumeModeTestFunc(pattern testpatterns.TestPattern, driver drivers.Test
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumeModeTestSuite) execTest(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (t *volumeModeTestSuite) execTest(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
Context(getTestNameStr(t, pattern), func() {
|
Context(getTestNameStr(t, pattern), func() {
|
||||||
var (
|
var (
|
||||||
resource volumeModeTestResource
|
resource volumeModeTestResource
|
||||||
@ -141,7 +140,7 @@ func (t *volumeModeTestSuite) execTest(driver drivers.TestDriver, pattern testpa
|
|||||||
}
|
}
|
||||||
|
|
||||||
type volumeModeTestResource struct {
|
type volumeModeTestResource struct {
|
||||||
driver drivers.TestDriver
|
driver TestDriver
|
||||||
|
|
||||||
sc *storagev1.StorageClass
|
sc *storagev1.StorageClass
|
||||||
pvc *v1.PersistentVolumeClaim
|
pvc *v1.PersistentVolumeClaim
|
||||||
@ -152,7 +151,7 @@ type volumeModeTestResource struct {
|
|||||||
|
|
||||||
var _ TestResource = &volumeModeTestResource{}
|
var _ TestResource = &volumeModeTestResource{}
|
||||||
|
|
||||||
func (s *volumeModeTestResource) setupResource(driver drivers.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.Framework
|
||||||
@ -168,7 +167,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Create volume for pre-provisioned volume tests
|
// Create volume for pre-provisioned volume tests
|
||||||
s.driverTestResource = drivers.CreateVolume(driver, volType)
|
s.driverTestResource = CreateVolume(driver, volType)
|
||||||
|
|
||||||
switch volType {
|
switch volType {
|
||||||
case testpatterns.PreprovisionedPV:
|
case testpatterns.PreprovisionedPV:
|
||||||
@ -177,7 +176,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
|||||||
} else if volMode == v1.PersistentVolumeFilesystem {
|
} else if volMode == v1.PersistentVolumeFilesystem {
|
||||||
scName = fmt.Sprintf("%s-%s-sc-for-file", ns.Name, dInfo.Name)
|
scName = fmt.Sprintf("%s-%s-sc-for-file", ns.Name, dInfo.Name)
|
||||||
}
|
}
|
||||||
if pDriver, ok := driver.(drivers.PreprovisionedPVTestDriver); ok {
|
if pDriver, ok := driver.(PreprovisionedPVTestDriver); ok {
|
||||||
pvSource = pDriver.GetPersistentVolumeSource(false, fsType, s.driverTestResource)
|
pvSource = pDriver.GetPersistentVolumeSource(false, fsType, s.driverTestResource)
|
||||||
if pvSource == nil {
|
if pvSource == nil {
|
||||||
framework.Skipf("Driver %q does not define PersistentVolumeSource - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not define PersistentVolumeSource - skipping", dInfo.Name)
|
||||||
@ -189,7 +188,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
|||||||
s.pvc = framework.MakePersistentVolumeClaim(pvcConfig, ns.Name)
|
s.pvc = framework.MakePersistentVolumeClaim(pvcConfig, ns.Name)
|
||||||
}
|
}
|
||||||
case testpatterns.DynamicPV:
|
case testpatterns.DynamicPV:
|
||||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||||
s.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
s.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
||||||
if s.sc == nil {
|
if s.sc == nil {
|
||||||
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", dInfo.Name)
|
||||||
@ -206,7 +205,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *volumeModeTestResource) cleanupResource(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (s *volumeModeTestResource) cleanupResource(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
f := dInfo.Framework
|
f := dInfo.Framework
|
||||||
cs := f.ClientSet
|
cs := f.ClientSet
|
||||||
@ -224,7 +223,7 @@ func (s *volumeModeTestResource) cleanupResource(driver drivers.TestDriver, patt
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup volume for pre-provisioned volume tests
|
// Cleanup volume for pre-provisioned volume tests
|
||||||
drivers.DeleteVolume(driver, volType, s.driverTestResource)
|
DeleteVolume(driver, volType, s.driverTestResource)
|
||||||
}
|
}
|
||||||
|
|
||||||
type volumeModeTestInput struct {
|
type volumeModeTestInput struct {
|
||||||
|
@ -31,7 +31,6 @@ import (
|
|||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/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/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||||
)
|
)
|
||||||
@ -73,19 +72,19 @@ func (t *volumesTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumesTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver drivers.TestDriver) {
|
func (t *volumesTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func skipPersistenceTest(driver drivers.TestDriver) {
|
func skipPersistenceTest(driver TestDriver) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
if !dInfo.Capabilities[drivers.CapPersistence] {
|
if !dInfo.Capabilities[CapPersistence] {
|
||||||
framework.Skipf("Driver %q does not provide persistency - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not provide persistency - skipping", dInfo.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func skipExecTest(driver drivers.TestDriver) {
|
func skipExecTest(driver TestDriver) {
|
||||||
dInfo := driver.GetDriverInfo()
|
dInfo := driver.GetDriverInfo()
|
||||||
if !dInfo.Capabilities[drivers.CapExec] {
|
if !dInfo.Capabilities[CapExec] {
|
||||||
framework.Skipf("Driver %q does not support exec - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not support exec - skipping", dInfo.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -101,7 +100,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo
|
|||||||
framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name)
|
framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if dInfo.Capabilities[drivers.CapFsGroup] {
|
if dInfo.Capabilities[CapFsGroup] {
|
||||||
fsGroupVal := int64(1234)
|
fsGroupVal := int64(1234)
|
||||||
fsGroup = &fsGroupVal
|
fsGroup = &fsGroupVal
|
||||||
}
|
}
|
||||||
@ -124,7 +123,7 @@ func createVolumesTestInput(pattern testpatterns.TestPattern, resource genericVo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumesTestSuite) execTest(driver drivers.TestDriver, pattern testpatterns.TestPattern) {
|
func (t *volumesTestSuite) execTest(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
Context(getTestNameStr(t, pattern), func() {
|
Context(getTestNameStr(t, pattern), func() {
|
||||||
var (
|
var (
|
||||||
resource genericVolumeTestResource
|
resource genericVolumeTestResource
|
||||||
|
Loading…
Reference in New Issue
Block a user