k8s.io/kubernetes@v1.29.3/test/e2e/storage/framework/testpattern.go (about) 1 /* 2 Copyright 2018 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package framework 18 19 import ( 20 v1 "k8s.io/api/core/v1" 21 storagev1 "k8s.io/api/storage/v1" 22 "k8s.io/kubernetes/test/e2e/feature" 23 "k8s.io/kubernetes/test/e2e/framework" 24 e2evolume "k8s.io/kubernetes/test/e2e/framework/volume" 25 ) 26 27 const ( 28 // MinFileSize represents minimum file size (1 MiB) for testing 29 MinFileSize = 1 * e2evolume.MiB 30 31 // FileSizeSmall represents small file size (1 MiB) for testing 32 FileSizeSmall = 1 * e2evolume.MiB 33 // FileSizeMedium represents medium file size (100 MiB) for testing 34 FileSizeMedium = 100 * e2evolume.MiB 35 // FileSizeLarge represents large file size (1 GiB) for testing 36 FileSizeLarge = 1 * e2evolume.GiB 37 ) 38 39 // TestVolType represents a volume type to be tested in a TestSuite 40 type TestVolType string 41 42 var ( 43 // InlineVolume represents a volume type that is used inline in volumeSource 44 InlineVolume TestVolType = "InlineVolume" 45 // PreprovisionedPV represents a volume type for pre-provisioned Persistent Volume 46 PreprovisionedPV TestVolType = "PreprovisionedPV" 47 // DynamicPV represents a volume type for dynamic provisioned Persistent Volume 48 DynamicPV TestVolType = "DynamicPV" 49 // CSIInlineVolume represents a volume type that is defined inline and provided by a CSI driver. 50 CSIInlineVolume TestVolType = "CSIInlineVolume" 51 // GenericEphemeralVolume represents a volume type that is defined inline and provisioned through a PVC. 52 GenericEphemeralVolume TestVolType = "GenericEphemeralVolume" 53 ) 54 55 // TestSnapshotType represents a snapshot type to be tested in a TestSuite 56 type TestSnapshotType string 57 58 var ( 59 // DynamicCreatedSnapshot represents a snapshot type for dynamic created snapshot 60 DynamicCreatedSnapshot TestSnapshotType = "DynamicSnapshot" 61 // PreprovisionedCreatedSnapshot represents a snapshot type for pre-provisioned snapshot 62 PreprovisionedCreatedSnapshot TestSnapshotType = "PreprovisionedSnapshot" 63 ) 64 65 // TestSnapshotDeletionPolicy represents the deletion policy of the snapshot class 66 type TestSnapshotDeletionPolicy string 67 68 var ( 69 // DeleteSnapshot represents delete policy 70 DeleteSnapshot TestSnapshotDeletionPolicy = "Delete" 71 // RetainSnapshot represents retain policy 72 RetainSnapshot TestSnapshotDeletionPolicy = "Retain" 73 ) 74 75 func (t TestSnapshotDeletionPolicy) String() string { 76 return string(t) 77 } 78 79 // TestPattern represents a combination of parameters to be tested in a TestSuite 80 type TestPattern struct { 81 Name string // Name of TestPattern 82 TestTags []interface{} // additional parameters for framework.It, like framework.WithDisruptive() 83 VolType TestVolType // Volume type of the volume 84 FsType string // Fstype of the volume 85 VolMode v1.PersistentVolumeMode // PersistentVolumeMode of the volume 86 SnapshotType TestSnapshotType // Snapshot type of the snapshot 87 SnapshotDeletionPolicy TestSnapshotDeletionPolicy // Deletion policy of the snapshot class 88 BindingMode storagev1.VolumeBindingMode // VolumeBindingMode of the volume 89 AllowExpansion bool // AllowVolumeExpansion flag of the StorageClass 90 } 91 92 var ( 93 // Definitions for default fsType 94 95 // DefaultFsInlineVolume is TestPattern for "Inline-volume (default fs)" 96 DefaultFsInlineVolume = TestPattern{ 97 Name: "Inline-volume (default fs)", 98 VolType: InlineVolume, 99 } 100 // DefaultFsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (default fs)" 101 DefaultFsCSIEphemeralVolume = TestPattern{ 102 Name: "CSI Ephemeral-volume (default fs)", 103 VolType: CSIInlineVolume, 104 } 105 // DefaultFsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (default fs)" 106 DefaultFsGenericEphemeralVolume = TestPattern{ 107 Name: "Generic Ephemeral-volume (default fs)", 108 VolType: GenericEphemeralVolume, 109 AllowExpansion: true, 110 } 111 // DefaultFsPreprovisionedPV is TestPattern for "Pre-provisioned PV (default fs)" 112 DefaultFsPreprovisionedPV = TestPattern{ 113 Name: "Pre-provisioned PV (default fs)", 114 VolType: PreprovisionedPV, 115 } 116 // DefaultFsDynamicPV is TestPattern for "Dynamic PV (default fs)" 117 DefaultFsDynamicPV = TestPattern{ 118 Name: "Dynamic PV (default fs)", 119 VolType: DynamicPV, 120 SnapshotType: DynamicCreatedSnapshot, 121 SnapshotDeletionPolicy: DeleteSnapshot, 122 } 123 124 // Definitions for ext3 125 126 // Ext3InlineVolume is TestPattern for "Inline-volume (ext3)" 127 Ext3InlineVolume = TestPattern{ 128 Name: "Inline-volume (ext3)", 129 VolType: InlineVolume, 130 FsType: "ext3", 131 } 132 // Ext3CSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ext3)" 133 Ext3CSIEphemeralVolume = TestPattern{ 134 Name: "CSI Ephemeral-volume (ext3)", 135 VolType: CSIInlineVolume, 136 FsType: "ext3", 137 } 138 // Ext3GenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ext3)" 139 Ext3GenericEphemeralVolume = TestPattern{ 140 Name: "Generic Ephemeral-volume (ext3)", 141 VolType: GenericEphemeralVolume, 142 FsType: "ext3", 143 } 144 // Ext3PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext3)" 145 Ext3PreprovisionedPV = TestPattern{ 146 Name: "Pre-provisioned PV (ext3)", 147 VolType: PreprovisionedPV, 148 FsType: "ext3", 149 } 150 // Ext3DynamicPV is TestPattern for "Dynamic PV (ext3)" 151 Ext3DynamicPV = TestPattern{ 152 Name: "Dynamic PV (ext3)", 153 VolType: DynamicPV, 154 FsType: "ext3", 155 } 156 157 // Definitions for ext4 158 159 // Ext4InlineVolume is TestPattern for "Inline-volume (ext4)" 160 Ext4InlineVolume = TestPattern{ 161 Name: "Inline-volume (ext4)", 162 VolType: InlineVolume, 163 FsType: "ext4", 164 } 165 // Ext4CSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ext4)" 166 Ext4CSIEphemeralVolume = TestPattern{ 167 Name: "CSI Ephemeral-volume (ext4)", 168 VolType: CSIInlineVolume, 169 FsType: "ext4", 170 } 171 // Ext4GenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ext4)" 172 Ext4GenericEphemeralVolume = TestPattern{ 173 Name: "Generic Ephemeral-volume (ext4)", 174 VolType: GenericEphemeralVolume, 175 FsType: "ext4", 176 } 177 // Ext4PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext4)" 178 Ext4PreprovisionedPV = TestPattern{ 179 Name: "Pre-provisioned PV (ext4)", 180 VolType: PreprovisionedPV, 181 FsType: "ext4", 182 } 183 // Ext4DynamicPV is TestPattern for "Dynamic PV (ext4)" 184 Ext4DynamicPV = TestPattern{ 185 Name: "Dynamic PV (ext4)", 186 VolType: DynamicPV, 187 FsType: "ext4", 188 SnapshotType: DynamicCreatedSnapshot, 189 SnapshotDeletionPolicy: DeleteSnapshot, 190 } 191 192 // Definitions for xfs 193 194 // XfsInlineVolume is TestPattern for "Inline-volume (xfs)" 195 XfsInlineVolume = TestPattern{ 196 Name: "Inline-volume (xfs)", 197 VolType: InlineVolume, 198 FsType: "xfs", 199 TestTags: []interface{}{framework.WithSlow()}, 200 } 201 // XfsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (xfs)" 202 XfsCSIEphemeralVolume = TestPattern{ 203 Name: "CSI Ephemeral-volume (xfs)", 204 VolType: CSIInlineVolume, 205 FsType: "xfs", 206 TestTags: []interface{}{framework.WithSlow()}, 207 } 208 // XfsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (xfs)" 209 XfsGenericEphemeralVolume = TestPattern{ 210 Name: "Generic Ephemeral-volume (xfs)", 211 VolType: GenericEphemeralVolume, 212 FsType: "xfs", 213 TestTags: []interface{}{framework.WithSlow()}, 214 } 215 // XfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (xfs)" 216 XfsPreprovisionedPV = TestPattern{ 217 Name: "Pre-provisioned PV (xfs)", 218 VolType: PreprovisionedPV, 219 FsType: "xfs", 220 TestTags: []interface{}{framework.WithSlow()}, 221 } 222 // XfsDynamicPV is TestPattern for "Dynamic PV (xfs)" 223 XfsDynamicPV = TestPattern{ 224 Name: "Dynamic PV (xfs)", 225 VolType: DynamicPV, 226 FsType: "xfs", 227 TestTags: []interface{}{framework.WithSlow()}, 228 SnapshotType: DynamicCreatedSnapshot, 229 SnapshotDeletionPolicy: DeleteSnapshot, 230 } 231 232 // Definitions for ntfs 233 234 // NtfsInlineVolume is TestPattern for "Inline-volume (ntfs)" 235 NtfsInlineVolume = TestPattern{ 236 Name: "Inline-volume (ntfs)", 237 VolType: InlineVolume, 238 FsType: "ntfs", 239 TestTags: []interface{}{feature.Windows}, 240 } 241 // NtfsCSIEphemeralVolume is TestPattern for "CSI Ephemeral-volume (ntfs)" 242 NtfsCSIEphemeralVolume = TestPattern{ 243 Name: "CSI Ephemeral-volume (ntfs) [alpha]", 244 VolType: CSIInlineVolume, 245 FsType: "ntfs", 246 TestTags: []interface{}{feature.Windows}, 247 } 248 // NtfsGenericEphemeralVolume is TestPattern for "Generic Ephemeral-volume (ntfs)" 249 NtfsGenericEphemeralVolume = TestPattern{ 250 Name: "Generic Ephemeral-volume (ntfs)", 251 VolType: GenericEphemeralVolume, 252 FsType: "ntfs", 253 TestTags: []interface{}{feature.Windows}, 254 } 255 // NtfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (ntfs)" 256 NtfsPreprovisionedPV = TestPattern{ 257 Name: "Pre-provisioned PV (ntfs)", 258 VolType: PreprovisionedPV, 259 FsType: "ntfs", 260 TestTags: []interface{}{feature.Windows}, 261 } 262 // NtfsDynamicPV is TestPattern for "Dynamic PV (ntfs)" 263 NtfsDynamicPV = TestPattern{ 264 Name: "Dynamic PV (ntfs)", 265 VolType: DynamicPV, 266 FsType: "ntfs", 267 TestTags: []interface{}{feature.Windows}, 268 SnapshotDeletionPolicy: DeleteSnapshot, 269 SnapshotType: DynamicCreatedSnapshot, 270 } 271 272 // Definitions for Filesystem volume mode 273 274 // FsVolModePreprovisionedPV is TestPattern for "Pre-provisioned PV (filesystem)" 275 FsVolModePreprovisionedPV = TestPattern{ 276 Name: "Pre-provisioned PV (filesystem volmode)", 277 VolType: PreprovisionedPV, 278 VolMode: v1.PersistentVolumeFilesystem, 279 } 280 // FsVolModeDynamicPV is TestPattern for "Dynamic PV (filesystem)" 281 FsVolModeDynamicPV = TestPattern{ 282 Name: "Dynamic PV (filesystem volmode)", 283 VolType: DynamicPV, 284 VolMode: v1.PersistentVolumeFilesystem, 285 } 286 287 // Definitions for block volume mode 288 289 // BlockVolModePreprovisionedPV is TestPattern for "Pre-provisioned PV (block)" 290 BlockVolModePreprovisionedPV = TestPattern{ 291 Name: "Pre-provisioned PV (block volmode)", 292 VolType: PreprovisionedPV, 293 VolMode: v1.PersistentVolumeBlock, 294 } 295 // BlockVolModeDynamicPV is TestPattern for "Dynamic PV (block)" 296 BlockVolModeDynamicPV = TestPattern{ 297 Name: "Dynamic PV (block volmode)", 298 VolType: DynamicPV, 299 VolMode: v1.PersistentVolumeBlock, 300 SnapshotType: DynamicCreatedSnapshot, 301 SnapshotDeletionPolicy: DeleteSnapshot, 302 } 303 // BlockVolModeGenericEphemeralVolume is for generic ephemeral inline volumes in raw block mode. 304 BlockVolModeGenericEphemeralVolume = TestPattern{ 305 Name: "Generic Ephemeral-volume (block volmode) (late-binding)", 306 VolType: GenericEphemeralVolume, 307 VolMode: v1.PersistentVolumeBlock, 308 BindingMode: storagev1.VolumeBindingWaitForFirstConsumer, 309 AllowExpansion: true, 310 } 311 312 // Definitions for snapshot case 313 314 // DynamicSnapshotDelete is TestPattern for "Dynamic snapshot" 315 DynamicSnapshotDelete = TestPattern{ 316 Name: "Dynamic Snapshot (delete policy)", 317 SnapshotType: DynamicCreatedSnapshot, 318 SnapshotDeletionPolicy: DeleteSnapshot, 319 VolType: DynamicPV, 320 } 321 // PreprovisionedSnapshotDelete is TestPattern for "Pre-provisioned snapshot" 322 PreprovisionedSnapshotDelete = TestPattern{ 323 Name: "Pre-provisioned Snapshot (delete policy)", 324 SnapshotType: PreprovisionedCreatedSnapshot, 325 SnapshotDeletionPolicy: DeleteSnapshot, 326 VolType: DynamicPV, 327 } 328 // EphemeralSnapshotDelete is TestPattern for snapshotting of a generic ephemeral volume 329 // where snapshots are deleted. 330 EphemeralSnapshotDelete = TestPattern{ 331 Name: "Ephemeral Snapshot (delete policy)", 332 SnapshotType: DynamicCreatedSnapshot, 333 SnapshotDeletionPolicy: DeleteSnapshot, 334 VolType: GenericEphemeralVolume, 335 } 336 // DynamicSnapshotRetain is TestPattern for "Dynamic snapshot" 337 DynamicSnapshotRetain = TestPattern{ 338 Name: "Dynamic Snapshot (retain policy)", 339 SnapshotType: DynamicCreatedSnapshot, 340 SnapshotDeletionPolicy: RetainSnapshot, 341 VolType: DynamicPV, 342 } 343 // PreprovisionedSnapshotRetain is TestPattern for "Pre-provisioned snapshot" 344 PreprovisionedSnapshotRetain = TestPattern{ 345 Name: "Pre-provisioned Snapshot (retain policy)", 346 SnapshotType: PreprovisionedCreatedSnapshot, 347 SnapshotDeletionPolicy: RetainSnapshot, 348 VolType: DynamicPV, 349 } 350 // EphemeralSnapshotDelete is TestPattern for snapshotting of a generic ephemeral volume 351 // where snapshots are preserved. 352 EphemeralSnapshotRetain = TestPattern{ 353 Name: "Ephemeral Snapshot (retain policy)", 354 SnapshotType: DynamicCreatedSnapshot, 355 SnapshotDeletionPolicy: RetainSnapshot, 356 VolType: GenericEphemeralVolume, 357 } 358 359 // Definitions for volume expansion case 360 361 // DefaultFsDynamicPVAllowExpansion is TestPattern for "Dynamic PV (default fs)(allowExpansion)" 362 DefaultFsDynamicPVAllowExpansion = TestPattern{ 363 Name: "Dynamic PV (default fs)(allowExpansion)", 364 VolType: DynamicPV, 365 AllowExpansion: true, 366 } 367 368 // NtfsDynamicPVAllowExpansion is TestPattern for "Dynamic PV (default fs)(allowExpansion)" 369 NtfsDynamicPVAllowExpansion = TestPattern{ 370 Name: "Dynamic PV (ntfs)(allowExpansion)", 371 VolType: DynamicPV, 372 AllowExpansion: true, 373 FsType: "ntfs", 374 TestTags: []interface{}{feature.Windows}, 375 } 376 377 // BlockVolModeDynamicPVAllowExpansion is TestPattern for "Dynamic PV (block volmode)(allowExpansion)" 378 BlockVolModeDynamicPVAllowExpansion = TestPattern{ 379 Name: "Dynamic PV (block volmode)(allowExpansion)", 380 VolType: DynamicPV, 381 VolMode: v1.PersistentVolumeBlock, 382 AllowExpansion: true, 383 } 384 385 // Definitions for topology tests 386 387 // TopologyImmediate is TestPattern for immediate binding 388 TopologyImmediate = TestPattern{ 389 Name: "Dynamic PV (immediate binding)", 390 VolType: DynamicPV, 391 BindingMode: storagev1.VolumeBindingImmediate, 392 } 393 394 // TopologyDelayed is TestPattern for delayed binding 395 TopologyDelayed = TestPattern{ 396 Name: "Dynamic PV (delayed binding)", 397 VolType: DynamicPV, 398 BindingMode: storagev1.VolumeBindingWaitForFirstConsumer, 399 } 400 ) 401 402 // NewVolTypeMap creates a map with the given TestVolTypes enabled 403 func NewVolTypeMap(types ...TestVolType) map[TestVolType]bool { 404 m := map[TestVolType]bool{} 405 for _, t := range types { 406 m[t] = true 407 } 408 return m 409 }