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