Skip to content

Commit 2468a24

Browse files
committed
GenericEphemeralVolume: E2E test
This extends the existing "ephemeral volume" tests to also cover generic ephemeral inline volumes. They get instantiated for all drivers (CSI and others) which support persistent volume provisioning, for several different filesystems. Configuring the number of inline volumes via a flag with a computed name had been identified as problematic before and now gets removed because re-using the tests as a stress test with a higher number of volumes should be added and configured separately.
1 parent ff3e5e0 commit 2468a24

File tree

4 files changed

+217
-81
lines changed

4 files changed

+217
-81
lines changed

test/e2e/storage/testpatterns/testpattern.go

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ var (
4646
DynamicPV TestVolType = "DynamicPV"
4747
// CSIInlineVolume represents a volume type that is defined inline and provided by a CSI driver.
4848
CSIInlineVolume TestVolType = "CSIInlineVolume"
49+
// GenericEphemeralVolume represents a volume type that is defined inline and provisioned through a PVC.
50+
GenericEphemeralVolume TestVolType = "GenericEphemeralVolume"
4951
)
5052

5153
// TestSnapshotType represents a snapshot type to be tested in a TestSuite
@@ -76,11 +78,16 @@ var (
7678
Name: "Inline-volume (default fs)",
7779
VolType: InlineVolume,
7880
}
79-
// DefaultFsEphemeralVolume is TestPattern for "Ephemeral-volume (default fs)"
80-
DefaultFsEphemeralVolume = TestPattern{
81-
Name: "Ephemeral-volume (default fs)",
81+
// DefaultFsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (default fs)"
82+
DefaultFsCSIEphemeralVolume = TestPattern{
83+
Name: "CSI Ephemeral-volume (default fs)",
8284
VolType: CSIInlineVolume,
8385
}
86+
// DefaultFsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (default fs)"
87+
DefaultFsGenericEphemeralVolume = TestPattern{
88+
Name: "Generic Ephemeral-volume (default fs) [Feature:GenericEphemeralVolume]",
89+
VolType: GenericEphemeralVolume,
90+
}
8491
// DefaultFsPreprovisionedPV is TestPattern for "Pre-provisioned PV (default fs)"
8592
DefaultFsPreprovisionedPV = TestPattern{
8693
Name: "Pre-provisioned PV (default fs)",
@@ -100,10 +107,16 @@ var (
100107
VolType: InlineVolume,
101108
FsType: "ext3",
102109
}
103-
// Ext3EphemeralVolume is TestPattern for "Ephemeral-volume (ext3)"
104-
Ext3EphemeralVolume = TestPattern{
105-
Name: "Ephemeral-volume (ext3)",
106-
VolType: InlineVolume,
110+
// Ext3CSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ext3)"
111+
Ext3CSIEphemeralVolume = TestPattern{
112+
Name: "CSI Ephemeral-volume (ext3)",
113+
VolType: CSIInlineVolume,
114+
FsType: "ext3",
115+
}
116+
// Ext3GenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ext3)"
117+
Ext3GenericEphemeralVolume = TestPattern{
118+
Name: "Generic Ephemeral-volume (ext3) [Feature:GenericEphemeralVolume]",
119+
VolType: GenericEphemeralVolume,
107120
FsType: "ext3",
108121
}
109122
// Ext3PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext3)"
@@ -127,12 +140,18 @@ var (
127140
VolType: InlineVolume,
128141
FsType: "ext4",
129142
}
130-
// Ext4EphemeralVolume is TestPattern for "Ephemeral-volume (ext4)"
131-
Ext4EphemeralVolume = TestPattern{
132-
Name: "Ephemeral-volume (ext4)",
143+
// Ext4CSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ext4)"
144+
Ext4CSIEphemeralVolume = TestPattern{
145+
Name: "CSI Ephemeral-volume (ext4)",
133146
VolType: CSIInlineVolume,
134147
FsType: "ext4",
135148
}
149+
// Ext4GenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ext4)"
150+
Ext4GenericEphemeralVolume = TestPattern{
151+
Name: "Generic Ephemeral-volume (ext4) [Feature:GenericEphemeralVolume]",
152+
VolType: GenericEphemeralVolume,
153+
FsType: "ext4",
154+
}
136155
// Ext4PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext4)"
137156
Ext4PreprovisionedPV = TestPattern{
138157
Name: "Pre-provisioned PV (ext4)",
@@ -155,13 +174,20 @@ var (
155174
FsType: "xfs",
156175
FeatureTag: "[Slow]",
157176
}
158-
// XfsEphemeralVolume is TestPattern for "Ephemeral-volume (xfs)"
159-
XfsEphemeralVolume = TestPattern{
160-
Name: "Ephemeral-volume (xfs)",
177+
// XfsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (xfs)"
178+
XfsCSIEphemeralVolume = TestPattern{
179+
Name: "CSI Ephemeral-volume (xfs)",
161180
VolType: CSIInlineVolume,
162181
FsType: "xfs",
163182
FeatureTag: "[Slow]",
164183
}
184+
// XfsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (xfs)"
185+
XfsGenericEphemeralVolume = TestPattern{
186+
Name: "Generic Ephemeral-volume (xfs) [Feature:GenericEphemeralVolume]",
187+
VolType: GenericEphemeralVolume,
188+
FsType: "xfs",
189+
FeatureTag: "[Slow]",
190+
}
165191
// XfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (xfs)"
166192
XfsPreprovisionedPV = TestPattern{
167193
Name: "Pre-provisioned PV (xfs)",
@@ -186,13 +212,20 @@ var (
186212
FsType: "ntfs",
187213
FeatureTag: "[sig-windows]",
188214
}
189-
// NtfsEphemeralVolume is TestPattern for "Ephemeral-volume (ntfs)"
190-
NtfsEphemeralVolume = TestPattern{
191-
Name: "Ephemeral-volume (ntfs)",
215+
// NtfsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ntfs)"
216+
NtfsCSIEphemeralVolume = TestPattern{
217+
Name: "CSI Ephemeral-volume (ntfs) [alpha]",
192218
VolType: CSIInlineVolume,
193219
FsType: "ntfs",
194220
FeatureTag: "[sig-windows]",
195221
}
222+
// NtfsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ntfs)"
223+
NtfsGenericEphemeralVolume = TestPattern{
224+
Name: "Generic Ephemeral-volume (ntfs) [Feature:GenericEphemeralVolume]",
225+
VolType: GenericEphemeralVolume,
226+
FsType: "ntfs",
227+
FeatureTag: "[sig-windows]",
228+
}
196229
// NtfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (ntfs)"
197230
NtfsPreprovisionedPV = TestPattern{
198231
Name: "Pre-provisioned PV (ntfs)",

test/e2e/storage/testsuites/base.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ func skipUnsupportedTest(driver TestDriver, pattern testpatterns.TestPattern) {
168168
_, isSupported = driver.(InlineVolumeTestDriver)
169169
case testpatterns.PreprovisionedPV:
170170
_, isSupported = driver.(PreprovisionedPVTestDriver)
171-
case testpatterns.DynamicPV:
171+
case testpatterns.DynamicPV, testpatterns.GenericEphemeralVolume:
172172
_, isSupported = driver.(DynamicPVTestDriver)
173173
case testpatterns.CSIInlineVolume:
174174
_, isSupported = driver.(EphemeralTestDriver)
@@ -240,7 +240,7 @@ func CreateVolumeResource(driver TestDriver, config *PerTestConfig, pattern test
240240
r.VolSource = createVolumeSource(r.Pvc.Name, false /* readOnly */)
241241
}
242242
}
243-
case testpatterns.DynamicPV:
243+
case testpatterns.DynamicPV, testpatterns.GenericEphemeralVolume:
244244
framework.Logf("Creating resource for dynamic PV")
245245
if dDriver, ok := driver.(DynamicPVTestDriver); ok {
246246
var err error
@@ -262,10 +262,16 @@ func CreateVolumeResource(driver TestDriver, config *PerTestConfig, pattern test
262262
r.Sc, err = cs.StorageV1().StorageClasses().Create(context.TODO(), r.Sc, metav1.CreateOptions{})
263263
framework.ExpectNoError(err)
264264

265-
if r.Sc != nil {
265+
switch pattern.VolType {
266+
case testpatterns.DynamicPV:
266267
r.Pv, r.Pvc = createPVCPVFromDynamicProvisionSC(
267268
f, dInfo.Name, claimSize, r.Sc, pattern.VolMode, dInfo.RequiredAccessModes)
268269
r.VolSource = createVolumeSource(r.Pvc.Name, false /* readOnly */)
270+
case testpatterns.GenericEphemeralVolume:
271+
driverVolumeSizeRange := dDriver.GetDriverInfo().SupportedSizeRange
272+
claimSize, err := getSizeRangesIntersection(testVolumeSizeRange, driverVolumeSizeRange)
273+
framework.ExpectNoError(err, "determine intersection of test size range %+v and driver size range %+v", testVolumeSizeRange, driverVolumeSizeRange)
274+
r.VolSource = createEphemeralVolumeSource(r.Sc.Name, dInfo.RequiredAccessModes, claimSize, false /* readOnly */)
269275
}
270276
}
271277
case testpatterns.CSIInlineVolume:
@@ -297,7 +303,28 @@ func createVolumeSource(pvcName string, readOnly bool) *v1.VolumeSource {
297303
ReadOnly: readOnly,
298304
},
299305
}
306+
}
300307

308+
func createEphemeralVolumeSource(scName string, accessModes []v1.PersistentVolumeAccessMode, claimSize string, readOnly bool) *v1.VolumeSource {
309+
if len(accessModes) == 0 {
310+
accessModes = []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}
311+
}
312+
return &v1.VolumeSource{
313+
Ephemeral: &v1.EphemeralVolumeSource{
314+
VolumeClaimTemplate: &v1.PersistentVolumeClaimTemplate{
315+
Spec: v1.PersistentVolumeClaimSpec{
316+
StorageClassName: &scName,
317+
AccessModes: accessModes,
318+
Resources: v1.ResourceRequirements{
319+
Requests: v1.ResourceList{
320+
v1.ResourceStorage: resource.MustParse(claimSize),
321+
},
322+
},
323+
},
324+
},
325+
ReadOnly: readOnly,
326+
},
327+
}
301328
}
302329

303330
// CleanupResource cleans up VolumeResource

test/e2e/storage/testsuites/driveroperations.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,13 @@ func GetDriverNameWithFeatureTags(driver TestDriver) string {
4040
// CreateVolume creates volume for test unless dynamicPV or CSI ephemeral inline volume test
4141
func CreateVolume(driver TestDriver, config *PerTestConfig, volType testpatterns.TestVolType) TestVolume {
4242
switch volType {
43-
case testpatterns.InlineVolume:
44-
fallthrough
45-
case testpatterns.PreprovisionedPV:
43+
case testpatterns.InlineVolume, testpatterns.PreprovisionedPV:
4644
if pDriver, ok := driver.(PreprovisionedVolumeTestDriver); ok {
4745
return pDriver.CreateVolume(config, volType)
4846
}
49-
case testpatterns.CSIInlineVolume:
50-
fallthrough
51-
case testpatterns.DynamicPV:
47+
case testpatterns.CSIInlineVolume,
48+
testpatterns.GenericEphemeralVolume,
49+
testpatterns.DynamicPV:
5250
// No need to create volume
5351
default:
5452
framework.Failf("Invalid volType specified: %v", volType)

0 commit comments

Comments
 (0)