testsuites

package
v1.14.0-beta.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 19, 2019 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CreateVolume added in v1.14.0

func CreateVolume(driver TestDriver, volType testpatterns.TestVolType) interface{}

CreateVolume creates volume for test unless dynamicPV test

func DeleteVolume

func DeleteVolume(driver TestDriver, volType testpatterns.TestVolType, testResource interface{})

DeleteVolume deletes volume for test unless dynamicPV test

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 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 GetUniqueDriverName

func GetUniqueDriverName(driver TestDriver) string

GetUniqueDriverName returns unique driver name that can be used parallelly in tests

func PVMultiNodeCheck added in v1.14.0

func PVMultiNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume, node 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, volume *v1.PersistentVolume, node NodeSelection)

PVWriteReadSingleNodeCheck checks that a PV retains data on a single node.

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 NodeSelection)

RunInPodWithVolume runs a command in a pod with given claim mounted to /mnt directory. It starts, checks, collects output and stops it.

func RunTestSuite

func RunTestSuite(f *framework.Framework, driver TestDriver, tsInits []func() TestSuite, tunePatternFunc func([]testpatterns.TestPattern) []testpatterns.TestPattern)

RunTestSuite runs all testpatterns of all testSuites for a driver

func StartInPodWithVolume added in v1.14.0

func StartInPodWithVolume(c clientset.Interface, ns, claimName, podName, command string, node 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 StopPod added in v1.14.0

func StopPod(c clientset.Interface, pod *v1.Pod)

StopPod first tries to log the output of the pod's container, then deletes the pod.

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 TestBasicSubpath

func TestBasicSubpath(f *framework.Framework, contents string, pod *v1.Pod)

TestBasicSubpath runs basic subpath test

func TestBasicSubpathFile

func TestBasicSubpathFile(f *framework.Framework, contents string, pod *v1.Pod, filepath string)

TestBasicSubpathFile runs basic subpath file test

func TestBindingWaitForFirstConsumer

func TestBindingWaitForFirstConsumer(t StorageClassTest, client clientset.Interface, claim *v1.PersistentVolumeClaim, class *storage.StorageClass, nodeSelector map[string]string, expectUnschedulable bool) (*v1.PersistentVolume, *v1.Node)

func TestBindingWaitForFirstConsumerMultiPVC

func TestBindingWaitForFirstConsumerMultiPVC(t StorageClassTest, client clientset.Interface, claims []*v1.PersistentVolumeClaim, class *storage.StorageClass, nodeSelector map[string]string, expectUnschedulable bool) ([]*v1.PersistentVolume, *v1.Node)

func TestCreateSnapshot

func TestCreateSnapshot(
	t SnapshotClassTest,
	client clientset.Interface,
	dynamicClient dynamic.Interface,
	claim *v1.PersistentVolumeClaim,
	class *storage.StorageClass,
	snapshotClass *unstructured.Unstructured,
) *unstructured.Unstructured

TestCreateSnapshot tests dynamic creating snapshot with specified SnapshotClassTest and snapshotClass

func TestDynamicProvisioning added in v1.13.0

func TestDynamicProvisioning(t StorageClassTest, client clientset.Interface, claim *v1.PersistentVolumeClaim, class *storage.StorageClass) *v1.PersistentVolume

TestDynamicProvisioning tests dynamic provisioning with specified StorageClassTest and storageClass

func WaitForSnapshotReady added in v1.14.0

func WaitForSnapshotReady(c dynamic.Interface, ns string, snapshotName string, Poll, timeout time.Duration) error

WaitForSnapshotReady waits for a VolumeSnapshot to be ready to use or until timeout occurs, whichever comes first.

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
	CapDataSource  Capability = "dataSource"  // support populate data from snapshot

	// 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"
)

type DriverInfo added in v1.14.0

type DriverInfo struct {
	Name       string // Name of the driver
	FeatureTag string // FeatureTag for the driver

	MaxFileSize          int64               // Max file size to be tested for this driver
	SupportedFsType      sets.String         // Map of string for supported fs type
	SupportedMountOption sets.String         // Map of string for supported mount option
	RequiredMountOption  sets.String         // Map of string for required mount option (Optional)
	Capabilities         map[Capability]bool // Map that represents plugin capabilities

	Config TestConfig // Test configuration for the current test.
}

DriverInfo represents a combination of parameters to be used in implementation of TestDriver

type DynamicPVTestDriver added in v1.14.0

type DynamicPVTestDriver interface {
	TestDriver
	// GetDynamicProvisionStorageClass returns a StorageClass dynamic provision Persistent Volume.
	// It will set fsType to the StorageClass, if TestDriver supports it.
	// It will return nil, if the TestDriver doesn't support it.
	GetDynamicProvisionStorageClass(fsType string) *storagev1.StorageClass

	// GetClaimSize returns the size of the volume that is to be provisioned ("5Gi", "1Mi").
	// The size must be chosen so that the resulting volume is large enough for all
	// enabled tests and within the range supported by the underlying storage.
	GetClaimSize() string
}

