From 160da35b23c520f5569f42f805aa08f8dc44a1ab Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Fri, 22 Nov 2019 10:46:04 +0100 Subject: [PATCH] e2e storage: public API for testsuites, support CSIInlineVolume type for generic resource Implementing a test suite was impossible outside of the k8s.io/kubernetes/test/e2e/storage/testsuites package because all interfaces and structs used by them were private. As part of revamping the API, genericVolumeTestResource also gets exported because it is useful for other test suites. Because the TestResource interface became obsolete a while ago and isn't used anymore, the new name is just testsuites.VolumeResource. testpatterns.CSIInlineVolume needs special handling in a few places. It can now be used in a test pattern for a test suite that uses a VolumeResource instance. --- test/e2e/storage/testpatterns/testpattern.go | 31 ++++ test/e2e/storage/testsuites/base.go | 162 +++++++++--------- test/e2e/storage/testsuites/disruptive.go | 26 +-- .../storage/testsuites/driveroperations.go | 4 +- test/e2e/storage/testsuites/ephemeral.go | 10 +- test/e2e/storage/testsuites/multivolume.go | 52 +++--- test/e2e/storage/testsuites/provisioning.go | 16 +- test/e2e/storage/testsuites/snapshottable.go | 14 +- test/e2e/storage/testsuites/subpath.go | 38 ++-- test/e2e/storage/testsuites/topology.go | 49 +++--- test/e2e/storage/testsuites/volume_expand.go | 72 ++++---- test/e2e/storage/testsuites/volume_io.go | 24 +-- test/e2e/storage/testsuites/volumelimits.go | 24 +-- test/e2e/storage/testsuites/volumemode.go | 81 +++++---- test/e2e/storage/testsuites/volumes.go | 26 +-- 15 files changed, 332 insertions(+), 297 deletions(-) diff --git a/test/e2e/storage/testpatterns/testpattern.go b/test/e2e/storage/testpatterns/testpattern.go index 80b510bc6c9..99b86501504 100644 --- a/test/e2e/storage/testpatterns/testpattern.go +++ b/test/e2e/storage/testpatterns/testpattern.go @@ -76,6 +76,11 @@ var ( Name: "Inline-volume (default fs)", VolType: InlineVolume, } + // DefaultFsEphemeralVolume is TestPattern for "Ephemeral-volume (default fs)" + DefaultFsEphemeralVolume = TestPattern{ + Name: "Ephemeral-volume (default fs)", + VolType: CSIInlineVolume, + } // DefaultFsPreprovisionedPV is TestPattern for "Pre-provisioned PV (default fs)" DefaultFsPreprovisionedPV = TestPattern{ Name: "Pre-provisioned PV (default fs)", @@ -95,6 +100,12 @@ var ( VolType: InlineVolume, FsType: "ext3", } + // Ext3EphemeralVolume is TestPattern for "Ephemeral-volume (ext3)" + Ext3EphemeralVolume = TestPattern{ + Name: "Ephemeral-volume (ext3)", + VolType: InlineVolume, + FsType: "ext3", + } // Ext3PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext3)" Ext3PreprovisionedPV = TestPattern{ Name: "Pre-provisioned PV (ext3)", @@ -116,6 +127,12 @@ var ( VolType: InlineVolume, FsType: "ext4", } + // Ext4EphemeralVolume is TestPattern for "Ephemeral-volume (ext4)" + Ext4EphemeralVolume = TestPattern{ + Name: "Ephemeral-volume (ext4)", + VolType: CSIInlineVolume, + FsType: "ext4", + } // Ext4PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext4)" Ext4PreprovisionedPV = TestPattern{ Name: "Pre-provisioned PV (ext4)", @@ -138,6 +155,13 @@ var ( FsType: "xfs", FeatureTag: "[Slow]", } + // XfsEphemeralVolume is TestPattern for "Ephemeral-volume (xfs)" + XfsEphemeralVolume = TestPattern{ + Name: "Ephemeral-volume (xfs)", + VolType: CSIInlineVolume, + FsType: "xfs", + FeatureTag: "[Slow]", + } // XfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (xfs)" XfsPreprovisionedPV = TestPattern{ Name: "Pre-provisioned PV (xfs)", @@ -162,6 +186,13 @@ var ( FsType: "ntfs", FeatureTag: "[sig-windows]", } + // NtfsEphemeralVolume is TestPattern for "Ephemeral-volume (ntfs)" + NtfsEphemeralVolume = TestPattern{ + Name: "Ephemeral-volume (ntfs)", + VolType: CSIInlineVolume, + FsType: "ntfs", + FeatureTag: "[sig-windows]", + } // NtfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (ntfs)" NtfsPreprovisionedPV = TestPattern{ Name: "Pre-provisioned PV (ntfs)", diff --git a/test/e2e/storage/testsuites/base.go b/test/e2e/storage/testsuites/base.go index ff40cec1b9c..9b13cc1632e 100644 --- a/test/e2e/storage/testsuites/base.go +++ b/test/e2e/storage/testsuites/base.go @@ -62,48 +62,42 @@ type opCounts map[string]int64 // TestSuite represents an interface for a set of tests which works with TestDriver type TestSuite interface { - // getTestSuiteInfo returns the TestSuiteInfo for this TestSuite - getTestSuiteInfo() TestSuiteInfo - // defineTest defines tests of the testpattern for the driver. + // GetTestSuiteInfo returns the TestSuiteInfo for this TestSuite + GetTestSuiteInfo() TestSuiteInfo + // DefineTests defines tests of the testpattern for the driver. // Called inside a Ginkgo context that reflects the current driver and test pattern, // so the test suite can define tests directly with ginkgo.It. - defineTests(TestDriver, testpatterns.TestPattern) - // skipRedundantSuite will skip the test suite based on the given TestPattern and TestDriver - skipRedundantSuite(TestDriver, testpatterns.TestPattern) + DefineTests(TestDriver, testpatterns.TestPattern) + // SkipRedundantSuite will skip the test suite based on the given TestPattern and TestDriver + SkipRedundantSuite(TestDriver, testpatterns.TestPattern) } // TestSuiteInfo represents a set of parameters for TestSuite type TestSuiteInfo struct { - name string // name of the TestSuite - featureTag string // featureTag for the TestSuite - testPatterns []testpatterns.TestPattern // Slice of TestPattern for the TestSuite - supportedSizeRange volume.SizeRange // Size range supported by the test suite -} - -// TestResource represents an interface for resources that is used by TestSuite -type TestResource interface { - // cleanupResource cleans up the test resources created when setting up the resource - cleanupResource() error + Name string // name of the TestSuite + FeatureTag string // featureTag for the TestSuite + TestPatterns []testpatterns.TestPattern // Slice of TestPattern for the TestSuite + SupportedSizeRange volume.SizeRange // Size range supported by the test suite } func getTestNameStr(suite TestSuite, pattern testpatterns.TestPattern) string { - tsInfo := suite.getTestSuiteInfo() - return fmt.Sprintf("[Testpattern: %s]%s %s%s", pattern.Name, pattern.FeatureTag, tsInfo.name, tsInfo.featureTag) + tsInfo := suite.GetTestSuiteInfo() + return fmt.Sprintf("[Testpattern: %s]%s %s%s", pattern.Name, pattern.FeatureTag, tsInfo.Name, tsInfo.FeatureTag) } // DefineTestSuite defines tests for all testpatterns and all testSuites for a driver func DefineTestSuite(driver TestDriver, tsInits []func() TestSuite) { for _, testSuiteInit := range tsInits { suite := testSuiteInit() - for _, pattern := range suite.getTestSuiteInfo().testPatterns { + for _, pattern := range suite.GetTestSuiteInfo().TestPatterns { p := pattern ginkgo.Context(getTestNameStr(suite, p), func() { ginkgo.BeforeEach(func() { // Skip unsupported tests to avoid unnecessary resource initialization - suite.skipRedundantSuite(driver, p) + suite.SkipRedundantSuite(driver, p) skipUnsupportedTest(driver, p) }) - suite.defineTests(driver, p) + suite.DefineTests(driver, p) }) } } @@ -117,7 +111,7 @@ func DefineTestSuite(driver TestDriver, tsInits []func() TestSuite) { // 3. Check if fsType is supported // 4. Check with driver specific logic // -// Test suites can also skip tests inside their own defineTests function or in +// Test suites can also skip tests inside their own DefineTests function or in // individual tests. func skipUnsupportedTest(driver TestDriver, pattern testpatterns.TestPattern) { dInfo := driver.GetDriverInfo() @@ -170,54 +164,52 @@ func skipUnsupportedTest(driver TestDriver, pattern testpatterns.TestPattern) { driver.SkipUnsupportedTest(pattern) } -// genericVolumeTestResource is a generic implementation of TestResource that wil be able to +// VolumeResource is a generic implementation of TestResource that wil be able to // be used in most of TestSuites. // 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 TestDriver - config *PerTestConfig - pattern testpatterns.TestPattern - volType string - volSource *v1.VolumeSource - pvc *v1.PersistentVolumeClaim - pv *v1.PersistentVolume - sc *storagev1.StorageClass +type VolumeResource struct { + Config *PerTestConfig + Pattern testpatterns.TestPattern + VolType string + VolSource *v1.VolumeSource + Pvc *v1.PersistentVolumeClaim + Pv *v1.PersistentVolume + Sc *storagev1.StorageClass - volume TestVolume + Volume TestVolume } -var _ TestResource = &genericVolumeTestResource{} - -func createGenericVolumeTestResource(driver TestDriver, config *PerTestConfig, pattern testpatterns.TestPattern, testVolumeSizeRange volume.SizeRange) *genericVolumeTestResource { - r := genericVolumeTestResource{ - driver: driver, - config: config, - pattern: pattern, +// CreateVolumeResource constructs a VolumeResource for the current test. It knows how to deal with +// different test pattern volume types. +func CreateVolumeResource(driver TestDriver, config *PerTestConfig, pattern testpatterns.TestPattern, testVolumeSizeRange volume.SizeRange) *VolumeResource { + r := VolumeResource{ + Config: config, + Pattern: pattern, } dInfo := driver.GetDriverInfo() f := config.Framework cs := f.ClientSet // Create volume for pre-provisioned volume tests - r.volume = CreateVolume(driver, config, pattern.VolType) + r.Volume = CreateVolume(driver, config, pattern.VolType) switch pattern.VolType { case testpatterns.InlineVolume: framework.Logf("Creating resource for inline volume") if iDriver, ok := driver.(InlineVolumeTestDriver); ok { - r.volSource = iDriver.GetVolumeSource(false, pattern.FsType, r.volume) - r.volType = dInfo.Name + r.VolSource = iDriver.GetVolumeSource(false, pattern.FsType, r.Volume) + r.VolType = dInfo.Name } case testpatterns.PreprovisionedPV: framework.Logf("Creating resource for pre-provisioned PV") if pDriver, ok := driver.(PreprovisionedPVTestDriver); ok { - pvSource, volumeNodeAffinity := pDriver.GetPersistentVolumeSource(false, pattern.FsType, r.volume) + pvSource, volumeNodeAffinity := pDriver.GetPersistentVolumeSource(false, pattern.FsType, r.Volume) if pvSource != nil { - r.pv, r.pvc = createPVCPV(f, dInfo.Name, pvSource, volumeNodeAffinity, pattern.VolMode, dInfo.RequiredAccessModes) - r.volSource = createVolumeSource(r.pvc.Name, false /* readOnly */) + r.Pv, r.Pvc = createPVCPV(f, dInfo.Name, pvSource, volumeNodeAffinity, pattern.VolMode, dInfo.RequiredAccessModes) + r.VolSource = createVolumeSource(r.Pvc.Name, false /* readOnly */) } - r.volType = fmt.Sprintf("%s-preprovisionedPV", dInfo.Name) + r.VolType = fmt.Sprintf("%s-preprovisionedPV", dInfo.Name) } case testpatterns.DynamicPV: framework.Logf("Creating resource for dynamic PV") @@ -227,32 +219,44 @@ func createGenericVolumeTestResource(driver TestDriver, config *PerTestConfig, p claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange) framework.Logf("Using claimSize:%s, test suite supported size:%v, driver(%s) supported size:%v ", claimSize, testVolumeSizeRange, dDriver.GetDriverInfo().Name, testVolumeSizeRange) - r.sc = dDriver.GetDynamicProvisionStorageClass(r.config, pattern.FsType) + r.Sc = dDriver.GetDynamicProvisionStorageClass(r.Config, pattern.FsType) if pattern.BindingMode != "" { - r.sc.VolumeBindingMode = &pattern.BindingMode + r.Sc.VolumeBindingMode = &pattern.BindingMode } if pattern.AllowExpansion != false { - r.sc.AllowVolumeExpansion = &pattern.AllowExpansion + r.Sc.AllowVolumeExpansion = &pattern.AllowExpansion } - ginkgo.By("creating a StorageClass " + r.sc.Name) + ginkgo.By("creating a StorageClass " + r.Sc.Name) - r.sc, err = cs.StorageV1().StorageClasses().Create(r.sc) + r.Sc, err = cs.StorageV1().StorageClasses().Create(r.Sc) framework.ExpectNoError(err) - if r.sc != nil { - r.pv, r.pvc = createPVCPVFromDynamicProvisionSC( - f, dInfo.Name, claimSize, r.sc, pattern.VolMode, dInfo.RequiredAccessModes) - r.volSource = createVolumeSource(r.pvc.Name, false /* readOnly */) + if r.Sc != nil { + r.Pv, r.Pvc = createPVCPVFromDynamicProvisionSC( + f, dInfo.Name, claimSize, r.Sc, pattern.VolMode, dInfo.RequiredAccessModes) + r.VolSource = createVolumeSource(r.Pvc.Name, false /* readOnly */) + } + r.VolType = fmt.Sprintf("%s-dynamicPV", dInfo.Name) + } + case testpatterns.CSIInlineVolume: + framework.Logf("Creating resource for CSI ephemeral inline volume") + if eDriver, ok := driver.(EphemeralTestDriver); ok { + r.VolType = fmt.Sprintf("%s-ephemeral", dInfo.Name) + attributes, _, _ := eDriver.GetVolume(config, 0) + r.VolSource = &v1.VolumeSource{ + CSI: &v1.CSIVolumeSource{ + Driver: eDriver.GetCSIDriverName(config), + VolumeAttributes: attributes, + }, } - r.volType = fmt.Sprintf("%s-dynamicPV", dInfo.Name) } default: - framework.Failf("genericVolumeTestResource doesn't support: %s", pattern.VolType) + framework.Failf("VolumeResource doesn't support: %s", pattern.VolType) } - if r.volSource == nil { + if r.VolSource == nil { framework.Skipf("Driver %s doesn't support %v -- skipping", dInfo.Name, pattern.VolType) } @@ -269,52 +273,52 @@ func createVolumeSource(pvcName string, readOnly bool) *v1.VolumeSource { } -// cleanupResource cleans up genericVolumeTestResource -func (r *genericVolumeTestResource) cleanupResource() error { - f := r.config.Framework +// CleanupResource cleans up VolumeResource +func (r *VolumeResource) CleanupResource() error { + f := r.Config.Framework var cleanUpErrs []error - if r.pvc != nil || r.pv != nil { - switch r.pattern.VolType { + if r.Pvc != nil || r.Pv != nil { + switch r.Pattern.VolType { case testpatterns.PreprovisionedPV: ginkgo.By("Deleting pv and pvc") - if errs := e2epv.PVPVCCleanup(f.ClientSet, f.Namespace.Name, r.pv, r.pvc); len(errs) != 0 { + if errs := e2epv.PVPVCCleanup(f.ClientSet, f.Namespace.Name, r.Pv, r.Pvc); len(errs) != 0 { framework.Failf("Failed to delete PVC or PV: %v", utilerrors.NewAggregate(errs)) } case testpatterns.DynamicPV: ginkgo.By("Deleting pvc") // We only delete the PVC so that PV (and disk) can be cleaned up by dynamic provisioner - if r.pv != nil && r.pv.Spec.PersistentVolumeReclaimPolicy != v1.PersistentVolumeReclaimDelete { + if r.Pv != nil && r.Pv.Spec.PersistentVolumeReclaimPolicy != v1.PersistentVolumeReclaimDelete { framework.Failf("Test framework does not currently support Dynamically Provisioned Persistent Volume %v specified with reclaim policy that isnt %v", - r.pv.Name, v1.PersistentVolumeReclaimDelete) + r.Pv.Name, v1.PersistentVolumeReclaimDelete) } - if r.pvc != nil { - err := e2epv.DeletePersistentVolumeClaim(f.ClientSet, r.pvc.Name, f.Namespace.Name) + if r.Pvc != nil { + err := e2epv.DeletePersistentVolumeClaim(f.ClientSet, r.Pvc.Name, f.Namespace.Name) if err != nil { - cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete PVC %v", r.pvc.Name)) + cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete PVC %v", r.Pvc.Name)) } - if r.pv != nil { - err = framework.WaitForPersistentVolumeDeleted(f.ClientSet, r.pv.Name, 5*time.Second, 5*time.Minute) + if r.Pv != nil { + err = framework.WaitForPersistentVolumeDeleted(f.ClientSet, r.Pv.Name, 5*time.Second, 5*time.Minute) if err != nil { cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, - "Persistent Volume %v not deleted by dynamic provisioner", r.pv.Name)) + "Persistent Volume %v not deleted by dynamic provisioner", r.Pv.Name)) } } } default: - framework.Failf("Found PVC (%v) or PV (%v) but not running Preprovisioned or Dynamic test pattern", r.pvc, r.pv) + framework.Failf("Found PVC (%v) or PV (%v) but not running Preprovisioned or Dynamic test pattern", r.Pvc, r.Pv) } } - if r.sc != nil { + if r.Sc != nil { ginkgo.By("Deleting sc") - if err := deleteStorageClass(f.ClientSet, r.sc.Name); err != nil { - cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete StorageClass %v", r.sc.Name)) + if err := deleteStorageClass(f.ClientSet, r.Sc.Name); err != nil { + cleanUpErrs = append(cleanUpErrs, errors.Wrapf(err, "Failed to delete StorageClass %v", r.Sc.Name)) } } // Cleanup volume for pre-provisioned volume tests - if r.volume != nil { - if err := tryFunc(r.volume.DeleteVolume); err != nil { + if r.Volume != nil { + if err := tryFunc(r.Volume.DeleteVolume); err != nil { cleanUpErrs = append(cleanUpErrs, errors.Wrap(err, "Failed to delete Volume")) } } diff --git a/test/e2e/storage/testsuites/disruptive.go b/test/e2e/storage/testsuites/disruptive.go index 6ca3502a34e..f6afcf25ffb 100644 --- a/test/e2e/storage/testsuites/disruptive.go +++ b/test/e2e/storage/testsuites/disruptive.go @@ -39,9 +39,9 @@ var _ TestSuite = &disruptiveTestSuite{} func InitDisruptiveTestSuite() TestSuite { return &disruptiveTestSuite{ tsInfo: TestSuiteInfo{ - name: "disruptive", - featureTag: "[Disruptive]", - testPatterns: []testpatterns.TestPattern{ + Name: "disruptive", + FeatureTag: "[Disruptive]", + TestPatterns: []testpatterns.TestPattern{ // FSVolMode is already covered in subpath testsuite testpatterns.DefaultFsInlineVolume, testpatterns.FsVolModePreprovisionedPV, @@ -52,15 +52,15 @@ func InitDisruptiveTestSuite() TestSuite { }, } } -func (s *disruptiveTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (s *disruptiveTestSuite) GetTestSuiteInfo() TestSuiteInfo { return s.tsInfo } -func (s *disruptiveTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *disruptiveTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(testpatterns.PreprovisionedPV)) } -func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *disruptiveTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() @@ -68,8 +68,8 @@ func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpattern cs clientset.Interface ns *v1.Namespace - // genericVolumeTestResource contains pv, pvc, sc, etc., owns cleaning that up - resource *genericVolumeTestResource + // VolumeResource contains pv, pvc, sc, etc., owns cleaning that up + resource *VolumeResource pod *v1.Pod } var l local @@ -94,8 +94,8 @@ func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpattern framework.Skipf("Driver %s doesn't support %v -- skipping", driver.GetDriverInfo().Name, pattern.VolMode) } - testVolumeSizeRange := s.getTestSuiteInfo().supportedSizeRange - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := s.GetTestSuiteInfo().SupportedSizeRange + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) } cleanup := func() { @@ -108,7 +108,7 @@ func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpattern } if l.resource != nil { - err := l.resource.cleanupResource() + err := l.resource.CleanupResource() errs = append(errs, err) l.resource = nil } @@ -154,9 +154,9 @@ func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpattern var pvcs []*v1.PersistentVolumeClaim var inlineSources []*v1.VolumeSource if pattern.VolType == testpatterns.InlineVolume { - inlineSources = append(inlineSources, l.resource.volSource) + inlineSources = append(inlineSources, l.resource.VolSource) } else { - pvcs = append(pvcs, l.resource.pvc) + pvcs = append(pvcs, l.resource.Pvc) } ginkgo.By("Creating a pod with pvc") l.pod, err = e2epod.CreateSecPodWithNodeSelection(l.cs, l.ns.Name, pvcs, inlineSources, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) diff --git a/test/e2e/storage/testsuites/driveroperations.go b/test/e2e/storage/testsuites/driveroperations.go index 1c5bc5c38f7..0f54febbe36 100644 --- a/test/e2e/storage/testsuites/driveroperations.go +++ b/test/e2e/storage/testsuites/driveroperations.go @@ -37,7 +37,7 @@ func GetDriverNameWithFeatureTags(driver TestDriver) string { return fmt.Sprintf("[Driver: %s]%s", dInfo.Name, dInfo.FeatureTag) } -// CreateVolume creates volume for test unless dynamicPV test +// CreateVolume creates volume for test unless dynamicPV or CSI ephemeral inline volume test func CreateVolume(driver TestDriver, config *PerTestConfig, volType testpatterns.TestVolType) TestVolume { switch volType { case testpatterns.InlineVolume: @@ -46,6 +46,8 @@ func CreateVolume(driver TestDriver, config *PerTestConfig, volType testpatterns if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok { return pDriver.CreateVolume(config, volType) } + case testpatterns.CSIInlineVolume: + fallthrough case testpatterns.DynamicPV: // No need to create volume default: diff --git a/test/e2e/storage/testsuites/ephemeral.go b/test/e2e/storage/testsuites/ephemeral.go index 38ba8680cb8..a18ec5a357a 100644 --- a/test/e2e/storage/testsuites/ephemeral.go +++ b/test/e2e/storage/testsuites/ephemeral.go @@ -45,8 +45,8 @@ var _ TestSuite = &ephemeralTestSuite{} func InitEphemeralTestSuite() TestSuite { return &ephemeralTestSuite{ tsInfo: TestSuiteInfo{ - name: "ephemeral", - testPatterns: []testpatterns.TestPattern{ + Name: "ephemeral", + TestPatterns: []testpatterns.TestPattern{ { Name: "inline ephemeral CSI volume", VolType: testpatterns.CSIInlineVolume, @@ -56,14 +56,14 @@ func InitEphemeralTestSuite() TestSuite { } } -func (p *ephemeralTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (p *ephemeralTestSuite) GetTestSuiteInfo() TestSuiteInfo { return p.tsInfo } -func (p *ephemeralTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (p *ephemeralTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (p *ephemeralTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (p *ephemeralTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() diff --git a/test/e2e/storage/testsuites/multivolume.go b/test/e2e/storage/testsuites/multivolume.go index 45f720107f1..d158331a762 100644 --- a/test/e2e/storage/testsuites/multivolume.go +++ b/test/e2e/storage/testsuites/multivolume.go @@ -45,29 +45,29 @@ var _ TestSuite = &multiVolumeTestSuite{} func InitMultiVolumeTestSuite() TestSuite { return &multiVolumeTestSuite{ tsInfo: TestSuiteInfo{ - name: "multiVolume [Slow]", - testPatterns: []testpatterns.TestPattern{ + Name: "multiVolume [Slow]", + TestPatterns: []testpatterns.TestPattern{ testpatterns.FsVolModePreprovisionedPV, testpatterns.FsVolModeDynamicPV, testpatterns.BlockVolModePreprovisionedPV, testpatterns.BlockVolModeDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (t *multiVolumeTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *multiVolumeTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *multiVolumeTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *multiVolumeTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(testpatterns.PreprovisionedPV)) } -func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *multiVolumeTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() @@ -75,7 +75,7 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter cs clientset.Interface ns *v1.Namespace driver TestDriver - resources []*genericVolumeTestResource + resources []*VolumeResource intreeOps opCounts migratedOps opCounts @@ -112,7 +112,7 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter cleanup := func() { var errs []error for _, resource := range l.resources { - errs = append(errs, resource.cleanupResource()) + errs = append(errs, resource.CleanupResource()) } errs = append(errs, tryFunc(l.driverCleanup)) @@ -141,10 +141,10 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter numVols := 2 for i := 0; i < numVols; i++ { - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) l.resources = append(l.resources, resource) - pvcs = append(pvcs, resource.pvc) + pvcs = append(pvcs, resource.Pvc) } TestAccessMultipleVolumesAcrossPodRecreation(l.config.Framework, l.cs, l.ns.Name, @@ -184,10 +184,10 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter numVols := 2 for i := 0; i < numVols; i++ { - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) l.resources = append(l.resources, resource) - pvcs = append(pvcs, resource.pvc) + pvcs = append(pvcs, resource.Pvc) } TestAccessMultipleVolumesAcrossPodRecreation(l.config.Framework, l.cs, l.ns.Name, @@ -223,10 +223,10 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter // 1st volume should be block and set filesystem for 2nd and later volumes curPattern.VolMode = v1.PersistentVolumeFilesystem } - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(driver, l.config, curPattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(driver, l.config, curPattern, testVolumeSizeRange) l.resources = append(l.resources, resource) - pvcs = append(pvcs, resource.pvc) + pvcs = append(pvcs, resource.Pvc) } TestAccessMultipleVolumesAcrossPodRecreation(l.config.Framework, l.cs, l.ns.Name, @@ -275,10 +275,10 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter // 1st volume should be block and set filesystem for 2nd and later volumes curPattern.VolMode = v1.PersistentVolumeFilesystem } - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(driver, l.config, curPattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(driver, l.config, curPattern, testVolumeSizeRange) l.resources = append(l.resources, resource) - pvcs = append(pvcs, resource.pvc) + pvcs = append(pvcs, resource.Pvc) } TestAccessMultipleVolumesAcrossPodRecreation(l.config.Framework, l.cs, l.ns.Name, @@ -301,13 +301,13 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter } // Create volume - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(l.driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(l.driver, l.config, pattern, testVolumeSizeRange) l.resources = append(l.resources, resource) // Test access to the volume from pods on different node TestConcurrentAccessToSingleVolume(l.config.Framework, l.cs, l.ns.Name, - e2epod.NodeSelection{Name: l.config.ClientNodeName}, resource.pvc, numPods, true /* sameNode */) + e2epod.NodeSelection{Name: l.config.ClientNodeName}, resource.Pvc, numPods, true /* sameNode */) }) // This tests below configuration: @@ -336,13 +336,13 @@ func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatter } // Create volume - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - resource := createGenericVolumeTestResource(l.driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + resource := CreateVolumeResource(l.driver, l.config, pattern, testVolumeSizeRange) l.resources = append(l.resources, resource) // Test access to the volume from pods on different node TestConcurrentAccessToSingleVolume(l.config.Framework, l.cs, l.ns.Name, - e2epod.NodeSelection{Name: l.config.ClientNodeName}, resource.pvc, numPods, false /* sameNode */) + e2epod.NodeSelection{Name: l.config.ClientNodeName}, resource.Pvc, numPods, false /* sameNode */) }) } diff --git a/test/e2e/storage/testsuites/provisioning.go b/test/e2e/storage/testsuites/provisioning.go index 7d7b5a68b1a..ba312a49b0f 100644 --- a/test/e2e/storage/testsuites/provisioning.go +++ b/test/e2e/storage/testsuites/provisioning.go @@ -69,26 +69,26 @@ var _ TestSuite = &provisioningTestSuite{} func InitProvisioningTestSuite() TestSuite { return &provisioningTestSuite{ tsInfo: TestSuiteInfo{ - name: "provisioning", - testPatterns: []testpatterns.TestPattern{ + Name: "provisioning", + TestPatterns: []testpatterns.TestPattern{ testpatterns.DefaultFsDynamicPV, testpatterns.NtfsDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (p *provisioningTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (p *provisioningTestSuite) GetTestSuiteInfo() TestSuiteInfo { return p.tsInfo } -func (p *provisioningTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (p *provisioningTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (p *provisioningTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() @@ -111,7 +111,7 @@ func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatte ginkgo.BeforeEach(func() { // Check preconditions. if pattern.VolType != testpatterns.DynamicPV { - framework.Skipf("Suite %q does not support %v", p.tsInfo.name, pattern.VolType) + framework.Skipf("Suite %q does not support %v", p.tsInfo.Name, pattern.VolType) } ok := false dDriver, ok = driver.(DynamicPVTestDriver) @@ -133,7 +133,7 @@ func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatte l.config, l.driverCleanup = driver.PrepareTest(f) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, dInfo.InTreePluginName) l.cs = l.config.Framework.ClientSet - testVolumeSizeRange := p.getTestSuiteInfo().supportedSizeRange + testVolumeSizeRange := p.GetTestSuiteInfo().SupportedSizeRange driverVolumeSizeRange := dDriver.GetDriverInfo().SupportedSizeRange claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange) diff --git a/test/e2e/storage/testsuites/snapshottable.go b/test/e2e/storage/testsuites/snapshottable.go index 119f715a3fc..0a432ff5e69 100644 --- a/test/e2e/storage/testsuites/snapshottable.go +++ b/test/e2e/storage/testsuites/snapshottable.go @@ -56,25 +56,25 @@ var _ TestSuite = &snapshottableTestSuite{} func InitSnapshottableTestSuite() TestSuite { return &snapshottableTestSuite{ tsInfo: TestSuiteInfo{ - name: "snapshottable", - testPatterns: []testpatterns.TestPattern{ + Name: "snapshottable", + TestPatterns: []testpatterns.TestPattern{ testpatterns.DynamicSnapshot, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (s *snapshottableTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (s *snapshottableTestSuite) GetTestSuiteInfo() TestSuiteInfo { return s.tsInfo } -func (s *snapshottableTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *snapshottableTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (s *snapshottableTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *snapshottableTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { var ( sDriver SnapshottableTestDriver dDriver DynamicPVTestDriver @@ -117,7 +117,7 @@ func (s *snapshottableTestSuite) defineTests(driver TestDriver, pattern testpatt if class == nil { framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", driver.GetDriverInfo().Name) } - testVolumeSizeRange := s.getTestSuiteInfo().supportedSizeRange + testVolumeSizeRange := s.GetTestSuiteInfo().SupportedSizeRange driverVolumeSizeRange := dDriver.GetDriverInfo().SupportedSizeRange claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange) diff --git a/test/e2e/storage/testsuites/subpath.go b/test/e2e/storage/testsuites/subpath.go index 6c17ec48fa4..d9faf9d76c6 100644 --- a/test/e2e/storage/testsuites/subpath.go +++ b/test/e2e/storage/testsuites/subpath.go @@ -61,37 +61,37 @@ var _ TestSuite = &subPathTestSuite{} func InitSubPathTestSuite() TestSuite { return &subPathTestSuite{ tsInfo: TestSuiteInfo{ - name: "subPath", - testPatterns: []testpatterns.TestPattern{ + Name: "subPath", + TestPatterns: []testpatterns.TestPattern{ testpatterns.DefaultFsInlineVolume, testpatterns.DefaultFsPreprovisionedPV, testpatterns.DefaultFsDynamicPV, testpatterns.NtfsDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (s *subPathTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (s *subPathTestSuite) GetTestSuiteInfo() TestSuiteInfo { return s.tsInfo } -func (s *subPathTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *subPathTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap( testpatterns.PreprovisionedPV, testpatterns.InlineVolume)) } -func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (s *subPathTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() hostExec utils.HostExec - resource *genericVolumeTestResource + resource *VolumeResource roVolSource *v1.VolumeSource pod *v1.Pod formatPod *v1.Pod @@ -118,8 +118,8 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T // Now do the more expensive test initialization. l.config, l.driverCleanup = driver.PrepareTest(f) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, driver.GetDriverInfo().InTreePluginName) - testVolumeSizeRange := s.getTestSuiteInfo().supportedSizeRange - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := s.GetTestSuiteInfo().SupportedSizeRange + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) l.hostExec = utils.NewHostExec(f) // Setup subPath test dependent resource @@ -127,19 +127,19 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T switch volType { case testpatterns.InlineVolume: if iDriver, ok := driver.(InlineVolumeTestDriver); ok { - l.roVolSource = iDriver.GetVolumeSource(true, pattern.FsType, l.resource.volume) + l.roVolSource = iDriver.GetVolumeSource(true, pattern.FsType, l.resource.Volume) } case testpatterns.PreprovisionedPV: l.roVolSource = &v1.VolumeSource{ PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ - ClaimName: l.resource.pvc.Name, + ClaimName: l.resource.Pvc.Name, ReadOnly: true, }, } case testpatterns.DynamicPV: l.roVolSource = &v1.VolumeSource{ PersistentVolumeClaim: &v1.PersistentVolumeClaimVolumeSource{ - ClaimName: l.resource.pvc.Name, + ClaimName: l.resource.Pvc.Name, ReadOnly: true, }, } @@ -148,11 +148,11 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T } subPath := f.Namespace.Name - l.pod = SubpathTestPod(f, subPath, l.resource.volType, l.resource.volSource, true) + l.pod = SubpathTestPod(f, subPath, l.resource.VolType, l.resource.VolSource, true) l.pod.Spec.NodeName = l.config.ClientNodeName l.pod.Spec.NodeSelector = l.config.ClientNodeSelector - l.formatPod = volumeFormatPod(f, l.resource.volSource) + l.formatPod = volumeFormatPod(f, l.resource.VolSource) l.formatPod.Spec.NodeName = l.config.ClientNodeName l.formatPod.Spec.NodeSelector = l.config.ClientNodeSelector @@ -171,7 +171,7 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T } if l.resource != nil { - errs = append(errs, l.resource.cleanupResource()) + errs = append(errs, l.resource.CleanupResource()) l.resource = nil } @@ -348,9 +348,9 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T init() defer cleanup() - if strings.HasPrefix(l.resource.volType, "hostPath") || strings.HasPrefix(l.resource.volType, "csi-hostpath") { + if strings.HasPrefix(l.resource.VolType, "hostPath") || strings.HasPrefix(l.resource.VolType, "csi-hostpath") { // TODO: This skip should be removed once #61446 is fixed - framework.Skipf("%s volume type does not support reconstruction, skipping", l.resource.volType) + framework.Skipf("%s volume type does not support reconstruction, skipping", l.resource.VolType) } testSubpathReconstruction(f, l.hostExec, l.pod, true) @@ -390,7 +390,7 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T init() defer cleanup() if l.roVolSource == nil { - framework.Skipf("Volume type %v doesn't support readOnly source", l.resource.volType) + framework.Skipf("Volume type %v doesn't support readOnly source", l.resource.VolType) } origpod := l.pod.DeepCopy() @@ -418,7 +418,7 @@ func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.T init() defer cleanup() if l.roVolSource == nil { - framework.Skipf("Volume type %v doesn't support readOnly source", l.resource.volType) + framework.Skipf("Volume type %v doesn't support readOnly source", l.resource.VolType) } // Format the volume while it's writable diff --git a/test/e2e/storage/testsuites/topology.go b/test/e2e/storage/testsuites/topology.go index 410419cf38e..ec1312c0bae 100644 --- a/test/e2e/storage/testsuites/topology.go +++ b/test/e2e/storage/testsuites/topology.go @@ -46,7 +46,7 @@ type topologyTest struct { intreeOps opCounts migratedOps opCounts - resource genericVolumeTestResource + resource VolumeResource pod *v1.Pod allTopologies []topology } @@ -59,8 +59,8 @@ var _ TestSuite = &topologyTestSuite{} func InitTopologyTestSuite() TestSuite { return &topologyTestSuite{ tsInfo: TestSuiteInfo{ - name: "topology", - testPatterns: []testpatterns.TestPattern{ + Name: "topology", + TestPatterns: []testpatterns.TestPattern{ testpatterns.TopologyImmediate, testpatterns.TopologyDelayed, }, @@ -68,14 +68,14 @@ func InitTopologyTestSuite() TestSuite { } } -func (t *topologyTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *topologyTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *topologyTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *topologyTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *topologyTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { var ( dInfo = driver.GetDriverInfo() dDriver DynamicPVTestDriver @@ -111,10 +111,9 @@ func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns. // Now do the more expensive test initialization. l.config, l.driverCleanup = driver.PrepareTest(f) - l.resource = genericVolumeTestResource{ - driver: driver, - config: l.config, - pattern: pattern, + l.resource = VolumeResource{ + Config: l.config, + Pattern: pattern, } // After driver is installed, check driver topologies on nodes @@ -135,17 +134,17 @@ func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns. framework.Skipf("Not enough topologies in cluster -- skipping") } - l.resource.sc = dDriver.GetDynamicProvisionStorageClass(l.config, pattern.FsType) - framework.ExpectNotEqual(l.resource.sc, nil, "driver failed to provide a StorageClass") - l.resource.sc.VolumeBindingMode = &pattern.BindingMode + l.resource.Sc = dDriver.GetDynamicProvisionStorageClass(l.config, pattern.FsType) + framework.ExpectNotEqual(l.resource.Sc, nil, "driver failed to provide a StorageClass") + l.resource.Sc.VolumeBindingMode = &pattern.BindingMode - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange driverVolumeSizeRange := dDriver.GetDriverInfo().SupportedSizeRange claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange) - l.resource.pvc = e2epv.MakePersistentVolumeClaim(e2epv.PersistentVolumeClaimConfig{ + l.resource.Pvc = e2epv.MakePersistentVolumeClaim(e2epv.PersistentVolumeClaimConfig{ ClaimSize: claimSize, - StorageClassName: &(l.resource.sc.Name), + StorageClassName: &(l.resource.Sc.Name), }, l.config.Framework.Namespace.Name) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, dInfo.InTreePluginName) @@ -153,7 +152,7 @@ func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns. } cleanup := func(l topologyTest) { - t.cleanupResources(cs, &l) + t.CleanupResources(cs, &l) err := tryFunc(l.driverCleanup) l.driverCleanup = nil framework.ExpectNoError(err, "while cleaning up driver") @@ -172,7 +171,7 @@ func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns. if len(l.allTopologies) > dInfo.NumAllowedTopologies { excludedIndex = rand.Intn(len(l.allTopologies)) } - allowedTopologies := t.setAllowedTopologies(l.resource.sc, l.allTopologies, excludedIndex) + allowedTopologies := t.setAllowedTopologies(l.resource.Sc, l.allTopologies, excludedIndex) t.createResources(cs, &l, nil) @@ -201,7 +200,7 @@ func (t *topologyTestSuite) defineTests(driver TestDriver, pattern testpatterns. // Exclude one topology excludedIndex := rand.Intn(len(l.allTopologies)) - t.setAllowedTopologies(l.resource.sc, l.allTopologies, excludedIndex) + t.setAllowedTopologies(l.resource.Sc, l.allTopologies, excludedIndex) // Set pod nodeSelector to the excluded topology exprs := []v1.NodeSelectorRequirement{} @@ -322,19 +321,19 @@ func (t *topologyTestSuite) verifyNodeTopology(node *v1.Node, allowedTopos []top func (t *topologyTestSuite) createResources(cs clientset.Interface, l *topologyTest, affinity *v1.Affinity) { var err error - framework.Logf("Creating storage class object and pvc object for driver - sc: %v, pvc: %v", l.resource.sc, l.resource.pvc) + framework.Logf("Creating storage class object and pvc object for driver - sc: %v, pvc: %v", l.resource.Sc, l.resource.Pvc) ginkgo.By("Creating sc") - l.resource.sc, err = cs.StorageV1().StorageClasses().Create(l.resource.sc) + l.resource.Sc, err = cs.StorageV1().StorageClasses().Create(l.resource.Sc) framework.ExpectNoError(err) ginkgo.By("Creating pvc") - l.resource.pvc, err = cs.CoreV1().PersistentVolumeClaims(l.resource.pvc.Namespace).Create(l.resource.pvc) + l.resource.Pvc, err = cs.CoreV1().PersistentVolumeClaims(l.resource.Pvc.Namespace).Create(l.resource.Pvc) framework.ExpectNoError(err) ginkgo.By("Creating pod") l.pod = e2epod.MakeSecPod(l.config.Framework.Namespace.Name, - []*v1.PersistentVolumeClaim{l.resource.pvc}, + []*v1.PersistentVolumeClaim{l.resource.Pvc}, nil, false, "", @@ -347,13 +346,13 @@ func (t *topologyTestSuite) createResources(cs clientset.Interface, l *topologyT framework.ExpectNoError(err) } -func (t *topologyTestSuite) cleanupResources(cs clientset.Interface, l *topologyTest) { +func (t *topologyTestSuite) CleanupResources(cs clientset.Interface, l *topologyTest) { if l.pod != nil { ginkgo.By("Deleting pod") err := e2epod.DeletePodWithWait(cs, l.pod) framework.ExpectNoError(err, "while deleting pod") } - err := l.resource.cleanupResource() + err := l.resource.CleanupResource() framework.ExpectNoError(err, "while clean up resource") } diff --git a/test/e2e/storage/testsuites/volume_expand.go b/test/e2e/storage/testsuites/volume_expand.go index ea7824052fc..c982f87b1dd 100644 --- a/test/e2e/storage/testsuites/volume_expand.go +++ b/test/e2e/storage/testsuites/volume_expand.go @@ -54,33 +54,33 @@ var _ TestSuite = &volumeExpandTestSuite{} func InitVolumeExpandTestSuite() TestSuite { return &volumeExpandTestSuite{ tsInfo: TestSuiteInfo{ - name: "volume-expand", - testPatterns: []testpatterns.TestPattern{ + Name: "volume-expand", + TestPatterns: []testpatterns.TestPattern{ testpatterns.DefaultFsDynamicPV, testpatterns.BlockVolModeDynamicPV, testpatterns.DefaultFsDynamicPVAllowExpansion, testpatterns.BlockVolModeDynamicPVAllowExpansion, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (v *volumeExpandTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (v *volumeExpandTestSuite) GetTestSuiteInfo() TestSuiteInfo { return v.tsInfo } -func (v *volumeExpandTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (v *volumeExpandTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (v *volumeExpandTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() - resource *genericVolumeTestResource + resource *VolumeResource pod *v1.Pod pod2 *v1.Pod @@ -111,8 +111,8 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte // Now do the more expensive test initialization. l.config, l.driverCleanup = driver.PrepareTest(f) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, driver.GetDriverInfo().InTreePluginName) - testVolumeSizeRange := v.getTestSuiteInfo().supportedSizeRange - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := v.GetTestSuiteInfo().SupportedSizeRange + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) } cleanup := func() { @@ -132,7 +132,7 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte } if l.resource != nil { - errs = append(errs, l.resource.cleanupResource()) + errs = append(errs, l.resource.CleanupResource()) l.resource = nil } @@ -148,13 +148,13 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte defer cleanup() var err error - gomega.Expect(l.resource.sc.AllowVolumeExpansion).To(gomega.BeNil()) + gomega.Expect(l.resource.Sc.AllowVolumeExpansion).To(gomega.BeNil()) ginkgo.By("Expanding non-expandable pvc") - currentPvcSize := l.resource.pvc.Spec.Resources.Requests[v1.ResourceStorage] + currentPvcSize := l.resource.Pvc.Spec.Resources.Requests[v1.ResourceStorage] newSize := currentPvcSize.DeepCopy() newSize.Add(resource.MustParse("1Gi")) framework.Logf("currentPvcSize %v, newSize %v", currentPvcSize, newSize) - _, err = ExpandPVCSize(l.resource.pvc, newSize, f.ClientSet) + _, err = ExpandPVCSize(l.resource.Pvc, newSize, f.ClientSet) framework.ExpectError(err, "While updating non-expandable PVC") }) } else { @@ -164,7 +164,7 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte var err error ginkgo.By("Creating a pod with dynamically provisioned volume") - l.pod, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) + l.pod, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) defer func() { err = e2epod.DeletePodWithWait(f.ClientSet, l.pod) framework.ExpectNoError(err, "while cleaning up pod already deleted in resize test") @@ -177,31 +177,31 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte // We expand the PVC while no pod is using it to ensure offline expansion ginkgo.By("Expanding current pvc") - currentPvcSize := l.resource.pvc.Spec.Resources.Requests[v1.ResourceStorage] + currentPvcSize := l.resource.Pvc.Spec.Resources.Requests[v1.ResourceStorage] newSize := currentPvcSize.DeepCopy() newSize.Add(resource.MustParse("1Gi")) framework.Logf("currentPvcSize %v, newSize %v", currentPvcSize, newSize) - newPVC, err := ExpandPVCSize(l.resource.pvc, newSize, f.ClientSet) + newPVC, err := ExpandPVCSize(l.resource.Pvc, newSize, f.ClientSet) framework.ExpectNoError(err, "While updating pvc for more size") - l.resource.pvc = newPVC - gomega.Expect(l.resource.pvc).NotTo(gomega.BeNil()) + l.resource.Pvc = newPVC + gomega.Expect(l.resource.Pvc).NotTo(gomega.BeNil()) - pvcSize := l.resource.pvc.Spec.Resources.Requests[v1.ResourceStorage] + pvcSize := l.resource.Pvc.Spec.Resources.Requests[v1.ResourceStorage] if pvcSize.Cmp(newSize) != 0 { - framework.Failf("error updating pvc size %q", l.resource.pvc.Name) + framework.Failf("error updating pvc size %q", l.resource.Pvc.Name) } ginkgo.By("Waiting for cloudprovider resize to finish") - err = WaitForControllerVolumeResize(l.resource.pvc, f.ClientSet, totalResizeWaitPeriod) + err = WaitForControllerVolumeResize(l.resource.Pvc, f.ClientSet, totalResizeWaitPeriod) framework.ExpectNoError(err, "While waiting for pvc resize to finish") ginkgo.By("Checking for conditions on pvc") - npvc, err := WaitForPendingFSResizeCondition(l.resource.pvc, f.ClientSet) + npvc, err := WaitForPendingFSResizeCondition(l.resource.Pvc, f.ClientSet) framework.ExpectNoError(err, "While waiting for pvc to have fs resizing condition") - l.resource.pvc = npvc + l.resource.Pvc = npvc ginkgo.By("Creating a new pod with same volume") - l.pod2, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) + l.pod2, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) defer func() { err = e2epod.DeletePodWithWait(f.ClientSet, l.pod2) framework.ExpectNoError(err, "while cleaning up pod before exiting resizing test") @@ -209,10 +209,10 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte framework.ExpectNoError(err, "while recreating pod for resizing") ginkgo.By("Waiting for file system resize to finish") - l.resource.pvc, err = WaitForFSResize(l.resource.pvc, f.ClientSet) + l.resource.Pvc, err = WaitForFSResize(l.resource.Pvc, f.ClientSet) framework.ExpectNoError(err, "while waiting for fs resize to finish") - pvcConditions := l.resource.pvc.Status.Conditions + pvcConditions := l.resource.Pvc.Status.Conditions framework.ExpectEqual(len(pvcConditions), 0, "pvc should not have conditions") }) @@ -222,7 +222,7 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte var err error ginkgo.By("Creating a pod with dynamically provisioned volume") - l.pod, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) + l.pod, err = e2epod.CreateSecPodWithNodeSelection(f.ClientSet, f.Namespace.Name, []*v1.PersistentVolumeClaim{l.resource.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil, e2epod.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout) defer func() { err = e2epod.DeletePodWithWait(f.ClientSet, l.pod) framework.ExpectNoError(err, "while cleaning up pod already deleted in resize test") @@ -231,29 +231,29 @@ func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatte // We expand the PVC while no pod is using it to ensure offline expansion ginkgo.By("Expanding current pvc") - currentPvcSize := l.resource.pvc.Spec.Resources.Requests[v1.ResourceStorage] + currentPvcSize := l.resource.Pvc.Spec.Resources.Requests[v1.ResourceStorage] newSize := currentPvcSize.DeepCopy() newSize.Add(resource.MustParse("1Gi")) framework.Logf("currentPvcSize %v, newSize %v", currentPvcSize, newSize) - newPVC, err := ExpandPVCSize(l.resource.pvc, newSize, f.ClientSet) + newPVC, err := ExpandPVCSize(l.resource.Pvc, newSize, f.ClientSet) framework.ExpectNoError(err, "While updating pvc for more size") - l.resource.pvc = newPVC - gomega.Expect(l.resource.pvc).NotTo(gomega.BeNil()) + l.resource.Pvc = newPVC + gomega.Expect(l.resource.Pvc).NotTo(gomega.BeNil()) - pvcSize := l.resource.pvc.Spec.Resources.Requests[v1.ResourceStorage] + pvcSize := l.resource.Pvc.Spec.Resources.Requests[v1.ResourceStorage] if pvcSize.Cmp(newSize) != 0 { - framework.Failf("error updating pvc size %q", l.resource.pvc.Name) + framework.Failf("error updating pvc size %q", l.resource.Pvc.Name) } ginkgo.By("Waiting for cloudprovider resize to finish") - err = WaitForControllerVolumeResize(l.resource.pvc, f.ClientSet, totalResizeWaitPeriod) + err = WaitForControllerVolumeResize(l.resource.Pvc, f.ClientSet, totalResizeWaitPeriod) framework.ExpectNoError(err, "While waiting for pvc resize to finish") ginkgo.By("Waiting for file system resize to finish") - l.resource.pvc, err = WaitForFSResize(l.resource.pvc, f.ClientSet) + l.resource.Pvc, err = WaitForFSResize(l.resource.Pvc, f.ClientSet) framework.ExpectNoError(err, "while waiting for fs resize to finish") - pvcConditions := l.resource.pvc.Status.Conditions + pvcConditions := l.resource.Pvc.Status.Conditions framework.ExpectEqual(len(pvcConditions), 0, "pvc should not have conditions") }) diff --git a/test/e2e/storage/testsuites/volume_io.go b/test/e2e/storage/testsuites/volume_io.go index 740018f1265..f46ff9f1d83 100644 --- a/test/e2e/storage/testsuites/volume_io.go +++ b/test/e2e/storage/testsuites/volume_io.go @@ -63,35 +63,35 @@ var _ TestSuite = &volumeIOTestSuite{} func InitVolumeIOTestSuite() TestSuite { return &volumeIOTestSuite{ tsInfo: TestSuiteInfo{ - name: "volumeIO", - testPatterns: []testpatterns.TestPattern{ + Name: "volumeIO", + TestPatterns: []testpatterns.TestPattern{ testpatterns.DefaultFsInlineVolume, testpatterns.DefaultFsPreprovisionedPV, testpatterns.DefaultFsDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (t *volumeIOTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *volumeIOTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *volumeIOTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeIOTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap( testpatterns.PreprovisionedPV, testpatterns.InlineVolume)) } -func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeIOTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() - resource *genericVolumeTestResource + resource *VolumeResource intreeOps opCounts migratedOps opCounts @@ -116,9 +116,9 @@ func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns. l.config, l.driverCleanup = driver.PrepareTest(f) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, dInfo.InTreePluginName) - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) - if l.resource.volSource == nil { + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) + if l.resource.VolSource == nil { framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name) } @@ -127,7 +127,7 @@ func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns. cleanup := func() { var errs []error if l.resource != nil { - errs = append(errs, l.resource.cleanupResource()) + errs = append(errs, l.resource.CleanupResource()) l.resource = nil } @@ -155,7 +155,7 @@ func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns. podSec := v1.PodSecurityContext{ FSGroup: fsGroup, } - err := testVolumeIO(f, cs, convertTestConfig(l.config), *l.resource.volSource, &podSec, testFile, fileSizes) + err := testVolumeIO(f, cs, convertTestConfig(l.config), *l.resource.VolSource, &podSec, testFile, fileSizes) framework.ExpectNoError(err) }) } diff --git a/test/e2e/storage/testsuites/volumelimits.go b/test/e2e/storage/testsuites/volumelimits.go index 0e67e95f5da..642d4830334 100644 --- a/test/e2e/storage/testsuites/volumelimits.go +++ b/test/e2e/storage/testsuites/volumelimits.go @@ -60,30 +60,30 @@ var _ TestSuite = &volumeLimitsTestSuite{} func InitVolumeLimitsTestSuite() TestSuite { return &volumeLimitsTestSuite{ tsInfo: TestSuiteInfo{ - name: "volumeLimits", - testPatterns: []testpatterns.TestPattern{ + Name: "volumeLimits", + TestPatterns: []testpatterns.TestPattern{ testpatterns.FsVolModeDynamicPV, }, }, } } -func (t *volumeLimitsTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *volumeLimitsTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *volumeLimitsTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeLimitsTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (t *volumeLimitsTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeLimitsTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig testCleanup func() cs clientset.Interface ns *v1.Namespace - // genericVolumeTestResource contains pv, pvc, sc, etc. of the first pod created - resource *genericVolumeTestResource + // VolumeResource contains pv, pvc, sc, etc. of the first pod created + resource *VolumeResource // All created PVCs, incl. the one in resource pvcs []*v1.PersistentVolumeClaim @@ -141,14 +141,14 @@ func (t *volumeLimitsTestSuite) defineTests(driver TestDriver, pattern testpatte framework.Logf("Node %s can handle %d volumes of driver %s", nodeName, limit, driverInfo.Name) // Create a storage class and generate a PVC. Do not instantiate the PVC yet, keep it for the last pod. - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange driverVolumeSizeRange := dDriver.GetDriverInfo().SupportedSizeRange claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, dDriver) - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) defer func() { - err := l.resource.cleanupResource() + err := l.resource.CleanupResource() framework.ExpectNoError(err, "while cleaning up resource") }() defer func() { @@ -161,7 +161,7 @@ func (t *volumeLimitsTestSuite) defineTests(driver TestDriver, pattern testpatte for i := 0; i < limit; i++ { pvc := e2epv.MakePersistentVolumeClaim(e2epv.PersistentVolumeClaimConfig{ ClaimSize: claimSize, - StorageClassName: &l.resource.sc.Name, + StorageClassName: &l.resource.Sc.Name, }, l.ns.Name) pvc, err = l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Create(pvc) framework.ExpectNoError(err) @@ -186,7 +186,7 @@ func (t *volumeLimitsTestSuite) defineTests(driver TestDriver, pattern testpatte framework.ExpectNoError(err) ginkgo.By("Creating an extra pod with one volume to exceed the limit") - pod = e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.resource.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) + pod = e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.resource.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) // Use affinity to schedule everything on the right node e2epod.SetAffinity(&selection, nodeName) pod.Spec.Affinity = selection.Affinity diff --git a/test/e2e/storage/testsuites/volumemode.go b/test/e2e/storage/testsuites/volumemode.go index 4cdab57e715..d49c36d8d0b 100644 --- a/test/e2e/storage/testsuites/volumemode.go +++ b/test/e2e/storage/testsuites/volumemode.go @@ -57,36 +57,36 @@ var _ TestSuite = &volumeModeTestSuite{} func InitVolumeModeTestSuite() TestSuite { return &volumeModeTestSuite{ tsInfo: TestSuiteInfo{ - name: "volumeMode", - testPatterns: []testpatterns.TestPattern{ + Name: "volumeMode", + TestPatterns: []testpatterns.TestPattern{ testpatterns.FsVolModePreprovisionedPV, testpatterns.FsVolModeDynamicPV, testpatterns.BlockVolModePreprovisionedPV, testpatterns.BlockVolModeDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (t *volumeModeTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *volumeModeTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *volumeModeTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeModeTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } -func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumeModeTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() cs clientset.Interface ns *v1.Namespace - // genericVolumeTestResource contains pv, pvc, sc, etc., owns cleaning that up - genericVolumeTestResource + // VolumeResource contains pv, pvc, sc, etc., owns cleaning that up + VolumeResource intreeOps opCounts migratedOps opCounts @@ -114,7 +114,7 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, dInfo.InTreePluginName) } - // manualInit initializes l.genericVolumeTestResource without creating the PV & PVC objects. + // manualInit initializes l.VolumeResource without creating the PV & PVC objects. manualInit := func() { init() @@ -127,14 +127,13 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern volumeNodeAffinity *v1.VolumeNodeAffinity ) - l.genericVolumeTestResource = genericVolumeTestResource{ - driver: driver, - config: l.config, - pattern: pattern, + l.VolumeResource = VolumeResource{ + Config: l.config, + Pattern: pattern, } // Create volume for pre-provisioned volume tests - l.volume = CreateVolume(driver, l.config, pattern.VolType) + l.Volume = CreateVolume(driver, l.config, pattern.VolType) switch pattern.VolType { case testpatterns.PreprovisionedPV: @@ -144,31 +143,31 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern scName = fmt.Sprintf("%s-%s-sc-for-file", l.ns.Name, dInfo.Name) } if pDriver, ok := driver.(PreprovisionedPVTestDriver); ok { - pvSource, volumeNodeAffinity = pDriver.GetPersistentVolumeSource(false, fsType, l.volume) + pvSource, volumeNodeAffinity = pDriver.GetPersistentVolumeSource(false, fsType, l.Volume) if pvSource == nil { framework.Skipf("Driver %q does not define PersistentVolumeSource - skipping", dInfo.Name) } storageClass, pvConfig, pvcConfig := generateConfigsForPreprovisionedPVTest(scName, volBindMode, pattern.VolMode, *pvSource, volumeNodeAffinity) - l.sc = storageClass - l.pv = e2epv.MakePersistentVolume(pvConfig) - l.pvc = e2epv.MakePersistentVolumeClaim(pvcConfig, l.ns.Name) + l.Sc = storageClass + l.Pv = e2epv.MakePersistentVolume(pvConfig) + l.Pvc = e2epv.MakePersistentVolumeClaim(pvcConfig, l.ns.Name) } case testpatterns.DynamicPV: if dDriver, ok := driver.(DynamicPVTestDriver); ok { - l.sc = dDriver.GetDynamicProvisionStorageClass(l.config, fsType) - if l.sc == nil { + l.Sc = dDriver.GetDynamicProvisionStorageClass(l.config, fsType) + if l.Sc == nil { framework.Skipf("Driver %q does not define Dynamic Provision StorageClass - skipping", dInfo.Name) } - l.sc.VolumeBindingMode = &volBindMode - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange + l.Sc.VolumeBindingMode = &volBindMode + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange driverVolumeSizeRange := dInfo.SupportedSizeRange claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange) framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange) - l.pvc = e2epv.MakePersistentVolumeClaim(e2epv.PersistentVolumeClaimConfig{ + l.Pvc = e2epv.MakePersistentVolumeClaim(e2epv.PersistentVolumeClaimConfig{ ClaimSize: claimSize, - StorageClassName: &(l.sc.Name), + StorageClassName: &(l.Sc.Name), VolumeMode: &pattern.VolMode, }, l.ns.Name) } @@ -179,7 +178,7 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern cleanup := func() { var errs []error - errs = append(errs, l.cleanupResource()) + errs = append(errs, l.CleanupResource()) errs = append(errs, tryFunc(l.driverCleanup)) l.driverCleanup = nil framework.ExpectNoError(errors.NewAggregate(errs), "while cleaning up resource") @@ -198,22 +197,22 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern var err error ginkgo.By("Creating sc") - l.sc, err = l.cs.StorageV1().StorageClasses().Create(l.sc) + l.Sc, err = l.cs.StorageV1().StorageClasses().Create(l.Sc) framework.ExpectNoError(err, "Failed to create sc") ginkgo.By("Creating pv and pvc") - l.pv, err = l.cs.CoreV1().PersistentVolumes().Create(l.pv) + l.Pv, err = l.cs.CoreV1().PersistentVolumes().Create(l.Pv) framework.ExpectNoError(err, "Failed to create pv") // Prebind pv - l.pvc.Spec.VolumeName = l.pv.Name - l.pvc, err = l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Create(l.pvc) + l.Pvc.Spec.VolumeName = l.Pv.Name + l.Pvc, err = l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Create(l.Pvc) framework.ExpectNoError(err, "Failed to create pvc") - framework.ExpectNoError(e2epv.WaitOnPVandPVC(l.cs, l.ns.Name, l.pv, l.pvc), "Failed to bind pv and pvc") + framework.ExpectNoError(e2epv.WaitOnPVandPVC(l.cs, l.ns.Name, l.Pv, l.Pvc), "Failed to bind pv and pvc") ginkgo.By("Creating pod") - pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) + pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) // Setting node pod.Spec.NodeName = l.config.ClientNodeName pod, err = l.cs.CoreV1().Pods(l.ns.Name).Create(pod) @@ -252,16 +251,16 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern var err error ginkgo.By("Creating sc") - l.sc, err = l.cs.StorageV1().StorageClasses().Create(l.sc) + l.Sc, err = l.cs.StorageV1().StorageClasses().Create(l.Sc) framework.ExpectNoError(err, "Failed to create sc") ginkgo.By("Creating pv and pvc") - l.pvc, err = l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Create(l.pvc) + l.Pvc, err = l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Create(l.Pvc) framework.ExpectNoError(err, "Failed to create pvc") eventSelector := fields.Set{ "involvedObject.kind": "PersistentVolumeClaim", - "involvedObject.name": l.pvc.Name, + "involvedObject.name": l.Pvc.Name, "involvedObject.namespace": l.ns.Name, "reason": volevents.ProvisioningFailed, }.AsSelector().String() @@ -274,7 +273,7 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern } // Check the pvc is still pending - pvc, err := l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Get(l.pvc.Name, metav1.GetOptions{}) + pvc, err := l.cs.CoreV1().PersistentVolumeClaims(l.ns.Name).Get(l.Pvc.Name, metav1.GetOptions{}) framework.ExpectNoError(err, "Failed to re-read the pvc after event (or timeout)") framework.ExpectEqual(pvc.Status.Phase, v1.ClaimPending, "PVC phase isn't pending") }) @@ -286,13 +285,13 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern ginkgo.It("should fail to use a volume in a pod with mismatched mode [Slow]", func() { skipTestIfBlockNotSupported(driver) init() - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - l.genericVolumeTestResource = *createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + l.VolumeResource = *CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) defer cleanup() ginkgo.By("Creating pod") var err error - pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) + pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) // Change volumeMounts to volumeDevices and the other way around pod = swapVolumeMode(pod) @@ -335,13 +334,13 @@ func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpattern skipTestIfBlockNotSupported(driver) } init() - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - l.genericVolumeTestResource = *createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + l.VolumeResource = *CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) defer cleanup() ginkgo.By("Creating pod") var err error - pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) + pod := e2epod.MakeSecPod(l.ns.Name, []*v1.PersistentVolumeClaim{l.Pvc}, nil, false, "", false, false, e2epv.SELinuxLabel, nil) for i := range pod.Spec.Containers { pod.Spec.Containers[i].VolumeDevices = nil pod.Spec.Containers[i].VolumeMounts = nil diff --git a/test/e2e/storage/testsuites/volumes.go b/test/e2e/storage/testsuites/volumes.go index 1a741f46d16..b19ab02792e 100644 --- a/test/e2e/storage/testsuites/volumes.go +++ b/test/e2e/storage/testsuites/volumes.go @@ -46,8 +46,8 @@ var _ TestSuite = &volumesTestSuite{} func InitVolumesTestSuite() TestSuite { return &volumesTestSuite{ tsInfo: TestSuiteInfo{ - name: "volumes", - testPatterns: []testpatterns.TestPattern{ + Name: "volumes", + TestPatterns: []testpatterns.TestPattern{ // Default fsType testpatterns.DefaultFsInlineVolume, testpatterns.DefaultFsPreprovisionedPV, @@ -72,18 +72,18 @@ func InitVolumesTestSuite() TestSuite { testpatterns.BlockVolModePreprovisionedPV, testpatterns.BlockVolModeDynamicPV, }, - supportedSizeRange: volume.SizeRange{ + SupportedSizeRange: volume.SizeRange{ Min: "1Mi", }, }, } } -func (t *volumesTestSuite) getTestSuiteInfo() TestSuiteInfo { +func (t *volumesTestSuite) GetTestSuiteInfo() TestSuiteInfo { return t.tsInfo } -func (t *volumesTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumesTestSuite) SkipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) { } func skipExecTest(driver TestDriver) { @@ -100,12 +100,12 @@ func skipTestIfBlockNotSupported(driver TestDriver) { } } -func (t *volumesTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) { +func (t *volumesTestSuite) DefineTests(driver TestDriver, pattern testpatterns.TestPattern) { type local struct { config *PerTestConfig driverCleanup func() - resource *genericVolumeTestResource + resource *VolumeResource intreeOps opCounts migratedOps opCounts @@ -127,9 +127,9 @@ func (t *volumesTestSuite) defineTests(driver TestDriver, pattern testpatterns.T // Now do the more expensive test initialization. l.config, l.driverCleanup = driver.PrepareTest(f) l.intreeOps, l.migratedOps = getMigrationVolumeOpCounts(f.ClientSet, dInfo.InTreePluginName) - testVolumeSizeRange := t.getTestSuiteInfo().supportedSizeRange - l.resource = createGenericVolumeTestResource(driver, l.config, pattern, testVolumeSizeRange) - if l.resource.volSource == nil { + testVolumeSizeRange := t.GetTestSuiteInfo().SupportedSizeRange + l.resource = CreateVolumeResource(driver, l.config, pattern, testVolumeSizeRange) + if l.resource.VolSource == nil { framework.Skipf("Driver %q does not define volumeSource - skipping", dInfo.Name) } } @@ -137,7 +137,7 @@ func (t *volumesTestSuite) defineTests(driver TestDriver, pattern testpatterns.T cleanup := func() { var errs []error if l.resource != nil { - errs = append(errs, l.resource.cleanupResource()) + errs = append(errs, l.resource.CleanupResource()) l.resource = nil } @@ -160,7 +160,7 @@ func (t *volumesTestSuite) defineTests(driver TestDriver, pattern testpatterns.T tests := []volume.Test{ { - Volume: *l.resource.volSource, + Volume: *l.resource.VolSource, Mode: pattern.VolMode, File: "index.html", // Must match content @@ -193,7 +193,7 @@ func (t *volumesTestSuite) defineTests(driver TestDriver, pattern testpatterns.T init() defer cleanup() - testScriptInPod(f, l.resource.volType, l.resource.volSource, l.config) + testScriptInPod(f, l.resource.VolType, l.resource.VolSource, l.config) }) } }