mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 22:46:12 +00:00
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.
This commit is contained in:
parent
bea2ca73f3
commit
160da35b23
@ -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)",
|
||||
|
@ -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"))
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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()
|
||||
|
@ -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 */)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
}
|
||||
|
@ -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")
|
||||
})
|
||||
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user