Documentation ¶
Index ¶
- Variables
- func CSIInlineVolumesEnabled(c clientset.Interface, ns string) (bool, error)
- func CreateSnapshot(sDriver SnapshottableTestDriver, config *PerTestConfig, ...) (*unstructured.Unstructured, *unstructured.Unstructured)
- func DefineTestSuite(driver TestDriver, tsInits []func() TestSuite)
- func DeleteAndWaitSnapshot(dc dynamic.Interface, ns string, snapshotName string, ...) error
- func ExpandPVCSize(origPVC *v1.PersistentVolumeClaim, size resource.Quantity, ...) (*v1.PersistentVolumeClaim, error)
- func GenericEphemeralVolumesEnabled(c clientset.Interface, ns string) (bool, error)
- func GetDriverNameWithFeatureTags(driver TestDriver) string
- func GetSnapshotClass(snapshotter string, parameters map[string]string, ns string, suffix string) *unstructured.Unstructured
- func GetSnapshotContentFromSnapshot(dc dynamic.Interface, snapshot *unstructured.Unstructured) *unstructured.Unstructured
- func GetStorageClass(provisioner string, parameters map[string]string, ...) *storagev1.StorageClass
- func PVMultiNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClaim, ...)
- func PVWriteReadSingleNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClaim, ...) *v1.PersistentVolume
- func RunInPodWithVolume(c clientset.Interface, ns, claimName, podName, command string, ...)
- func StartInPodWithInlineVolume(c clientset.Interface, ns, podName, command string, volumes []v1.VolumeSource, ...) *v1.Pod
- func StartInPodWithVolume(c clientset.Interface, ns, claimName, podName, command string, ...) *v1.Pod
- func StartPodLogs(f *framework.Framework, driverNamespace *v1.Namespace) func()
- func StopPod(c clientset.Interface, pod *v1.Pod)
- func StopPodAndDependents(c clientset.Interface, pod *v1.Pod)
- func SubpathTestPod(f *framework.Framework, subpath, volumeType string, source *v1.VolumeSource, ...) *v1.Pod
- func TestAccessMultipleVolumesAcrossPodRecreation(f *framework.Framework, cs clientset.Interface, ns string, ...)
- func TestBasicSubpath(f *framework.Framework, contents string, pod *v1.Pod)
- func TestBasicSubpathFile(f *framework.Framework, contents string, pod *v1.Pod, filepath string)
- func TestConcurrentAccessToSingleVolume(f *framework.Framework, cs clientset.Interface, ns string, ...)
- func TestPodContainerRestartWithConfigmapModified(f *framework.Framework, original, modified *v1.ConfigMap)
- func VolumeSourceEnabled(c clientset.Interface, ns string, volume v1.VolumeSource) (bool, error)
- func WaitForControllerVolumeResize(pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error
- func WaitForFSResize(pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error)
- func WaitForPendingFSResizeCondition(pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error)
- func WaitForResizingCondition(pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error
- func WaitForSnapshotReady(c dynamic.Interface, ns string, snapshotName string, ...) error
- type Capability
- type DriverInfo
- type DynamicPVTestDriver
- type EphemeralTest
- type EphemeralTestDriver
- type InlineVolumeTestDriver
- type PerTestConfig
- type PreprovisionedPVTestDriver
- type PreprovisionedVolumeTestDriver
- type SnapshotResource
- type SnapshottableTestDriver
- type StorageClassTest
- type StressTestOptions
- type TestDriver
- type TestSuite
- func InitDisruptiveTestSuite() TestSuite
- func InitEphemeralTestSuite() TestSuite
- func InitFsGroupChangePolicyTestSuite() TestSuite
- func InitMultiVolumeTestSuite() TestSuite
- func InitProvisioningTestSuite() TestSuite
- func InitSnapshottableStressTestSuite() TestSuite
- func InitSnapshottableTestSuite() TestSuite
- func InitSubPathTestSuite() TestSuite
- func InitTopologyTestSuite() TestSuite
- func InitVolumeExpandTestSuite() TestSuite
- func InitVolumeIOTestSuite() TestSuite
- func InitVolumeLimitsTestSuite() TestSuite
- func InitVolumeModeTestSuite() TestSuite
- func InitVolumeStressTestSuite() TestSuite
- func InitVolumesTestSuite() TestSuite
- type TestSuiteInfo
- type TestVolume
- type VolumeResource
- type VolumeSnapshotStressTestOptions
Constants ¶
This section is empty.
Variables ¶
var ( // SnapshotGVR is GroupVersionResource for volumesnapshots SnapshotGVR = schema.GroupVersionResource{Group: snapshotGroup, Version: "v1", Resource: "volumesnapshots"} // SnapshotClassGVR is GroupVersionResource for volumesnapshotclasses SnapshotClassGVR = schema.GroupVersionResource{Group: snapshotGroup, Version: "v1", Resource: "volumesnapshotclasses"} // SnapshotContentGVR is GroupVersionResource for volumesnapshotcontents SnapshotContentGVR = schema.GroupVersionResource{Group: snapshotGroup, Version: "v1", Resource: "volumesnapshotcontents"} )
var BaseSuites = []func() TestSuite{ InitVolumesTestSuite, InitVolumeIOTestSuite, InitVolumeModeTestSuite, InitSubPathTestSuite, InitProvisioningTestSuite, InitMultiVolumeTestSuite, InitVolumeExpandTestSuite, InitDisruptiveTestSuite, InitVolumeLimitsTestSuite, InitTopologyTestSuite, InitVolumeStressTestSuite, InitFsGroupChangePolicyTestSuite, }
BaseSuites is a list of storage test suites that work for in-tree and CSI drivers
var CSISuites = append(BaseSuites, InitEphemeralTestSuite, InitSnapshottableTestSuite, InitSnapshottableStressTestSuite, )
CSISuites is a list of storage test suites that work only for CSI drivers
Functions ¶
func CSIInlineVolumesEnabled ¶ added in v1.16.0
CSIInlineVolumesEnabled checks whether the running cluster has the CSIInlineVolumes feature gate enabled. It does that by trying to create a pod that uses that feature.
func CreateSnapshot ¶ added in v1.20.0
func CreateSnapshot(sDriver SnapshottableTestDriver, config *PerTestConfig, pattern testpatterns.TestPattern, pvcName string, pvcNamespace string) (*unstructured.Unstructured, *unstructured.Unstructured)
CreateSnapshot creates a VolumeSnapshotClass with given SnapshotDeletionPolicy and a VolumeSnapshot from the VolumeSnapshotClass using a dynamic client. Returns the unstructured VolumeSnapshotClass and VolumeSnapshot objects.
func DefineTestSuite ¶ added in v1.14.0
func DefineTestSuite(driver TestDriver, tsInits []func() TestSuite)
DefineTestSuite defines tests for all testpatterns and all testSuites for a driver
func DeleteAndWaitSnapshot ¶ added in v1.19.0
func DeleteAndWaitSnapshot(dc dynamic.Interface, ns string, snapshotName string, poll, timeout time.Duration) error
DeleteAndWaitSnapshot deletes a VolumeSnapshot and waits for it to be deleted or until timeout occurs, whichever comes first
func ExpandPVCSize ¶ added in v1.16.0
func ExpandPVCSize(origPVC *v1.PersistentVolumeClaim, size resource.Quantity, c clientset.Interface) (*v1.PersistentVolumeClaim, error)
ExpandPVCSize expands PVC size
func GenericEphemeralVolumesEnabled ¶ added in v1.19.0
GenericEphemeralVolumesEnabled checks whether the running cluster has the GenericEphemeralVolume feature gate enabled. It does that by trying to create a pod that uses that feature.
func GetDriverNameWithFeatureTags ¶ added in v1.14.0
func GetDriverNameWithFeatureTags(driver TestDriver) string
GetDriverNameWithFeatureTags returns driver name with feature tags For example)
- [Driver: nfs]
- [Driver: rbd][Feature:Volumes]
func GetSnapshotClass ¶ added in v1.14.0
func GetSnapshotClass( snapshotter string, parameters map[string]string, ns string, suffix string, ) *unstructured.Unstructured
GetSnapshotClass constructs a new SnapshotClass instance with a unique name that is based on namespace + suffix.
func GetSnapshotContentFromSnapshot ¶ added in v1.20.0
func GetSnapshotContentFromSnapshot(dc dynamic.Interface, snapshot *unstructured.Unstructured) *unstructured.Unstructured
GetSnapshotContentFromSnapshot returns the VolumeSnapshotContent object Bound to a given VolumeSnapshot
func GetStorageClass ¶ added in v1.14.0
func GetStorageClass( provisioner string, parameters map[string]string, bindingMode *storagev1.VolumeBindingMode, ns string, suffix string, ) *storagev1.StorageClass
GetStorageClass constructs a new StorageClass instance with a unique name that is based on namespace + suffix.
func PVMultiNodeCheck ¶ added in v1.14.0
func PVMultiNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClaim, node e2epod.NodeSelection)
PVMultiNodeCheck checks that a PV retains data when moved between nodes.
It starts these pods: - The first pod writes 'hello word' to the /mnt/test (= the volume) on one node. - The second pod runs grep 'hello world' on /mnt/test on another node.
The first node is selected by Kubernetes when scheduling the first pod. The second pod uses the same criteria, except that a special anti-affinity for the first node gets added. This test can only pass if the cluster has more than one suitable node. The caller has to ensure that.
If all succeeds, Kubernetes actually allocated something that is persistent across pods and across nodes.
This is a common test that can be called from a StorageClassTest.PvCheck.
func PVWriteReadSingleNodeCheck ¶ added in v1.14.0
func PVWriteReadSingleNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClaim, node e2epod.NodeSelection) *v1.PersistentVolume
PVWriteReadSingleNodeCheck checks that a PV retains data on a single node and returns the PV.
It starts two pods: - The first pod writes 'hello word' to the /mnt/test (= the volume) on one node. - The second pod runs grep 'hello world' on /mnt/test on the same node.
The node is selected by Kubernetes when scheduling the first pod. It's then selected via its name for the second pod.
If both succeed, Kubernetes actually allocated something that is persistent across pods.
This is a common test that can be called from a StorageClassTest.PvCheck.
func RunInPodWithVolume ¶ added in v1.14.0
func RunInPodWithVolume(c clientset.Interface, ns, claimName, podName, command string, node e2epod.NodeSelection)
RunInPodWithVolume runs a command in a pod with given claim mounted to /mnt directory. It starts, checks, collects output and stops it.
func StartInPodWithInlineVolume ¶ added in v1.16.0
func StartInPodWithInlineVolume(c clientset.Interface, ns, podName, command string, volumes []v1.VolumeSource, readOnly bool, node e2epod.NodeSelection) *v1.Pod
StartInPodWithInlineVolume starts a command in a pod with given volume(s) mounted to /mnt/test-<number> directory. The caller is responsible for checking the pod and deleting it.
func StartInPodWithVolume ¶ added in v1.14.0
func StartInPodWithVolume(c clientset.Interface, ns, claimName, podName, command string, node e2epod.NodeSelection) *v1.Pod
StartInPodWithVolume starts a command in a pod with given claim mounted to /mnt directory The caller is responsible for checking the pod and deleting it.
func StartPodLogs ¶ added in v1.14.0
StartPodLogs begins capturing log output and events from current and future pods running in the namespace of the framework. That ends when the returned cleanup function is called.
The output goes to log files (when using --report-dir, as in the CI) or the output stream (otherwise).
func StopPod ¶ added in v1.14.0
StopPod first tries to log the output of the pod's container, then deletes the pod and waits for that to succeed.
func StopPodAndDependents ¶ added in v1.19.0
StopPodAndDependents first tries to log the output of the pod's container, then deletes the pod and waits for that to succeed. Also waits for all owned resources to be deleted.
func SubpathTestPod ¶
func SubpathTestPod(f *framework.Framework, subpath, volumeType string, source *v1.VolumeSource, privilegedSecurityContext bool) *v1.Pod
SubpathTestPod returns a pod spec for subpath tests
func TestAccessMultipleVolumesAcrossPodRecreation ¶ added in v1.15.0
func TestAccessMultipleVolumesAcrossPodRecreation(f *framework.Framework, cs clientset.Interface, ns string, node e2epod.NodeSelection, pvcs []*v1.PersistentVolumeClaim, requiresSameNode bool)
TestAccessMultipleVolumesAcrossPodRecreation tests access to multiple volumes from single pod, then recreate pod on the same or different node depending on requiresSameNode, and recheck access to the volumes from the recreated pod
func TestBasicSubpath ¶
TestBasicSubpath runs basic subpath test
func TestBasicSubpathFile ¶
TestBasicSubpathFile runs basic subpath file test
func TestConcurrentAccessToSingleVolume ¶ added in v1.15.0
func TestConcurrentAccessToSingleVolume(f *framework.Framework, cs clientset.Interface, ns string, node e2epod.NodeSelection, pvc *v1.PersistentVolumeClaim, numPods int, requiresSameNode bool, readOnly bool)
TestConcurrentAccessToSingleVolume tests access to a single volume from multiple pods, then delete the last pod, and recheck access to the volume after pod deletion to check if other pod deletion doesn't affect. Pods are deployed on the same node or different nodes depending on requiresSameNode. Read/write check are done across pod, by check reading both what pod{n-1} and pod{n} wrote from pod{n}.
func TestPodContainerRestartWithConfigmapModified ¶ added in v1.19.0
func TestPodContainerRestartWithConfigmapModified(f *framework.Framework, original, modified *v1.ConfigMap)
TestPodContainerRestartWithConfigmapModified tests that container can restart to stabilize when configmap has been modified. 1. valid container running 2. update configmap 3. container restarts 4. container becomes stable after configmap mounted file has been modified
func VolumeSourceEnabled ¶ added in v1.19.0
VolumeSourceEnabled checks whether a certain kind of volume source is enabled by trying to create a pod that uses it.
func WaitForControllerVolumeResize ¶ added in v1.16.0
func WaitForControllerVolumeResize(pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error
WaitForControllerVolumeResize waits for the controller resize to be finished
func WaitForFSResize ¶ added in v1.16.0
func WaitForFSResize(pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error)
WaitForFSResize waits for the filesystem in the pv to be resized
func WaitForPendingFSResizeCondition ¶ added in v1.18.0
func WaitForPendingFSResizeCondition(pvc *v1.PersistentVolumeClaim, c clientset.Interface) (*v1.PersistentVolumeClaim, error)
WaitForPendingFSResizeCondition waits for pvc to have resize condition
func WaitForResizingCondition ¶ added in v1.16.0
func WaitForResizingCondition(pvc *v1.PersistentVolumeClaim, c clientset.Interface, duration time.Duration) error
WaitForResizingCondition waits for the pvc condition to be PersistentVolumeClaimResizing
Types ¶
type Capability ¶ added in v1.14.0
type Capability string
Capability represents a feature that a volume plugin supports
const ( CapPersistence Capability = "persistence" // data is persisted across pod restarts CapBlock Capability = "block" // raw block mode CapFsGroup Capability = "fsGroup" // volume ownership via fsGroup CapExec Capability = "exec" // exec a file in the volume CapSnapshotDataSource Capability = "snapshotDataSource" // support populate data from snapshot CapPVCDataSource Capability = "pvcDataSource" // support populate data from pvc // multiple pods on a node can use the same volume concurrently; // for CSI, see: // - https://github.com/container-storage-interface/spec/pull/150 // - https://github.com/container-storage-interface/spec/issues/178 // - NodeStageVolume in the spec CapMultiPODs Capability = "multipods" CapRWX Capability = "RWX" // support ReadWriteMany access modes CapControllerExpansion Capability = "controllerExpansion" // support volume expansion for controller CapNodeExpansion Capability = "nodeExpansion" // support volume expansion for node CapVolumeLimits Capability = "volumeLimits" // support volume limits (can be *very* slow) CapSingleNodeVolume Capability = "singleNodeVolume" // support volume that can run on single node (like hostpath) CapTopology Capability = "topology" // support topology )
Constants related to capability
type DriverInfo ¶ added in v1.14.0
type DriverInfo struct { // Internal name of the driver, this is used as a display name in the test // case and test objects Name string // Fully qualified plugin name as registered in Kubernetes of the in-tree // plugin if it exists and is empty if this DriverInfo represents a CSI // Driver InTreePluginName string FeatureTag string // FeatureTag for the driver // Maximum single file size supported by this driver MaxFileSize int64 // The range of disk size supported by this driver SupportedSizeRange e2evolume.SizeRange // Map of string for supported fs type SupportedFsType sets.String // Map of string for supported mount option SupportedMountOption sets.String // [Optional] Map of string for required mount option RequiredMountOption sets.String // Map that represents plugin capabilities Capabilities map[Capability]bool // [Optional] List of access modes required for provisioning, defaults to // RWO if unset RequiredAccessModes []v1.PersistentVolumeAccessMode // [Optional] List of topology keys driver supports TopologyKeys []string // [Optional] Number of allowed topologies the driver requires. // Only relevant if TopologyKeys is set. Defaults to 1. // Example: multi-zonal disk requires at least 2 allowed topologies. NumAllowedTopologies int // [Optional] Scale parameters for stress tests. // TODO(#96241): Rename this field to reflect the tests that consume it. StressTestOptions *StressTestOptions // [Optional] Scale parameters for volume snapshot stress tests. VolumeSnapshotStressTestOptions *VolumeSnapshotStressTestOptions }
DriverInfo represents static information about a TestDriver.
type DynamicPVTestDriver ¶ added in v1.14.0
type DynamicPVTestDriver interface { TestDriver // GetDynamicProvisionStorageClass returns a StorageClass dynamic provision Persistent Volume. // The StorageClass must be created in the current test's namespace and have // a unique name inside that namespace because GetDynamicProvisionStorageClass might // be called more than once per test. // It will set fsType to the StorageClass, if TestDriver supports it. // It will return nil, if the TestDriver doesn't support it. GetDynamicProvisionStorageClass(config *PerTestConfig, fsType string) *storagev1.StorageClass }
DynamicPVTestDriver represents an interface for a TestDriver that supports DynamicPV
type EphemeralTest ¶ added in v1.16.0
type EphemeralTest struct { Client clientset.Interface Namespace string DriverName string VolSource *v1.VolumeSource Node e2epod.NodeSelection // GetVolume returns the volume attributes for a // certain inline ephemeral volume, enumerated starting with // #0. Some tests might require more than one volume. They can // all be the same or different, depending what the driver supports // and/or wants to test. // // For each volume, the test driver can specify the // attributes, whether two pods using those attributes will // end up sharing the same backend storage (i.e. changes made // in one pod will be visible in the other), and whether // the volume can be mounted read/write or only read-only. GetVolume func(volumeNumber int) (attributes map[string]string, shared bool, readOnly bool) // RunningPodCheck is invoked while a pod using an inline volume is running. // It can execute additional checks on the pod and its volume(s). Any data // returned by it is passed to StoppedPodCheck. RunningPodCheck func(pod *v1.Pod) interface{} // StoppedPodCheck is invoked after ensuring that the pod is gone. // It is passed the data gather by RunningPodCheck or nil if that // isn't defined and then can do additional checks on the node, // like for example verifying that the ephemeral volume was really // removed. How to do such a check is driver-specific and not // covered by the generic storage test suite. StoppedPodCheck func(nodeName string, runningPodData interface{}) // NumInlineVolumes sets the number of ephemeral inline volumes per pod. // Unset (= zero) is the same as one. NumInlineVolumes int // ReadOnly limits mounting to read-only. ReadOnly bool }
EphemeralTest represents parameters to be used by tests for inline volumes. Not all parameters are used by all tests.
func (EphemeralTest) TestEphemeral ¶ added in v1.16.0
func (t EphemeralTest) TestEphemeral()
TestEphemeral tests pod creation with one ephemeral volume.
type EphemeralTestDriver ¶ added in v1.16.0
type EphemeralTestDriver interface { TestDriver // GetVolume returns the volume attributes for a certain // inline ephemeral volume, enumerated starting with #0. Some // tests might require more than one volume. They can all be // the same or different, depending what the driver supports // and/or wants to test. // // For each volume, the test driver can return volume attributes, // whether the resulting volume is shared between different pods (i.e. // changes made in one pod are visible in another), and whether the // volume can be mounted read/write or only read-only. GetVolume(config *PerTestConfig, volumeNumber int) (attributes map[string]string, shared bool, readOnly bool) // GetCSIDriverName returns the name that was used when registering with // kubelet. Depending on how the driver was deployed, this can be different // from DriverInfo.Name. Starting with Kubernetes 1.16, there must also // be a CSIDriver object under the same name with a "mode" field that enables // usage of the driver for ephemeral inline volumes. GetCSIDriverName(config *PerTestConfig) string }
EphemeralTestDriver represents an interface for a TestDriver that supports ephemeral inline volumes.
type InlineVolumeTestDriver ¶ added in v1.14.0
type InlineVolumeTestDriver interface { PreprovisionedVolumeTestDriver // GetVolumeSource returns a volumeSource for inline volume. // It will set readOnly and fsType to the volumeSource, if TestDriver supports both of them. // It will return nil, if the TestDriver doesn't support either of the parameters. GetVolumeSource(readOnly bool, fsType string, testVolume TestVolume) *v1.VolumeSource }
InlineVolumeTestDriver represents an interface for a TestDriver that supports InlineVolume
type PerTestConfig ¶ added in v1.14.0
type PerTestConfig struct { // The test driver for the test. Driver TestDriver // Some short word that gets inserted into dynamically // generated entities (pods, paths) as first part of the name // to make debugging easier. Can be the same for different // tests inside the test suite. Prefix string // The framework instance allocated for the current test. Framework *framework.Framework // If non-empty, Pods using a volume will be scheduled // according to the NodeSelection. Otherwise Kubernetes will // pick a node. ClientNodeSelection e2epod.NodeSelection // Some test drivers initialize a storage server. This is // the configuration that then has to be used to run tests. // The values above are ignored for such tests. ServerConfig *e2evolume.TestConfig // Some drivers run in their own namespace DriverNamespace *v1.Namespace }
PerTestConfig represents parameters that control test execution. One instance gets allocated for each test and is then passed via pointer to functions involved in the test.
func (*PerTestConfig) GetUniqueDriverName ¶ added in v1.14.0
func (config *PerTestConfig) GetUniqueDriverName() string
GetUniqueDriverName returns unique driver name that can be used parallelly in tests
type PreprovisionedPVTestDriver ¶ added in v1.14.0
type PreprovisionedPVTestDriver interface { PreprovisionedVolumeTestDriver // GetPersistentVolumeSource returns a PersistentVolumeSource with volume node affinity for pre-provisioned Persistent Volume. // It will set readOnly and fsType to the PersistentVolumeSource, if TestDriver supports both of them. // It will return nil, if the TestDriver doesn't support either of the parameters. GetPersistentVolumeSource(readOnly bool, fsType string, testVolume TestVolume) (*v1.PersistentVolumeSource, *v1.VolumeNodeAffinity) }
PreprovisionedPVTestDriver represents an interface for a TestDriver that supports PreprovisionedPV
type PreprovisionedVolumeTestDriver ¶ added in v1.14.0
type PreprovisionedVolumeTestDriver interface { TestDriver // CreateVolume creates a pre-provisioned volume of the desired volume type. CreateVolume(config *PerTestConfig, volumeType testpatterns.TestVolType) TestVolume }
PreprovisionedVolumeTestDriver represents an interface for a TestDriver that has pre-provisioned volume
type SnapshotResource ¶ added in v1.19.0
type SnapshotResource struct { Config *PerTestConfig Pattern testpatterns.TestPattern Vs *unstructured.Unstructured Vscontent *unstructured.Unstructured Vsclass *unstructured.Unstructured }
SnapshotResource represents a snapshot class, a snapshot and its bound snapshot contents for a specific test case
func CreateSnapshotResource ¶ added in v1.19.0
func CreateSnapshotResource(sDriver SnapshottableTestDriver, config *PerTestConfig, pattern testpatterns.TestPattern, pvcName string, pvcNamespace string) *SnapshotResource
CreateSnapshotResource creates a snapshot resource for the current test. It knows how to deal with different test pattern snapshot provisioning and deletion policy
func (*SnapshotResource) CleanupResource ¶ added in v1.19.0
func (sr *SnapshotResource) CleanupResource() error
CleanupResource cleans up the snapshot resource and ignores not found errors
type SnapshottableTestDriver ¶ added in v1.14.0
type SnapshottableTestDriver interface { TestDriver // GetSnapshotClass returns a SnapshotClass to create snapshot. // It will return nil, if the TestDriver doesn't support it. GetSnapshotClass(config *PerTestConfig) *unstructured.Unstructured }
SnapshottableTestDriver represents an interface for a TestDriver that supports DynamicSnapshot
type StorageClassTest ¶ added in v1.13.0
type StorageClassTest struct { Client clientset.Interface Claim *v1.PersistentVolumeClaim SourceClaim *v1.PersistentVolumeClaim Class *storagev1.StorageClass Name string CloudProviders []string Provisioner string Parameters map[string]string DelayBinding bool ClaimSize string ExpectedSize string PvCheck func(claim *v1.PersistentVolumeClaim) VolumeMode v1.PersistentVolumeMode AllowVolumeExpansion bool }
StorageClassTest represents parameters to be used by provisioning tests. Not all parameters are used by all tests.
func (StorageClassTest) TestBindingWaitForFirstConsumerMultiPVC ¶ added in v1.14.0
func (t StorageClassTest) TestBindingWaitForFirstConsumerMultiPVC(claims []*v1.PersistentVolumeClaim, nodeSelector map[string]string, expectUnschedulable bool) ([]*v1.PersistentVolume, *v1.Node)
TestBindingWaitForFirstConsumerMultiPVC tests the binding with WaitForFirstConsumer mode
func (StorageClassTest) TestDynamicProvisioning ¶ added in v1.14.0
func (t StorageClassTest) TestDynamicProvisioning() *v1.PersistentVolume
TestDynamicProvisioning tests dynamic provisioning with specified StorageClassTest
type StressTestOptions ¶ added in v1.19.0
type StressTestOptions struct { // Number of pods to create in the test. This may also create // up to 1 volume per pod. NumPods int // Number of times to restart each Pod. NumRestarts int }
StressTestOptions contains parameters used for stress tests.
type TestDriver ¶ added in v1.14.0
type TestDriver interface { // GetDriverInfo returns DriverInfo for the TestDriver. This must be static // information. GetDriverInfo() *DriverInfo // SkipUnsupportedTest skips test if Testpattern is not // suitable to test with the TestDriver. It gets called after // parsing parameters of the test suite and before the // framework is initialized. Cheap tests that just check // parameters like the cloud provider can and should be // done in SkipUnsupportedTest to avoid setting up more // expensive resources like framework.Framework. Tests that // depend on a connection to the cluster can be done in // PrepareTest once the framework is ready. SkipUnsupportedTest(testpatterns.TestPattern) // PrepareTest is called at test execution time each time a new test case is about to start. // It sets up all necessary resources and returns the per-test configuration // plus a cleanup function that frees all allocated resources. PrepareTest(f *framework.Framework) (*PerTestConfig, func()) }
TestDriver represents an interface for a driver to be tested in TestSuite. Except for GetDriverInfo, all methods will be called at test runtime and thus can use e2eskipper.Skipf, framework.Fatal, Gomega assertions, etc.
type TestSuite ¶
type TestSuite interface { // 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) }
TestSuite represents an interface for a set of tests which works with TestDriver
func InitDisruptiveTestSuite ¶ added in v1.16.0
func InitDisruptiveTestSuite() TestSuite
InitDisruptiveTestSuite returns subPathTestSuite that implements TestSuite interface
func InitEphemeralTestSuite ¶ added in v1.16.0
func InitEphemeralTestSuite() TestSuite
InitEphemeralTestSuite returns ephemeralTestSuite that implements TestSuite interface
func InitFsGroupChangePolicyTestSuite ¶ added in v1.20.0
func InitFsGroupChangePolicyTestSuite() TestSuite
InitFsGroupChangePolicyTestSuite returns fsGroupChangePolicyTestSuite that implements TestSuite interface
func InitMultiVolumeTestSuite ¶ added in v1.15.0
func InitMultiVolumeTestSuite() TestSuite
InitMultiVolumeTestSuite returns multiVolumeTestSuite that implements TestSuite interface
func InitProvisioningTestSuite ¶ added in v1.13.0
func InitProvisioningTestSuite() TestSuite
InitProvisioningTestSuite returns provisioningTestSuite that implements TestSuite interface
func InitSnapshottableStressTestSuite ¶ added in v1.19.6
func InitSnapshottableStressTestSuite() TestSuite
InitSnapshottableStressTestSuite returns snapshottableStressTestSuite that implements TestSuite interface
func InitSnapshottableTestSuite ¶ added in v1.14.0
func InitSnapshottableTestSuite() TestSuite
InitSnapshottableTestSuite returns snapshottableTestSuite that implements TestSuite interface
func InitSubPathTestSuite ¶
func InitSubPathTestSuite() TestSuite
InitSubPathTestSuite returns subPathTestSuite that implements TestSuite interface
func InitTopologyTestSuite ¶ added in v1.17.0
func InitTopologyTestSuite() TestSuite
InitTopologyTestSuite returns topologyTestSuite that implements TestSuite interface
func InitVolumeExpandTestSuite ¶ added in v1.16.0
func InitVolumeExpandTestSuite() TestSuite
InitVolumeExpandTestSuite returns volumeExpandTestSuite that implements TestSuite interface
func InitVolumeIOTestSuite ¶
func InitVolumeIOTestSuite() TestSuite
InitVolumeIOTestSuite returns volumeIOTestSuite that implements TestSuite interface
func InitVolumeLimitsTestSuite ¶ added in v1.16.0
func InitVolumeLimitsTestSuite() TestSuite
InitVolumeLimitsTestSuite returns volumeLimitsTestSuite that implements TestSuite interface
func InitVolumeModeTestSuite ¶
func InitVolumeModeTestSuite() TestSuite
InitVolumeModeTestSuite returns volumeModeTestSuite that implements TestSuite interface
func InitVolumeStressTestSuite ¶ added in v1.19.6
func InitVolumeStressTestSuite() TestSuite
InitVolumeStressTestSuite returns volumeStressTestSuite that implements TestSuite interface
func InitVolumesTestSuite ¶
func InitVolumesTestSuite() TestSuite
InitVolumesTestSuite returns volumesTestSuite that implements TestSuite interface
type TestSuiteInfo ¶
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 e2evolume.SizeRange // Size range supported by the test suite }
TestSuiteInfo represents a set of parameters for TestSuite
type TestVolume ¶ added in v1.14.0
type TestVolume interface {
DeleteVolume()
}
TestVolume is the result of PreprovisionedVolumeTestDriver.CreateVolume. The only common functionality is to delete it. Individual driver interfaces have additional methods that work with volumes created by them.
func CreateVolume ¶ added in v1.14.0
func CreateVolume(driver TestDriver, config *PerTestConfig, volType testpatterns.TestVolType) TestVolume
CreateVolume creates volume for test unless dynamicPV or CSI ephemeral inline volume test
type VolumeResource ¶ added in v1.18.0
type VolumeResource struct { Config *PerTestConfig Pattern testpatterns.TestPattern VolSource *v1.VolumeSource Pvc *v1.PersistentVolumeClaim Pv *v1.PersistentVolume Sc *storagev1.StorageClass Volume TestVolume }
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.
func CreateVolumeResource ¶ added in v1.18.0
func CreateVolumeResource(driver TestDriver, config *PerTestConfig, pattern testpatterns.TestPattern, testVolumeSizeRange e2evolume.SizeRange) *VolumeResource
CreateVolumeResource constructs a VolumeResource for the current test. It knows how to deal with different test pattern volume types.
func (*VolumeResource) CleanupResource ¶ added in v1.18.0
func (r *VolumeResource) CleanupResource() error
CleanupResource cleans up VolumeResource
type VolumeSnapshotStressTestOptions ¶ added in v1.19.6
type VolumeSnapshotStressTestOptions struct { // Number of pods to create in the test. This may also create // up to 1 volume per pod. NumPods int // Number of snapshots to create for each volume. NumSnapshots int }
VolumeSnapshotStressTestOptions contains parameters used for volume snapshot stress tests.