DynamicPVTestDriver represents an interface for a TestDriver that supports DynamicPV

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, testResource interface{}) *v1.VolumeSource
}

InlineVolumeTestDriver represents an interface for a TestDriver that supports InlineVolume

type NodeSelection added in v1.14.0

type NodeSelection struct {
	Name     string
	Selector map[string]string
	Affinity *v1.Affinity
}

NodeSelection specifies where to run a pod, using a combination of fixed node name, node selector and/or affinity.

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.
	// Volume node affinity is optional, it will be nil for volumes which does not have volume node affinity.
	GetPersistentVolumeSource(readOnly bool, fsType string, testResource interface{}) (*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.
	CreateVolume(testpatterns.TestVolType) interface{}
	// DeleteVolume deletes a volume that is created in CreateVolume
	DeleteVolume(testpatterns.TestVolType, interface{})
}

PreprovisionedVolumeTestDriver represents an interface for a TestDriver that has pre-provisioned volume

type SnapshotClassTest added in v1.14.0

type SnapshotClassTest struct {
	Name                 string
	CloudProviders       []string
	Snapshotter          string
	Parameters           map[string]string
	NodeName             string
	NodeSelector         map[string]string // NodeSelector for the pod
	SnapshotContentCheck func(snapshotContent *unstructured.Unstructured) error
}

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() *unstructured.Unstructured
}

SnapshottableTestDriver represents an interface for a TestDriver that supports DynamicSnapshot

type StorageClassTest added in v1.13.0

type StorageClassTest struct {
	Name                 string
	CloudProviders       []string
	Provisioner          string
	StorageClassName     string
	Parameters           map[string]string
	DelayBinding         bool
	ClaimSize            string
	ExpectedSize         string
	PvCheck              func(claim *v1.PersistentVolumeClaim, volume *v1.PersistentVolume)
	VolumeMode           *v1.PersistentVolumeMode
	AllowVolumeExpansion bool
}

StorageClassTest represents parameters to be used by provisioning tests. Not all parameters are used by all tests.

type TestConfig

type TestConfig struct {
	// 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, then pods using a volume will be scheduled
	// onto the node with this name. Otherwise Kubernetes will
	// pick a node.
	ClientNodeName string

	// Some tests also support scheduling pods onto nodes with
	// these label/value pairs. As not all tests use this field,
	// a driver that absolutely needs the pods on a specific
	// node must use ClientNodeName.
	ClientNodeSelector map[string]string

	// 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 *framework.VolumeTestConfig

	// TopologyEnabled indicates that the Topology feature gate
	// should be enabled in external-provisioner
	TopologyEnabled bool
}

TestConfig represents parameters that control test execution. They can still be modified after defining tests, for example in a BeforeEach or when creating the driver.

type TestDriver added in v1.14.0

type TestDriver interface {
	// GetDriverInfo returns DriverInfo for the TestDriver
	GetDriverInfo() *DriverInfo
	// CreateDriver creates all driver resources that is required for TestDriver method
	// except CreateVolume
	CreateDriver()
	// CreateDriver cleanup all the resources that is created in CreateDriver
	CleanupDriver()
	// SkipUnsupportedTest skips test in Testpattern is not suitable to test with the TestDriver
	SkipUnsupportedTest(testpatterns.TestPattern)
}

TestDriver represents an interface for a driver to be tested in TestSuite

type TestResource

type TestResource interface {
	// contains filtered or unexported methods
}

TestResource represents an interface for resources that is used by TestSuite

type TestSuite

type TestSuite interface {
	// contains filtered or unexported methods
}

TestSuite represents an interface for a set of tests which works with TestDriver

func InitProvisioningTestSuite added in v1.13.0

func InitProvisioningTestSuite() TestSuite

InitProvisioningTestSuite returns provisioningTestSuite 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 InitVolumeIOTestSuite

func InitVolumeIOTestSuite() TestSuite

InitVolumeIOTestSuite returns volumeIOTestSuite that implements TestSuite interface

func InitVolumeModeTestSuite

func InitVolumeModeTestSuite() TestSuite

InitVolumeModeTestSuite returns volumeModeTestSuite that implements TestSuite interface

func InitVolumesTestSuite

func InitVolumesTestSuite() TestSuite

InitVolumesTestSuite returns volumesTestSuite that implements TestSuite interface

type TestSuiteInfo

type TestSuiteInfo struct {
	// contains filtered or unexported fields
}

TestSuiteInfo represents a set of parameters for TestSuite

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL