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:
Patrick Ohly 2018-11-09 11:15:16 +01:00
parent 41ab9449ed
commit dfcf2ca345
12 changed files with 378 additions and 356 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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 {

View File

@ -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()
}) })

View File

@ -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(

View 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)
}

View File

@ -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

View File

@ -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

View File

@ -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)
}

View File

@ -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

View File

@ -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 {

View File

@ -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