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  }