mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +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
|
||||
var csiTestDrivers = []func() drivers.TestDriver{
|
||||
var csiTestDrivers = []func() testsuites.TestDriver{
|
||||
drivers.InitHostPathCSIDriver,
|
||||
drivers.InitGcePDCSIDriver,
|
||||
drivers.InitGcePDExternalCSIDriver,
|
||||
@ -126,12 +126,12 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
||||
|
||||
for _, initDriver := range csiTestDrivers {
|
||||
curDriver := initDriver()
|
||||
Context(drivers.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||
driver := curDriver
|
||||
|
||||
BeforeEach(func() {
|
||||
// setupDriver
|
||||
drivers.SetCommonDriverParameters(driver, f, config)
|
||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||
driver.CreateDriver()
|
||||
})
|
||||
|
||||
@ -149,14 +149,14 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
||||
var (
|
||||
cs clientset.Interface
|
||||
csics csiclient.Interface
|
||||
driver drivers.TestDriver
|
||||
driver testsuites.TestDriver
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
cs = f.ClientSet
|
||||
csics = f.CSIClientSet
|
||||
driver = drivers.InitHostPathCSIDriver()
|
||||
drivers.SetCommonDriverParameters(driver, f, config)
|
||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||
driver.CreateDriver()
|
||||
})
|
||||
|
||||
@ -193,7 +193,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
||||
test := t
|
||||
It(test.name, func() {
|
||||
if test.driverExists {
|
||||
csiDriver := createCSIDriver(csics, drivers.GetUniqueDriverName(driver), test.driverAttachable)
|
||||
csiDriver := createCSIDriver(csics, testsuites.GetUniqueDriverName(driver), test.driverAttachable)
|
||||
if csiDriver != nil {
|
||||
defer csics.CsiV1alpha1().CSIDrivers().Delete(csiDriver.Name, nil)
|
||||
}
|
||||
@ -201,7 +201,7 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
|
||||
|
||||
By("Creating pod")
|
||||
var sc *storagev1.StorageClass
|
||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
||||
if dDriver, ok := driver.(testsuites.DynamicPVTestDriver); ok {
|
||||
sc = dDriver.GetDynamicProvisionStorageClass("")
|
||||
}
|
||||
nodeName := driver.GetDriverInfo().Config.ClientNodeName
|
||||
|
@ -44,38 +44,39 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testsuites"
|
||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||
)
|
||||
|
||||
// hostpathCSI
|
||||
type hostpathCSIDriver struct {
|
||||
cleanup func()
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
manifests []string
|
||||
}
|
||||
|
||||
func initHostPathCSIDriver(name string, manifests ...string) TestDriver {
|
||||
func initHostPathCSIDriver(name string, manifests ...string) testsuites.TestDriver {
|
||||
return &hostpathCSIDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: name,
|
||||
FeatureTag: "",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
},
|
||||
},
|
||||
manifests: manifests,
|
||||
}
|
||||
}
|
||||
|
||||
var _ TestDriver = &hostpathCSIDriver{}
|
||||
var _ DynamicPVTestDriver = &hostpathCSIDriver{}
|
||||
var _ testsuites.TestDriver = &hostpathCSIDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &hostpathCSIDriver{}
|
||||
|
||||
// InitHostPathCSIDriver returns hostpathCSIDriver that implements TestDriver interface
|
||||
func InitHostPathCSIDriver() TestDriver {
|
||||
func InitHostPathCSIDriver() testsuites.TestDriver {
|
||||
return initHostPathCSIDriver("csi-hostpath",
|
||||
"test/e2e/testing-manifests/storage-csi/driver-registrar/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
|
||||
}
|
||||
|
||||
@ -95,12 +96,12 @@ func (h *hostpathCSIDriver) SkipUnsupportedTest(pattern testpatterns.TestPattern
|
||||
}
|
||||
|
||||
func (h *hostpathCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass {
|
||||
provisioner := GetUniqueDriverName(h)
|
||||
provisioner := testsuites.GetUniqueDriverName(h)
|
||||
parameters := map[string]string{}
|
||||
ns := h.driverInfo.Framework.Namespace.Name
|
||||
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 {
|
||||
@ -122,7 +123,7 @@ func (h *hostpathCSIDriver) CreateDriver() {
|
||||
// settings are ignored for this test. We could patch the image definitions.
|
||||
o := utils.PatchCSIOptions{
|
||||
OldDriverName: h.driverInfo.Name,
|
||||
NewDriverName: GetUniqueDriverName(h),
|
||||
NewDriverName: testsuites.GetUniqueDriverName(h),
|
||||
DriverContainerName: "hostpath",
|
||||
ProvisionerContainerName: "csi-provisioner",
|
||||
NodeName: h.driverInfo.Config.ServerNodeName,
|
||||
@ -145,7 +146,7 @@ func (h *hostpathCSIDriver) CleanupDriver() {
|
||||
}
|
||||
|
||||
// InitHostPathV0CSIDriver returns a variant of hostpathCSIDriver with different manifests.
|
||||
func InitHostPathV0CSIDriver() TestDriver {
|
||||
func InitHostPathV0CSIDriver() testsuites.TestDriver {
|
||||
return initHostPathCSIDriver("csi-hostpath-v0",
|
||||
"test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml",
|
||||
"test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml",
|
||||
@ -160,16 +161,16 @@ func InitHostPathV0CSIDriver() TestDriver {
|
||||
// gce-pd
|
||||
type gcePDCSIDriver struct {
|
||||
cleanup func()
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &gcePDCSIDriver{}
|
||||
var _ DynamicPVTestDriver = &gcePDCSIDriver{}
|
||||
var _ testsuites.TestDriver = &gcePDCSIDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &gcePDCSIDriver{}
|
||||
|
||||
// InitGcePDCSIDriver returns gcePDCSIDriver that implements TestDriver interface
|
||||
func InitGcePDCSIDriver() TestDriver {
|
||||
func InitGcePDCSIDriver() testsuites.TestDriver {
|
||||
return &gcePDCSIDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "pd.csi.storage.gke.io",
|
||||
FeatureTag: "[Serial]",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
@ -180,16 +181,16 @@ func InitGcePDCSIDriver() TestDriver {
|
||||
"ext4",
|
||||
"xfs",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (g *gcePDCSIDriver) GetDriverInfo() *DriverInfo {
|
||||
func (g *gcePDCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &g.driverInfo
|
||||
}
|
||||
|
||||
@ -206,7 +207,7 @@ func (g *gcePDCSIDriver) GetDynamicProvisionStorageClass(fsType string) *storage
|
||||
|
||||
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 {
|
||||
@ -223,7 +224,7 @@ func (g *gcePDCSIDriver) CreateDriver() {
|
||||
// These are the options which would have to be used:
|
||||
// o := utils.PatchCSIOptions{
|
||||
// OldDriverName: g.driverInfo.Name,
|
||||
// NewDriverName: GetUniqueDriverName(g),
|
||||
// NewDriverName: testsuites.GetUniqueDriverName(g),
|
||||
// DriverContainerName: "gce-driver",
|
||||
// ProvisionerContainerName: "csi-external-provisioner",
|
||||
// }
|
||||
@ -252,17 +253,18 @@ func (g *gcePDCSIDriver) CleanupDriver() {
|
||||
|
||||
// gcePd-external
|
||||
type gcePDExternalCSIDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &gcePDExternalCSIDriver{}
|
||||
var _ DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
||||
var _ testsuites.TestDriver = &gcePDExternalCSIDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &gcePDExternalCSIDriver{}
|
||||
|
||||
// InitGcePDExternalCSIDriver returns gcePDExternalCSIDriver that implements TestDriver interface
|
||||
func InitGcePDExternalCSIDriver() TestDriver {
|
||||
func InitGcePDExternalCSIDriver() testsuites.TestDriver {
|
||||
return &gcePDExternalCSIDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "pd.csi.storage.gke.io",
|
||||
|
||||
// TODO(#70258): this is temporary until we can figure out how to make e2e tests a library
|
||||
FeatureTag: "[Feature: gcePD-external]",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
@ -273,16 +275,16 @@ func InitGcePDExternalCSIDriver() TestDriver {
|
||||
"ext4",
|
||||
"xfs",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (g *gcePDExternalCSIDriver) GetDriverInfo() *DriverInfo {
|
||||
func (g *gcePDExternalCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &g.driverInfo
|
||||
}
|
||||
|
||||
@ -298,7 +300,7 @@ func (g *gcePDExternalCSIDriver) GetDynamicProvisionStorageClass(fsType string)
|
||||
|
||||
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 {
|
||||
|
@ -55,6 +55,7 @@ import (
|
||||
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testsuites"
|
||||
"k8s.io/kubernetes/test/e2e/storage/utils"
|
||||
vspheretest "k8s.io/kubernetes/test/e2e/storage/vsphere"
|
||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||
@ -65,7 +66,7 @@ type nfsDriver struct {
|
||||
externalProvisionerPod *v1.Pod
|
||||
externalPluginName string
|
||||
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type nfsTestResource struct {
|
||||
@ -73,16 +74,16 @@ type nfsTestResource struct {
|
||||
serverPod *v1.Pod
|
||||
}
|
||||
|
||||
var _ TestDriver = &nfsDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &nfsDriver{}
|
||||
var _ InlineVolumeTestDriver = &nfsDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &nfsDriver{}
|
||||
var _ DynamicPVTestDriver = &nfsDriver{}
|
||||
var _ testsuites.TestDriver = &nfsDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &nfsDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &nfsDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &nfsDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &nfsDriver{}
|
||||
|
||||
// InitNFSDriver returns nfsDriver that implements TestDriver interface
|
||||
func InitNFSDriver() TestDriver {
|
||||
func InitNFSDriver() testsuites.TestDriver {
|
||||
return &nfsDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "nfs",
|
||||
MaxFileSize: testpatterns.FileSizeLarge,
|
||||
SupportedFsType: sets.NewString(
|
||||
@ -90,15 +91,15 @@ func InitNFSDriver() TestDriver {
|
||||
),
|
||||
SupportedMountOption: sets.NewString("proto=tcp", "relatime"),
|
||||
RequiredMountOption: sets.NewString("vers=4.1"),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (n *nfsDriver) GetDriverInfo() *DriverInfo {
|
||||
func (n *nfsDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &n.driverInfo
|
||||
}
|
||||
|
||||
@ -135,7 +136,7 @@ func (n *nfsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St
|
||||
ns := n.driverInfo.Framework.Namespace.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 {
|
||||
@ -218,7 +219,7 @@ func (n *nfsDriver) DeleteVolume(volType testpatterns.TestVolType, testResource
|
||||
|
||||
// Gluster
|
||||
type glusterFSDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type glusterTestResource struct {
|
||||
@ -226,29 +227,29 @@ type glusterTestResource struct {
|
||||
serverPod *v1.Pod
|
||||
}
|
||||
|
||||
var _ TestDriver = &glusterFSDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &glusterFSDriver{}
|
||||
var _ InlineVolumeTestDriver = &glusterFSDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &glusterFSDriver{}
|
||||
var _ testsuites.TestDriver = &glusterFSDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &glusterFSDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &glusterFSDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &glusterFSDriver{}
|
||||
|
||||
// InitGlusterFSDriver returns glusterFSDriver that implements TestDriver interface
|
||||
func InitGlusterFSDriver() TestDriver {
|
||||
func InitGlusterFSDriver() testsuites.TestDriver {
|
||||
return &glusterFSDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "gluster",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (g *glusterFSDriver) GetDriverInfo() *DriverInfo {
|
||||
func (g *glusterFSDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &g.driverInfo
|
||||
}
|
||||
|
||||
@ -336,22 +337,22 @@ func (g *glusterFSDriver) DeleteVolume(volType testpatterns.TestVolType, testRes
|
||||
// iSCSI
|
||||
// The iscsiadm utility and iscsi target kernel modules must be installed on all nodes.
|
||||
type iSCSIDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
type iSCSITestResource struct {
|
||||
serverPod *v1.Pod
|
||||
serverIP string
|
||||
}
|
||||
|
||||
var _ TestDriver = &iSCSIDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &iSCSIDriver{}
|
||||
var _ InlineVolumeTestDriver = &iSCSIDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &iSCSIDriver{}
|
||||
var _ testsuites.TestDriver = &iSCSIDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &iSCSIDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &iSCSIDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &iSCSIDriver{}
|
||||
|
||||
// InitISCSIDriver returns iSCSIDriver that implements TestDriver interface
|
||||
func InitISCSIDriver() TestDriver {
|
||||
func InitISCSIDriver() testsuites.TestDriver {
|
||||
return &iSCSIDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "iscsi",
|
||||
FeatureTag: "[Feature:Volumes]",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
@ -362,17 +363,17 @@ func InitISCSIDriver() TestDriver {
|
||||
//"ext3",
|
||||
"ext4",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapBlock: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapBlock: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (i *iSCSIDriver) GetDriverInfo() *DriverInfo {
|
||||
func (i *iSCSIDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &i.driverInfo
|
||||
}
|
||||
|
||||
@ -446,7 +447,7 @@ func (i *iSCSIDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
||||
|
||||
// Ceph RBD
|
||||
type rbdDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type rbdTestResource struct {
|
||||
@ -455,15 +456,15 @@ type rbdTestResource struct {
|
||||
secret *v1.Secret
|
||||
}
|
||||
|
||||
var _ TestDriver = &rbdDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &rbdDriver{}
|
||||
var _ InlineVolumeTestDriver = &rbdDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &rbdDriver{}
|
||||
var _ testsuites.TestDriver = &rbdDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &rbdDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &rbdDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &rbdDriver{}
|
||||
|
||||
// InitRbdDriver returns rbdDriver that implements TestDriver interface
|
||||
func InitRbdDriver() TestDriver {
|
||||
func InitRbdDriver() testsuites.TestDriver {
|
||||
return &rbdDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "rbd",
|
||||
FeatureTag: "[Feature:Volumes]",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
@ -474,17 +475,17 @@ func InitRbdDriver() TestDriver {
|
||||
//"ext3",
|
||||
"ext4",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapBlock: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapBlock: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (r *rbdDriver) GetDriverInfo() *DriverInfo {
|
||||
func (r *rbdDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &r.driverInfo
|
||||
}
|
||||
|
||||
@ -574,7 +575,7 @@ type cephFSDriver struct {
|
||||
serverPod *v1.Pod
|
||||
secret *v1.Secret
|
||||
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type cephTestResource struct {
|
||||
@ -583,30 +584,30 @@ type cephTestResource struct {
|
||||
secret *v1.Secret
|
||||
}
|
||||
|
||||
var _ TestDriver = &cephFSDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &cephFSDriver{}
|
||||
var _ InlineVolumeTestDriver = &cephFSDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &cephFSDriver{}
|
||||
var _ testsuites.TestDriver = &cephFSDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &cephFSDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &cephFSDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &cephFSDriver{}
|
||||
|
||||
// InitCephFSDriver returns cephFSDriver that implements TestDriver interface
|
||||
func InitCephFSDriver() TestDriver {
|
||||
func InitCephFSDriver() testsuites.TestDriver {
|
||||
return &cephFSDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "ceph",
|
||||
FeatureTag: "[Feature:Volumes]",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *cephFSDriver) GetDriverInfo() *DriverInfo {
|
||||
func (c *cephFSDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &c.driverInfo
|
||||
}
|
||||
|
||||
@ -682,30 +683,30 @@ func (c *cephFSDriver) DeleteVolume(volType testpatterns.TestVolType, testResour
|
||||
type hostPathDriver struct {
|
||||
node v1.Node
|
||||
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &hostPathDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &hostPathDriver{}
|
||||
var _ InlineVolumeTestDriver = &hostPathDriver{}
|
||||
var _ testsuites.TestDriver = &hostPathDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &hostPathDriver{}
|
||||
|
||||
// InitHostPathDriver returns hostPathDriver that implements TestDriver interface
|
||||
func InitHostPathDriver() TestDriver {
|
||||
func InitHostPathDriver() testsuites.TestDriver {
|
||||
return &hostPathDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "hostPath",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (h *hostPathDriver) GetDriverInfo() *DriverInfo {
|
||||
func (h *hostPathDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &h.driverInfo
|
||||
}
|
||||
|
||||
@ -748,7 +749,7 @@ func (h *hostPathDriver) DeleteVolume(volType testpatterns.TestVolType, testReso
|
||||
type hostPathSymlinkDriver struct {
|
||||
node v1.Node
|
||||
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type hostPathSymlinkTestResource struct {
|
||||
@ -757,27 +758,27 @@ type hostPathSymlinkTestResource struct {
|
||||
prepPod *v1.Pod
|
||||
}
|
||||
|
||||
var _ TestDriver = &hostPathSymlinkDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||
var _ InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||
var _ testsuites.TestDriver = &hostPathSymlinkDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &hostPathSymlinkDriver{}
|
||||
|
||||
// InitHostPathSymlinkDriver returns hostPathSymlinkDriver that implements TestDriver interface
|
||||
func InitHostPathSymlinkDriver() TestDriver {
|
||||
func InitHostPathSymlinkDriver() testsuites.TestDriver {
|
||||
return &hostPathSymlinkDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "hostPathSymlink",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (h *hostPathSymlinkDriver) GetDriverInfo() *DriverInfo {
|
||||
func (h *hostPathSymlinkDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &h.driverInfo
|
||||
}
|
||||
|
||||
@ -894,30 +895,30 @@ func (h *hostPathSymlinkDriver) DeleteVolume(volType testpatterns.TestVolType, t
|
||||
|
||||
// emptydir
|
||||
type emptydirDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &emptydirDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &emptydirDriver{}
|
||||
var _ InlineVolumeTestDriver = &emptydirDriver{}
|
||||
var _ testsuites.TestDriver = &emptydirDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &emptydirDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &emptydirDriver{}
|
||||
|
||||
// InitEmptydirDriver returns emptydirDriver that implements TestDriver interface
|
||||
func InitEmptydirDriver() TestDriver {
|
||||
func InitEmptydirDriver() testsuites.TestDriver {
|
||||
return &emptydirDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "emptydir",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (e *emptydirDriver) GetDriverInfo() *DriverInfo {
|
||||
func (e *emptydirDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &e.driverInfo
|
||||
}
|
||||
|
||||
@ -953,7 +954,7 @@ func (e *emptydirDriver) CleanupDriver() {
|
||||
// and that the usual OpenStack authentication env. variables are set
|
||||
// (OS_USERNAME, OS_PASSWORD, OS_TENANT_NAME at least).
|
||||
type cinderDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type cinderTestResource struct {
|
||||
@ -961,32 +962,32 @@ type cinderTestResource struct {
|
||||
volumeID string
|
||||
}
|
||||
|
||||
var _ TestDriver = &cinderDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &cinderDriver{}
|
||||
var _ InlineVolumeTestDriver = &cinderDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &cinderDriver{}
|
||||
var _ DynamicPVTestDriver = &cinderDriver{}
|
||||
var _ testsuites.TestDriver = &cinderDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &cinderDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &cinderDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &cinderDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &cinderDriver{}
|
||||
|
||||
// InitCinderDriver returns cinderDriver that implements TestDriver interface
|
||||
func InitCinderDriver() TestDriver {
|
||||
func InitCinderDriver() testsuites.TestDriver {
|
||||
return &cinderDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "cinder",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
"ext3",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *cinderDriver) GetDriverInfo() *DriverInfo {
|
||||
func (c *cinderDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &c.driverInfo
|
||||
}
|
||||
|
||||
@ -1035,7 +1036,7 @@ func (c *cinderDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1
|
||||
ns := c.driverInfo.Framework.Namespace.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 {
|
||||
@ -1114,23 +1115,23 @@ func deleteCinderVolume(name string) error {
|
||||
|
||||
// GCE
|
||||
type gcePdDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type gcePdTestResource struct {
|
||||
volumeName string
|
||||
}
|
||||
|
||||
var _ TestDriver = &gcePdDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &gcePdDriver{}
|
||||
var _ InlineVolumeTestDriver = &gcePdDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &gcePdDriver{}
|
||||
var _ DynamicPVTestDriver = &gcePdDriver{}
|
||||
var _ testsuites.TestDriver = &gcePdDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &gcePdDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &gcePdDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &gcePdDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &gcePdDriver{}
|
||||
|
||||
// InitGceDriver returns gcePdDriver that implements TestDriver interface
|
||||
func InitGcePdDriver() TestDriver {
|
||||
func InitGcePdDriver() testsuites.TestDriver {
|
||||
return &gcePdDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "gcepd",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
@ -1141,17 +1142,17 @@ func InitGcePdDriver() TestDriver {
|
||||
"xfs",
|
||||
),
|
||||
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapBlock: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapBlock: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (g *gcePdDriver) GetDriverInfo() *DriverInfo {
|
||||
func (g *gcePdDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &g.driverInfo
|
||||
}
|
||||
|
||||
@ -1201,7 +1202,7 @@ func (g *gcePdDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
||||
ns := g.driverInfo.Framework.Namespace.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 {
|
||||
@ -1238,7 +1239,7 @@ func (g *gcePdDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
||||
|
||||
// vSphere
|
||||
type vSphereDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type vSphereTestResource struct {
|
||||
@ -1246,31 +1247,31 @@ type vSphereTestResource struct {
|
||||
nodeInfo *vspheretest.NodeInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &vSphereDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &vSphereDriver{}
|
||||
var _ InlineVolumeTestDriver = &vSphereDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &vSphereDriver{}
|
||||
var _ DynamicPVTestDriver = &vSphereDriver{}
|
||||
var _ testsuites.TestDriver = &vSphereDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &vSphereDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &vSphereDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &vSphereDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &vSphereDriver{}
|
||||
|
||||
// InitVSphereDriver returns vSphereDriver that implements TestDriver interface
|
||||
func InitVSphereDriver() TestDriver {
|
||||
func InitVSphereDriver() testsuites.TestDriver {
|
||||
return &vSphereDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "vSphere",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
"ext4",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
func (v *vSphereDriver) GetDriverInfo() *DriverInfo {
|
||||
func (v *vSphereDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &v.driverInfo
|
||||
}
|
||||
|
||||
@ -1327,7 +1328,7 @@ func (v *vSphereDriver) GetDynamicProvisionStorageClass(fsType string) *storagev
|
||||
ns := v.driverInfo.Framework.Namespace.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 {
|
||||
@ -1361,40 +1362,40 @@ func (v *vSphereDriver) DeleteVolume(volType testpatterns.TestVolType, testResou
|
||||
|
||||
// Azure
|
||||
type azureDriver struct {
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
type azureTestResource struct {
|
||||
volumeName string
|
||||
}
|
||||
|
||||
var _ TestDriver = &azureDriver{}
|
||||
var _ PreprovisionedVolumeTestDriver = &azureDriver{}
|
||||
var _ InlineVolumeTestDriver = &azureDriver{}
|
||||
var _ PreprovisionedPVTestDriver = &azureDriver{}
|
||||
var _ DynamicPVTestDriver = &azureDriver{}
|
||||
var _ testsuites.TestDriver = &azureDriver{}
|
||||
var _ testsuites.PreprovisionedVolumeTestDriver = &azureDriver{}
|
||||
var _ testsuites.InlineVolumeTestDriver = &azureDriver{}
|
||||
var _ testsuites.PreprovisionedPVTestDriver = &azureDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &azureDriver{}
|
||||
|
||||
// InitAzureDriver returns azureDriver that implements TestDriver interface
|
||||
func InitAzureDriver() TestDriver {
|
||||
func InitAzureDriver() testsuites.TestDriver {
|
||||
return &azureDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "azure",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
"", // Default fsType
|
||||
"ext4",
|
||||
),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapBlock: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapBlock: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *azureDriver) GetDriverInfo() *DriverInfo {
|
||||
func (a *azureDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &a.driverInfo
|
||||
}
|
||||
|
||||
@ -1449,7 +1450,7 @@ func (a *azureDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.
|
||||
ns := a.driverInfo.Framework.Namespace.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 {
|
||||
@ -1482,21 +1483,21 @@ func (a *azureDriver) DeleteVolume(volType testpatterns.TestVolType, testResourc
|
||||
type awsDriver struct {
|
||||
volumeName string
|
||||
|
||||
driverInfo DriverInfo
|
||||
driverInfo testsuites.DriverInfo
|
||||
}
|
||||
|
||||
var _ TestDriver = &awsDriver{}
|
||||
var _ testsuites.TestDriver = &awsDriver{}
|
||||
|
||||
// TODO: Fix authorization error in attach operation and uncomment below
|
||||
//var _ PreprovisionedVolumeTestDriver = &awsDriver{}
|
||||
//var _ InlineVolumeTestDriver = &awsDriver{}
|
||||
//var _ PreprovisionedPVTestDriver = &awsDriver{}
|
||||
var _ DynamicPVTestDriver = &awsDriver{}
|
||||
//var _ testsuites.PreprovisionedVolumeTestDriver = &awsDriver{}
|
||||
//var _ testsuites.InlineVolumeTestDriver = &awsDriver{}
|
||||
//var _ testsuites.PreprovisionedPVTestDriver = &awsDriver{}
|
||||
var _ testsuites.DynamicPVTestDriver = &awsDriver{}
|
||||
|
||||
// InitAwsDriver returns awsDriver that implements TestDriver interface
|
||||
func InitAwsDriver() TestDriver {
|
||||
func InitAwsDriver() testsuites.TestDriver {
|
||||
return &awsDriver{
|
||||
driverInfo: DriverInfo{
|
||||
driverInfo: testsuites.DriverInfo{
|
||||
Name: "aws",
|
||||
MaxFileSize: testpatterns.FileSizeMedium,
|
||||
SupportedFsType: sets.NewString(
|
||||
@ -1504,17 +1505,17 @@ func InitAwsDriver() TestDriver {
|
||||
"ext3",
|
||||
),
|
||||
SupportedMountOption: sets.NewString("debug", "nouid32"),
|
||||
Capabilities: map[Capability]bool{
|
||||
CapPersistence: true,
|
||||
CapFsGroup: true,
|
||||
CapBlock: true,
|
||||
CapExec: true,
|
||||
Capabilities: map[testsuites.Capability]bool{
|
||||
testsuites.CapPersistence: true,
|
||||
testsuites.CapFsGroup: true,
|
||||
testsuites.CapBlock: true,
|
||||
testsuites.CapExec: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *awsDriver) GetDriverInfo() *DriverInfo {
|
||||
func (a *awsDriver) GetDriverInfo() *testsuites.DriverInfo {
|
||||
return &a.driverInfo
|
||||
}
|
||||
|
||||
@ -1560,7 +1561,7 @@ func (a *awsDriver) GetDynamicProvisionStorageClass(fsType string) *storagev1.St
|
||||
ns := a.driverInfo.Framework.Namespace.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 {
|
||||
|
@ -27,7 +27,7 @@ import (
|
||||
)
|
||||
|
||||
// List of testDrivers to be executed in below loop
|
||||
var testDrivers = []func() drivers.TestDriver{
|
||||
var testDrivers = []func() testsuites.TestDriver{
|
||||
drivers.InitNFSDriver,
|
||||
drivers.InitGlusterFSDriver,
|
||||
drivers.InitISCSIDriver,
|
||||
@ -75,12 +75,12 @@ var _ = utils.SIGDescribe("In-tree Volumes", func() {
|
||||
|
||||
for _, initDriver := range testDrivers {
|
||||
curDriver := initDriver()
|
||||
Context(drivers.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||
Context(testsuites.GetDriverNameWithFeatureTags(curDriver), func() {
|
||||
driver := curDriver
|
||||
|
||||
BeforeEach(func() {
|
||||
// setupDriver
|
||||
drivers.SetCommonDriverParameters(driver, f, config)
|
||||
testsuites.SetCommonDriverParameters(driver, f, config)
|
||||
driver.CreateDriver()
|
||||
})
|
||||
|
||||
|
@ -30,7 +30,6 @@ import (
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/drivers"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
)
|
||||
|
||||
@ -39,9 +38,9 @@ type TestSuite interface {
|
||||
// getTestSuiteInfo returns the TestSuiteInfo for this TestSuite
|
||||
getTestSuiteInfo() TestSuiteInfo
|
||||
// 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(drivers.TestDriver, testpatterns.TestPattern)
|
||||
execTest(TestDriver, testpatterns.TestPattern)
|
||||
}
|
||||
|
||||
// TestSuiteInfo represents a set of parameters for TestSuite
|
||||
@ -55,9 +54,9 @@ type TestSuiteInfo struct {
|
||||
type TestResource interface {
|
||||
// setupResource sets up test resources to be used for the tests with the
|
||||
// combination of TestDriver and TestPattern
|
||||
setupResource(drivers.TestDriver, testpatterns.TestPattern)
|
||||
setupResource(TestDriver, testpatterns.TestPattern)
|
||||
// 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 {
|
||||
@ -66,7 +65,7 @@ func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string {
|
||||
}
|
||||
|
||||
// RunTestSuite runs all testpatterns of all testSuites for a driver
|
||||
func RunTestSuite(f *framework.Framework, config framework.VolumeTestConfig, driver 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 {
|
||||
suite := testSuiteInit()
|
||||
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
|
||||
// 3. Check with driver 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()
|
||||
|
||||
// 1. Check if Whether volType is supported by driver from its interface
|
||||
var isSupported bool
|
||||
switch pattern.VolType {
|
||||
case testpatterns.InlineVolume:
|
||||
_, isSupported = driver.(drivers.InlineVolumeTestDriver)
|
||||
_, isSupported = driver.(InlineVolumeTestDriver)
|
||||
case testpatterns.PreprovisionedPV:
|
||||
_, isSupported = driver.(drivers.PreprovisionedPVTestDriver)
|
||||
_, isSupported = driver.(PreprovisionedPVTestDriver)
|
||||
case testpatterns.DynamicPV:
|
||||
_, isSupported = driver.(drivers.DynamicPVTestDriver)
|
||||
_, isSupported = driver.(DynamicPVTestDriver)
|
||||
default:
|
||||
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.
|
||||
// Also, see subpath.go in the same directory for how to extend and use it.
|
||||
type genericVolumeTestResource struct {
|
||||
driver drivers.TestDriver
|
||||
driver TestDriver
|
||||
volType string
|
||||
volSource *v1.VolumeSource
|
||||
pvc *v1.PersistentVolumeClaim
|
||||
@ -134,7 +133,7 @@ type genericVolumeTestResource struct {
|
||||
var _ TestResource = &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
|
||||
dInfo := driver.GetDriverInfo()
|
||||
f := dInfo.Framework
|
||||
@ -143,18 +142,18 @@ func (r *genericVolumeTestResource) setupResource(driver drivers.TestDriver, pat
|
||||
volType := pattern.VolType
|
||||
|
||||
// Create volume for pre-provisioned volume tests
|
||||
r.driverTestResource = drivers.CreateVolume(driver, volType)
|
||||
r.driverTestResource = CreateVolume(driver, volType)
|
||||
|
||||
switch volType {
|
||||
case testpatterns.InlineVolume:
|
||||
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.volType = dInfo.Name
|
||||
}
|
||||
case testpatterns.PreprovisionedPV:
|
||||
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)
|
||||
if pvSource != nil {
|
||||
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:
|
||||
framework.Logf("Creating resource for dynamic PV")
|
||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
||||
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||
claimSize := dDriver.GetClaimSize()
|
||||
r.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
||||
|
||||
@ -188,7 +187,7 @@ func (r *genericVolumeTestResource) setupResource(driver drivers.TestDriver, pat
|
||||
}
|
||||
|
||||
// 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()
|
||||
f := dInfo.Framework
|
||||
volType := pattern.VolType
|
||||
@ -222,7 +221,7 @@ func (r *genericVolumeTestResource) cleanupResource(driver drivers.TestDriver, p
|
||||
}
|
||||
|
||||
// Cleanup volume for pre-provisioned volume tests
|
||||
drivers.DeleteVolume(driver, volType, r.driverTestResource)
|
||||
DeleteVolume(driver, volType, r.driverTestResource)
|
||||
}
|
||||
|
||||
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"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/drivers"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||
)
|
||||
@ -74,10 +73,10 @@ func (p *provisioningTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||
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
|
||||
resource := provisioningTestResource{}
|
||||
resource.setupResource(driver, pattern)
|
||||
@ -100,7 +99,7 @@ func createProvisioningTestInput(driver drivers.TestDriver, pattern testpatterns
|
||||
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() {
|
||||
var (
|
||||
resource provisioningTestResource
|
||||
@ -132,7 +131,7 @@ func (p *provisioningTestSuite) execTest(driver drivers.TestDriver, pattern test
|
||||
}
|
||||
|
||||
type provisioningTestResource struct {
|
||||
driver drivers.TestDriver
|
||||
driver TestDriver
|
||||
|
||||
claimSize string
|
||||
sc *storage.StorageClass
|
||||
@ -141,11 +140,11 @@ type provisioningTestResource struct {
|
||||
|
||||
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
|
||||
switch pattern.VolType {
|
||||
case testpatterns.DynamicPV:
|
||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
||||
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||
p.sc = dDriver.GetDynamicProvisionStorageClass("")
|
||||
if p.sc == nil {
|
||||
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 {
|
||||
@ -169,7 +168,7 @@ type provisioningTestInput struct {
|
||||
cs clientset.Interface
|
||||
pvc *v1.PersistentVolumeClaim
|
||||
sc *storage.StorageClass
|
||||
dInfo *drivers.DriverInfo
|
||||
dInfo *DriverInfo
|
||||
}
|
||||
|
||||
func testProvisioning(input *provisioningTestInput) {
|
||||
@ -187,7 +186,7 @@ func testProvisioning(input *provisioningTestInput) {
|
||||
})
|
||||
|
||||
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)
|
||||
}
|
||||
block := v1.PersistentVolumeBlock
|
||||
|
@ -27,7 +27,6 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/rand"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
"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/utils"
|
||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||
@ -72,7 +71,7 @@ func (s *subPathTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||
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 {
|
||||
@ -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() {
|
||||
var (
|
||||
resource subPathTestResource
|
||||
@ -137,7 +136,7 @@ type subPathTestResource struct {
|
||||
|
||||
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
|
||||
dInfo := s.driver.GetDriverInfo()
|
||||
f := dInfo.Framework
|
||||
@ -150,7 +149,7 @@ func (s *subPathTestResource) setupResource(driver drivers.TestDriver, pattern t
|
||||
// Setup subPath test dependent resource
|
||||
switch volType {
|
||||
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)
|
||||
}
|
||||
case testpatterns.PreprovisionedPV:
|
||||
@ -182,7 +181,7 @@ func (s *subPathTestResource) setupResource(driver drivers.TestDriver, pattern t
|
||||
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()
|
||||
f := dInfo.Framework
|
||||
|
||||
|
@ -14,14 +14,11 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package drivers
|
||||
package testsuites
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
storagev1 "k8s.io/api/storage/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
@ -108,89 +105,3 @@ type DriverInfo struct {
|
||||
Framework *framework.Framework // Framework for the 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"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"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/utils"
|
||||
)
|
||||
@ -75,7 +74,7 @@ func (t *volumeIOTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||
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 {
|
||||
@ -90,7 +89,7 @@ func createVolumeIOTestInput(pattern testpatterns.TestPattern, resource genericV
|
||||
framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name)
|
||||
}
|
||||
|
||||
if dInfo.Capabilities[drivers.CapFsGroup] {
|
||||
if dInfo.Capabilities[CapFsGroup] {
|
||||
fsGroupVal := int64(1234)
|
||||
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() {
|
||||
var (
|
||||
resource genericVolumeTestResource
|
||||
|
@ -27,7 +27,6 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
"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/utils"
|
||||
)
|
||||
@ -62,7 +61,7 @@ func (t *volumeModeTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||
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 {
|
||||
@ -78,13 +77,13 @@ func createVolumeModeTestInput(pattern testpatterns.TestPattern, resource volume
|
||||
testVolType: pattern.VolType,
|
||||
nodeName: dInfo.Config.ClientNodeName,
|
||||
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()
|
||||
isBlockSupported := dInfo.Capabilities[drivers.CapBlock]
|
||||
isBlockSupported := dInfo.Capabilities[CapBlock]
|
||||
volMode := pattern.VolMode
|
||||
volType := pattern.VolType
|
||||
|
||||
@ -105,7 +104,7 @@ func getVolumeModeTestFunc(pattern testpatterns.TestPattern, driver drivers.Test
|
||||
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() {
|
||||
var (
|
||||
resource volumeModeTestResource
|
||||
@ -141,7 +140,7 @@ func (t *volumeModeTestSuite) execTest(driver drivers.TestDriver, pattern testpa
|
||||
}
|
||||
|
||||
type volumeModeTestResource struct {
|
||||
driver drivers.TestDriver
|
||||
driver TestDriver
|
||||
|
||||
sc *storagev1.StorageClass
|
||||
pvc *v1.PersistentVolumeClaim
|
||||
@ -152,7 +151,7 @@ type volumeModeTestResource struct {
|
||||
|
||||
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
|
||||
dInfo := driver.GetDriverInfo()
|
||||
f := dInfo.Framework
|
||||
@ -168,7 +167,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
||||
)
|
||||
|
||||
// Create volume for pre-provisioned volume tests
|
||||
s.driverTestResource = drivers.CreateVolume(driver, volType)
|
||||
s.driverTestResource = CreateVolume(driver, volType)
|
||||
|
||||
switch volType {
|
||||
case testpatterns.PreprovisionedPV:
|
||||
@ -177,7 +176,7 @@ func (s *volumeModeTestResource) setupResource(driver drivers.TestDriver, patter
|
||||
} else if volMode == v1.PersistentVolumeFilesystem {
|
||||
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)
|
||||
if pvSource == nil {
|
||||
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)
|
||||
}
|
||||
case testpatterns.DynamicPV:
|
||||
if dDriver, ok := driver.(drivers.DynamicPVTestDriver); ok {
|
||||
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
|
||||
s.sc = dDriver.GetDynamicProvisionStorageClass(fsType)
|
||||
if s.sc == nil {
|
||||
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()
|
||||
f := dInfo.Framework
|
||||
cs := f.ClientSet
|
||||
@ -224,7 +223,7 @@ func (s *volumeModeTestResource) cleanupResource(driver drivers.TestDriver, patt
|
||||
}
|
||||
|
||||
// Cleanup volume for pre-provisioned volume tests
|
||||
drivers.DeleteVolume(driver, volType, s.driverTestResource)
|
||||
DeleteVolume(driver, volType, s.driverTestResource)
|
||||
}
|
||||
|
||||
type volumeModeTestInput struct {
|
||||
|
@ -31,7 +31,6 @@ import (
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/kubernetes/test/e2e/framework"
|
||||
"k8s.io/kubernetes/test/e2e/storage/drivers"
|
||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||
imageutils "k8s.io/kubernetes/test/utils/image"
|
||||
)
|
||||
@ -73,19 +72,19 @@ func (t *volumesTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||
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()
|
||||
if !dInfo.Capabilities[drivers.CapPersistence] {
|
||||
if !dInfo.Capabilities[CapPersistence] {
|
||||
framework.Skipf("Driver %q does not provide persistency - skipping", dInfo.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func skipExecTest(driver drivers.TestDriver) {
|
||||
func skipExecTest(driver TestDriver) {
|
||||
dInfo := driver.GetDriverInfo()
|
||||
if !dInfo.Capabilities[drivers.CapExec] {
|
||||
if !dInfo.Capabilities[CapExec] {
|
||||
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)
|
||||
}
|
||||
|
||||
if dInfo.Capabilities[drivers.CapFsGroup] {
|
||||
if dInfo.Capabilities[CapFsGroup] {
|
||||
fsGroupVal := int64(1234)
|
||||
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() {
|
||||
var (
|
||||
resource genericVolumeTestResource
|
||||
|
Loading…
Reference in New Issue
Block a user