testpattern.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. /*
  2. Copyright 2018 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package testpatterns
  14. import (
  15. v1 "k8s.io/api/core/v1"
  16. storagev1 "k8s.io/api/storage/v1"
  17. "k8s.io/kubernetes/test/e2e/framework/volume"
  18. )
  19. const (
  20. // MinFileSize represents minimum file size (1 MiB) for testing
  21. MinFileSize = 1 * volume.MiB
  22. // FileSizeSmall represents small file size (1 MiB) for testing
  23. FileSizeSmall = 1 * volume.MiB
  24. // FileSizeMedium represents medium file size (100 MiB) for testing
  25. FileSizeMedium = 100 * volume.MiB
  26. // FileSizeLarge represents large file size (1 GiB) for testing
  27. FileSizeLarge = 1 * volume.GiB
  28. )
  29. // TestVolType represents a volume type to be tested in a TestSuite
  30. type TestVolType string
  31. var (
  32. // InlineVolume represents a volume type that is used inline in volumeSource
  33. InlineVolume TestVolType = "InlineVolume"
  34. // PreprovisionedPV represents a volume type for pre-provisioned Persistent Volume
  35. PreprovisionedPV TestVolType = "PreprovisionedPV"
  36. // DynamicPV represents a volume type for dynamic provisioned Persistent Volume
  37. DynamicPV TestVolType = "DynamicPV"
  38. // CSIInlineVolume represents a volume type that is defined inline and provided by a CSI driver.
  39. CSIInlineVolume TestVolType = "CSIInlineVolume"
  40. )
  41. // TestSnapshotType represents a snapshot type to be tested in a TestSuite
  42. type TestSnapshotType string
  43. var (
  44. // DynamicCreatedSnapshot represents a snapshot type for dynamic created snapshot
  45. DynamicCreatedSnapshot TestSnapshotType = "DynamicSnapshot"
  46. )
  47. // TestPattern represents a combination of parameters to be tested in a TestSuite
  48. type TestPattern struct {
  49. Name string // Name of TestPattern
  50. FeatureTag string // featureTag for the TestSuite
  51. VolType TestVolType // Volume type of the volume
  52. FsType string // Fstype of the volume
  53. VolMode v1.PersistentVolumeMode // PersistentVolumeMode of the volume
  54. SnapshotType TestSnapshotType // Snapshot type of the snapshot
  55. BindingMode storagev1.VolumeBindingMode // VolumeBindingMode of the volume
  56. AllowExpansion bool // AllowVolumeExpansion flag of the StorageClass
  57. }
  58. var (
  59. // Definitions for default fsType
  60. // DefaultFsInlineVolume is TestPattern for "Inline-volume (default fs)"
  61. DefaultFsInlineVolume = TestPattern{
  62. Name: "Inline-volume (default fs)",
  63. VolType: InlineVolume,
  64. }
  65. // DefaultFsEphemeralVolume is TestPattern for "Ephemeral-volume (default fs)"
  66. DefaultFsEphemeralVolume = TestPattern{
  67. Name: "Ephemeral-volume (default fs)",
  68. VolType: CSIInlineVolume,
  69. }
  70. // DefaultFsPreprovisionedPV is TestPattern for "Pre-provisioned PV (default fs)"
  71. DefaultFsPreprovisionedPV = TestPattern{
  72. Name: "Pre-provisioned PV (default fs)",
  73. VolType: PreprovisionedPV,
  74. }
  75. // DefaultFsDynamicPV is TestPattern for "Dynamic PV (default fs)"
  76. DefaultFsDynamicPV = TestPattern{
  77. Name: "Dynamic PV (default fs)",
  78. VolType: DynamicPV,
  79. }
  80. // Definitions for ext3
  81. // Ext3InlineVolume is TestPattern for "Inline-volume (ext3)"
  82. Ext3InlineVolume = TestPattern{
  83. Name: "Inline-volume (ext3)",
  84. VolType: InlineVolume,
  85. FsType: "ext3",
  86. }
  87. // Ext3EphemeralVolume is TestPattern for "Ephemeral-volume (ext3)"
  88. Ext3EphemeralVolume = TestPattern{
  89. Name: "Ephemeral-volume (ext3)",
  90. VolType: InlineVolume,
  91. FsType: "ext3",
  92. }
  93. // Ext3PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext3)"
  94. Ext3PreprovisionedPV = TestPattern{
  95. Name: "Pre-provisioned PV (ext3)",
  96. VolType: PreprovisionedPV,
  97. FsType: "ext3",
  98. }
  99. // Ext3DynamicPV is TestPattern for "Dynamic PV (ext3)"
  100. Ext3DynamicPV = TestPattern{
  101. Name: "Dynamic PV (ext3)",
  102. VolType: DynamicPV,
  103. FsType: "ext3",
  104. }
  105. // Definitions for ext4
  106. // Ext4InlineVolume is TestPattern for "Inline-volume (ext4)"
  107. Ext4InlineVolume = TestPattern{
  108. Name: "Inline-volume (ext4)",
  109. VolType: InlineVolume,
  110. FsType: "ext4",
  111. }
  112. // Ext4EphemeralVolume is TestPattern for "Ephemeral-volume (ext4)"
  113. Ext4EphemeralVolume = TestPattern{
  114. Name: "Ephemeral-volume (ext4)",
  115. VolType: CSIInlineVolume,
  116. FsType: "ext4",
  117. }
  118. // Ext4PreprovisionedPV is TestPattern for "Pre-provisioned PV (ext4)"
  119. Ext4PreprovisionedPV = TestPattern{
  120. Name: "Pre-provisioned PV (ext4)",
  121. VolType: PreprovisionedPV,
  122. FsType: "ext4",
  123. }
  124. // Ext4DynamicPV is TestPattern for "Dynamic PV (ext4)"
  125. Ext4DynamicPV = TestPattern{
  126. Name: "Dynamic PV (ext4)",
  127. VolType: DynamicPV,
  128. FsType: "ext4",
  129. }
  130. // Definitions for xfs
  131. // XfsInlineVolume is TestPattern for "Inline-volume (xfs)"
  132. XfsInlineVolume = TestPattern{
  133. Name: "Inline-volume (xfs)",
  134. VolType: InlineVolume,
  135. FsType: "xfs",
  136. FeatureTag: "[Slow]",
  137. }
  138. // XfsEphemeralVolume is TestPattern for "Ephemeral-volume (xfs)"
  139. XfsEphemeralVolume = TestPattern{
  140. Name: "Ephemeral-volume (xfs)",
  141. VolType: CSIInlineVolume,
  142. FsType: "xfs",
  143. FeatureTag: "[Slow]",
  144. }
  145. // XfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (xfs)"
  146. XfsPreprovisionedPV = TestPattern{
  147. Name: "Pre-provisioned PV (xfs)",
  148. VolType: PreprovisionedPV,
  149. FsType: "xfs",
  150. FeatureTag: "[Slow]",
  151. }
  152. // XfsDynamicPV is TestPattern for "Dynamic PV (xfs)"
  153. XfsDynamicPV = TestPattern{
  154. Name: "Dynamic PV (xfs)",
  155. VolType: DynamicPV,
  156. FsType: "xfs",
  157. FeatureTag: "[Slow]",
  158. }
  159. // Definitions for ntfs
  160. // NtfsInlineVolume is TestPattern for "Inline-volume (ntfs)"
  161. NtfsInlineVolume = TestPattern{
  162. Name: "Inline-volume (ntfs)",
  163. VolType: InlineVolume,
  164. FsType: "ntfs",
  165. FeatureTag: "[sig-windows]",
  166. }
  167. // NtfsEphemeralVolume is TestPattern for "Ephemeral-volume (ntfs)"
  168. NtfsEphemeralVolume = TestPattern{
  169. Name: "Ephemeral-volume (ntfs)",
  170. VolType: CSIInlineVolume,
  171. FsType: "ntfs",
  172. FeatureTag: "[sig-windows]",
  173. }
  174. // NtfsPreprovisionedPV is TestPattern for "Pre-provisioned PV (ntfs)"
  175. NtfsPreprovisionedPV = TestPattern{
  176. Name: "Pre-provisioned PV (ntfs)",
  177. VolType: PreprovisionedPV,
  178. FsType: "ntfs",
  179. FeatureTag: "[sig-windows]",
  180. }
  181. // NtfsDynamicPV is TestPattern for "Dynamic PV (xfs)"
  182. NtfsDynamicPV = TestPattern{
  183. Name: "Dynamic PV (ntfs)",
  184. VolType: DynamicPV,
  185. FsType: "ntfs",
  186. FeatureTag: "[sig-windows]",
  187. }
  188. // Definitions for Filesystem volume mode
  189. // FsVolModePreprovisionedPV is TestPattern for "Pre-provisioned PV (filesystem)"
  190. FsVolModePreprovisionedPV = TestPattern{
  191. Name: "Pre-provisioned PV (filesystem volmode)",
  192. VolType: PreprovisionedPV,
  193. VolMode: v1.PersistentVolumeFilesystem,
  194. }
  195. // FsVolModeDynamicPV is TestPattern for "Dynamic PV (filesystem)"
  196. FsVolModeDynamicPV = TestPattern{
  197. Name: "Dynamic PV (filesystem volmode)",
  198. VolType: DynamicPV,
  199. VolMode: v1.PersistentVolumeFilesystem,
  200. }
  201. // Definitions for block volume mode
  202. // BlockVolModePreprovisionedPV is TestPattern for "Pre-provisioned PV (block)"
  203. BlockVolModePreprovisionedPV = TestPattern{
  204. Name: "Pre-provisioned PV (block volmode)",
  205. VolType: PreprovisionedPV,
  206. VolMode: v1.PersistentVolumeBlock,
  207. }
  208. // BlockVolModeDynamicPV is TestPattern for "Dynamic PV (block)"
  209. BlockVolModeDynamicPV = TestPattern{
  210. Name: "Dynamic PV (block volmode)",
  211. VolType: DynamicPV,
  212. VolMode: v1.PersistentVolumeBlock,
  213. }
  214. // Definitions for snapshot case
  215. // DynamicSnapshot is TestPattern for "Dynamic snapshot"
  216. DynamicSnapshot = TestPattern{
  217. Name: "Dynamic Snapshot",
  218. SnapshotType: DynamicCreatedSnapshot,
  219. }
  220. // Definitions for volume expansion case
  221. // DefaultFsDynamicPVAllowExpansion is TestPattern for "Dynamic PV (default fs)(allowExpansion)"
  222. DefaultFsDynamicPVAllowExpansion = TestPattern{
  223. Name: "Dynamic PV (default fs)(allowExpansion)",
  224. VolType: DynamicPV,
  225. AllowExpansion: true,
  226. }
  227. // BlockVolModeDynamicPVAllowExpansion is TestPattern for "Dynamic PV (block volmode)(allowExpansion)"
  228. BlockVolModeDynamicPVAllowExpansion = TestPattern{
  229. Name: "Dynamic PV (block volmode)(allowExpansion)",
  230. VolType: DynamicPV,
  231. VolMode: v1.PersistentVolumeBlock,
  232. AllowExpansion: true,
  233. }
  234. // Definitions for topology tests
  235. // TopologyImmediate is TestPattern for immediate binding
  236. TopologyImmediate = TestPattern{
  237. Name: "Dynamic PV (immediate binding)",
  238. VolType: DynamicPV,
  239. BindingMode: storagev1.VolumeBindingImmediate,
  240. }
  241. // TopologyDelayed is TestPattern for delayed binding
  242. TopologyDelayed = TestPattern{
  243. Name: "Dynamic PV (delayed binding)",
  244. VolType: DynamicPV,
  245. BindingMode: storagev1.VolumeBindingWaitForFirstConsumer,
  246. }
  247. )
  248. // NewVolTypeMap creates a map with the given TestVolTypes enabled
  249. func NewVolTypeMap(types ...TestVolType) map[TestVolType]bool {
  250. m := map[TestVolType]bool{}
  251. for _, t := range types {
  252. m[t] = true
  253. }
  254. return m
  255. }