Documentation ¶
Overview ¶
Package framework contains the shared test framework for Submariner projects.
Index ¶
- Constants
- Variables
- func AddBeforeSuite(beforeSuite func())
- func AwaitAllocatedEgressIPs(client dynamic.ResourceInterface, name string) []string
- func AwaitGlobalEgressIPs(cluster ClusterIndex, name, namespace string) []string
- func AwaitResultOrError(opMsg string, doOperation DoOperationFunc, checkResult CheckResultFunc) (interface{}, string, error)
- func AwaitUntil(opMsg string, doOperation DoOperationFunc, checkResult CheckResultFunc) interface{}
- func BeforeSuite()
- func CreateGlobalEgressIP(cluster ClusterIndex, obj *unstructured.Unstructured) error
- func DetectGlobalnet()
- func Errorf(format string, args ...interface{})
- func ExpectNoError(err error, explain ...interface{})
- func ExpectNoErrorWithOffset(offset int, err error, explain ...interface{})
- func Failf(format string, args ...interface{})
- func FailfWithOffset(offset int, format string, args ...interface{})
- func InitNumClusterNodes() error
- func IsTransientError(err error, opMsg string) bool
- func Logf(format string, args ...interface{})
- func NestedString(obj map[string]interface{}, fields ...string) string
- func NoopCheckResult(interface{}) (bool, string, error)
- func PatchInt(path string, value uint32, patchFunc PatchFunc)
- func PatchString(path, value string, patchFunc PatchFunc)
- func RemoveCleanupAction(p CleanupActionHandle)
- func RunCleanupActions()
- func SetFailFunction(fail func(string))
- func SetStatusFunction(by func(string))
- func SetUserAgentFunction(uaf func() string)
- func Skipf(format string, args ...interface{})
- func ValidateFlags(t *TestContextType)
- type CheckResultFunc
- type CleanupActionHandle
- type ClusterIndex
- type DoOperationFunc
- type Docker
- type ExecOptions
- type Framework
- func (f *Framework) AddNamespacesToDelete(namespaces ...*corev1.Namespace)
- func (f *Framework) AfterEach()
- func (f *Framework) AwaitClusterGlobalEgressIPs(cluster ClusterIndex, name string) []string
- func (f *Framework) AwaitGatewayFullyConnected(cluster ClusterIndex, name string) *unstructured.Unstructured
- func (f *Framework) AwaitGatewayRemoved(cluster ClusterIndex, name string)
- func (f *Framework) AwaitGatewayWithStatus(cluster ClusterIndex, name, status string) *unstructured.Unstructured
- func (f *Framework) AwaitGatewaysWithStatus(cluster ClusterIndex, status string) []unstructured.Unstructured
- func (f *Framework) AwaitGlobalIngressIP(cluster ClusterIndex, name, namespace string) string
- func (f *Framework) AwaitGlobalIngressIPRemoved(cluster ClusterIndex, name, namespace string)
- func (f *Framework) AwaitPodsByAppLabel(cluster ClusterIndex, appName, namespace string, expectedCount int) *v1.PodList
- func (f *Framework) AwaitPodsByLabelSelector(cluster ClusterIndex, labelSelector, namespace string, expectedCount int) *v1.PodList
- func (f *Framework) AwaitRouteAgentPodOnNode(cluster ClusterIndex, nodeName string, prevPodUID types.UID) *v1.Pod
- func (f *Framework) AwaitSubmarinerGatewayPod(cluster ClusterIndex) *v1.Pod
- func (f *Framework) AwaitUntilAnnotationOnPod(cluster ClusterIndex, annotation, podName, namespace string) *v1.Pod
- func (f *Framework) AwaitUntilAnnotationOnService(cluster ClusterIndex, annotation, svcName, namespace string) *corev1.Service
- func (f *Framework) BeforeEach()
- func (f *Framework) CreateHeadlessTCPService(cluster ClusterIndex, selectorName string, port int) *corev1.Service
- func (f *Framework) CreateNamespace(clientSet *kubeclientset.Clientset, baseName string, labels map[string]string) *corev1.Namespace
- func (f *Framework) CreateService(sc typedv1.ServiceInterface, serviceSpec *corev1.Service) *corev1.Service
- func (f *Framework) CreateServiceExport(cluster ClusterIndex, name string)
- func (f *Framework) CreateTCPEndpoints(cluster ClusterIndex, epName, portName, address string, port int) *corev1.Endpoints
- func (f *Framework) CreateTCPService(cluster ClusterIndex, selectorName string, port int) *corev1.Service
- func (f *Framework) CreateTCPServiceWithoutSelector(cluster ClusterIndex, svcName, portName string, port int) *corev1.Service
- func (f *Framework) DeleteEndpoints(cluster ClusterIndex, endpointsName string)
- func (f *Framework) DeleteGateway(cluster ClusterIndex, name string)
- func (f *Framework) DeletePod(cluster ClusterIndex, podName, namespace string)
- func (f *Framework) DeleteService(cluster ClusterIndex, serviceName string)
- func (f *Framework) DeleteServiceExport(cluster ClusterIndex, name string)
- func (f *Framework) ExecWithOptions(options *ExecOptions, index ClusterIndex) (string, string, error)
- func (f *Framework) FindDeployment(cluster ClusterIndex, appName, namespace string) *appsv1.Deployment
- func (f *Framework) FindNodesByGatewayLabel(cluster ClusterIndex, isGateway bool) []*v1.Node
- func (f *Framework) GatewayCleanup()
- func (f *Framework) GetGatewaysWithHAStatus(cluster ClusterIndex, status string) []unstructured.Unstructured
- func (f *Framework) NewNetShootDeployment(cluster ClusterIndex) *corev1.PodList
- func (f *Framework) NewNetworkPod(config *NetworkPodConfig) *NetworkPod
- func (f *Framework) NewNginxDeployment(cluster ClusterIndex) *corev1.PodList
- func (f *Framework) NewNginxService(cluster ClusterIndex) *corev1.Service
- func (f *Framework) NewService(name, portName string, port int, protocol corev1.Protocol, ...) *corev1.Service
- func (f *Framework) SetGatewayLabelOnNode(cluster ClusterIndex, nodeName string, isGateway bool)
- type NetworkPod
- func (np *NetworkPod) AwaitFinish()
- func (np *NetworkPod) AwaitFinishVerbose(verbose bool)
- func (np *NetworkPod) AwaitReady()
- func (np *NetworkPod) CheckSuccessfulFinish()
- func (np *NetworkPod) CreateService() *v1.Service
- func (np *NetworkPod) GetLog() string
- func (np *NetworkPod) RunCommand(cmd []string) (string, string)
- type NetworkPodConfig
- type NetworkPodScheduling
- type NetworkPodType
- type NetworkingType
- type PatchFunc
- type PatchStringValue
- type PatchUInt32Value
- type TestContextType
Constants ¶
const ( SubmarinerGateway = "submariner-gateway" RouteAgent = "submariner-routeagent" GatewayLabel = "submariner.io/gateway" )
const ( // Polling interval while trying to create objects. PollInterval = 100 * time.Millisecond )
const (
TestAppLabel = "test-app"
)
const (
TestPort = 1234
)
Variables ¶
var ( RestConfigs []*rest.Config KubeClients []*kubeclientset.Clientset DynClients []dynamic.Interface )
var ( By func(string) Fail func(string) )
var TestContext = &TestContextType{
ClientQPS: 20,
ClientBurst: 50,
}
Functions ¶
func AddBeforeSuite ¶
func AddBeforeSuite(beforeSuite func())
func AwaitAllocatedEgressIPs ¶ added in v0.10.1
func AwaitAllocatedEgressIPs(client dynamic.ResourceInterface, name string) []string
func AwaitGlobalEgressIPs ¶ added in v0.10.1
func AwaitGlobalEgressIPs(cluster ClusterIndex, name, namespace string) []string
func AwaitResultOrError ¶
func AwaitResultOrError(opMsg string, doOperation DoOperationFunc, checkResult CheckResultFunc) (interface{}, string, error)
func AwaitUntil ¶
func AwaitUntil(opMsg string, doOperation DoOperationFunc, checkResult CheckResultFunc) interface{}
AwaitUntil periodically performs the given operation until the given CheckResultFunc returns true, an error, or a timeout is reached.
func BeforeSuite ¶
func BeforeSuite()
func CreateGlobalEgressIP ¶ added in v0.10.1
func CreateGlobalEgressIP(cluster ClusterIndex, obj *unstructured.Unstructured) error
func DetectGlobalnet ¶ added in v0.7.2
func DetectGlobalnet()
func ExpectNoError ¶
func ExpectNoError(err error, explain ...interface{})
func ExpectNoErrorWithOffset ¶
ExpectNoErrorWithOffset checks if "err" is set, and if so, fails assertion while logging the error at "offset" levels above its caller (for example, for call chain f -> g -> ExpectNoErrorWithOffset(1, ...) error would be logged for "f").
func FailfWithOffset ¶
FailfWithOffset calls "Fail" and logs the error at "offset" levels above its caller (for example, for call chain f -> g -> FailfWithOffset(1, ...) error would be logged for "f").
func InitNumClusterNodes ¶ added in v0.12.0
func InitNumClusterNodes() error
func IsTransientError ¶
identify API errors which could be considered transient/recoverable due to server state.
func NestedString ¶ added in v0.9.0
func NoopCheckResult ¶
func PatchString ¶
PatchString performs a REST patch operation for the given path and string value.
func RemoveCleanupAction ¶
func RemoveCleanupAction(p CleanupActionHandle)
RemoveCleanupAction removes a function that was installed by AddCleanupAction.
func RunCleanupActions ¶
func RunCleanupActions()
RunCleanupActions runs all functions installed by AddCleanupAction. It does not remove them (see RemoveCleanupAction) but it does run unlocked, so they may remove themselves.
func SetFailFunction ¶ added in v0.7.0
func SetFailFunction(fail func(string))
func SetStatusFunction ¶ added in v0.7.0
func SetStatusFunction(by func(string))
func SetUserAgentFunction ¶ added in v0.7.0
func SetUserAgentFunction(uaf func() string)
func ValidateFlags ¶
func ValidateFlags(t *TestContextType)
Types ¶
type CheckResultFunc ¶
type CleanupActionHandle ¶
type CleanupActionHandle *int
CleanupActionHandle is an integer pointer type for handling cleanup action.
func AddCleanupAction ¶
func AddCleanupAction(fn func()) CleanupActionHandle
AddCleanupAction installs a function that will be called in the event of the whole test being terminated. This allows arbitrary pieces of the overall test to hook into SynchronizedAfterSuite().
type DoOperationFunc ¶
type DoOperationFunc func() (interface{}, error)
type Docker ¶ added in v0.9.0
type Docker struct {
Name string
}
func (*Docker) RunCommand ¶ added in v0.9.0
type ExecOptions ¶
type ExecOptions struct { Command []string Namespace string PodName string ContainerName string Stdin io.Reader CaptureStdout bool CaptureStderr bool // If false, whitespace in std{err,out} will be removed. PreserveWhitespace bool }
ExecOptions passed to ExecWithOptions.
type Framework ¶
type Framework struct { BaseName string // Set together with creating the ClientSet and the namespace. // Guaranteed to be unique in the cluster even when running the same // test multiple times in parallel. UniqueName string SkipNamespaceCreation bool // Whether to skip creating a namespace Namespace string // Every test has a namespace at least unless creation is skipped NamespaceDeletionTimeout time.Duration // contains filtered or unexported fields }
Framework supports common operations used by e2e tests; it will keep a client & a namespace for you. Eventual goal is to merge this with integration test framework.
func NewBareFramework ¶ added in v0.7.0
NewBareFramework creates a test framework, without ginkgo dependencies.
func NewFramework ¶
NewFramework creates a test framework, under ginkgo.
func (*Framework) AddNamespacesToDelete ¶
func (*Framework) AfterEach ¶
func (f *Framework) AfterEach()
AfterEach deletes the namespace, after reading its events.
func (*Framework) AwaitClusterGlobalEgressIPs ¶ added in v0.10.1
func (f *Framework) AwaitClusterGlobalEgressIPs(cluster ClusterIndex, name string) []string
func (*Framework) AwaitGatewayFullyConnected ¶ added in v0.9.0
func (f *Framework) AwaitGatewayFullyConnected(cluster ClusterIndex, name string) *unstructured.Unstructured
func (*Framework) AwaitGatewayRemoved ¶ added in v0.9.0
func (f *Framework) AwaitGatewayRemoved(cluster ClusterIndex, name string)
func (*Framework) AwaitGatewayWithStatus ¶ added in v0.9.0
func (f *Framework) AwaitGatewayWithStatus(cluster ClusterIndex, name, status string) *unstructured.Unstructured
func (*Framework) AwaitGatewaysWithStatus ¶ added in v0.9.0
func (f *Framework) AwaitGatewaysWithStatus(cluster ClusterIndex, status string) []unstructured.Unstructured
func (*Framework) AwaitGlobalIngressIP ¶ added in v0.10.1
func (f *Framework) AwaitGlobalIngressIP(cluster ClusterIndex, name, namespace string) string
func (*Framework) AwaitGlobalIngressIPRemoved ¶ added in v0.10.1
func (f *Framework) AwaitGlobalIngressIPRemoved(cluster ClusterIndex, name, namespace string)
func (*Framework) AwaitPodsByAppLabel ¶
func (f *Framework) AwaitPodsByAppLabel(cluster ClusterIndex, appName, namespace string, expectedCount int) *v1.PodList
AwaitPodsByAppLabel finds pods in a given cluster whose 'app' label value matches a specified value. If the specified expectedCount >= 0, the function waits until the number of pods equals the expectedCount.
func (*Framework) AwaitPodsByLabelSelector ¶ added in v0.10.1
func (f *Framework) AwaitPodsByLabelSelector(cluster ClusterIndex, labelSelector, namespace string, expectedCount int) *v1.PodList
AwaitPodsByLabelSelector finds pods in a given cluster whose labels match a specified label selector. If the specified expectedCount >= 0, the function waits until the number of pods equals the expectedCount.
func (*Framework) AwaitRouteAgentPodOnNode ¶ added in v0.9.0
func (f *Framework) AwaitRouteAgentPodOnNode(cluster ClusterIndex, nodeName string, prevPodUID types.UID) *v1.Pod
AwaitRouteAgentPodOnNode finds the route agent pod on a given node in a cluster, waiting if necessary for a period of time for the pod to materialize. If prevPodUID is non-empty, the found pod's UID must not match it.
func (*Framework) AwaitSubmarinerGatewayPod ¶ added in v0.9.0
func (f *Framework) AwaitSubmarinerGatewayPod(cluster ClusterIndex) *v1.Pod
AwaitSubmarinerGatewayPod finds the submariner gateway pod in a given cluster, waiting if necessary for a period of time for the pod to materialize.
func (*Framework) AwaitUntilAnnotationOnPod ¶ added in v0.4.0
func (f *Framework) AwaitUntilAnnotationOnPod(cluster ClusterIndex, annotation, podName, namespace string) *v1.Pod
AwaitUntilAnnotationOnPod queries the Pod and looks for the presence of annotation.
func (*Framework) AwaitUntilAnnotationOnService ¶ added in v0.4.0
func (f *Framework) AwaitUntilAnnotationOnService(cluster ClusterIndex, annotation, svcName, namespace string) *corev1.Service
AwaitUntilAnnotationOnService queries the service and looks for the presence of annotation.
func (*Framework) BeforeEach ¶
func (f *Framework) BeforeEach()
func (*Framework) CreateHeadlessTCPService ¶ added in v0.10.1
func (*Framework) CreateNamespace ¶
func (f *Framework) CreateNamespace(clientSet *kubeclientset.Clientset, baseName string, labels map[string]string, ) *corev1.Namespace
CreateNamespace creates a namespace for e2e testing.
func (*Framework) CreateService ¶ added in v0.10.1
func (*Framework) CreateServiceExport ¶ added in v0.9.0
func (f *Framework) CreateServiceExport(cluster ClusterIndex, name string)
func (*Framework) CreateTCPEndpoints ¶ added in v0.10.1
func (*Framework) CreateTCPService ¶
func (*Framework) CreateTCPServiceWithoutSelector ¶ added in v0.10.1
func (*Framework) DeleteEndpoints ¶ added in v0.10.1
func (f *Framework) DeleteEndpoints(cluster ClusterIndex, endpointsName string)
func (*Framework) DeleteGateway ¶ added in v0.9.0
func (f *Framework) DeleteGateway(cluster ClusterIndex, name string)
func (*Framework) DeletePod ¶
func (f *Framework) DeletePod(cluster ClusterIndex, podName, namespace string)
DeletePod deletes the pod for the given name and namespace.
func (*Framework) DeleteService ¶
func (f *Framework) DeleteService(cluster ClusterIndex, serviceName string)
func (*Framework) DeleteServiceExport ¶ added in v0.9.0
func (f *Framework) DeleteServiceExport(cluster ClusterIndex, name string)
func (*Framework) ExecWithOptions ¶
func (f *Framework) ExecWithOptions(options *ExecOptions, index ClusterIndex) (string, string, error)
ExecWithOptions executes a command in the specified container, returning stdout, stderr and error. `options` allowed for additional parameters to be passed.
func (*Framework) FindDeployment ¶
func (f *Framework) FindDeployment(cluster ClusterIndex, appName, namespace string) *appsv1.Deployment
func (*Framework) FindNodesByGatewayLabel ¶
func (f *Framework) FindNodesByGatewayLabel(cluster ClusterIndex, isGateway bool) []*v1.Node
FindNodesByGatewayLabel finds the nodes in a given cluster by matching 'submariner.io/gateway' value. A missing label is treated as false. Note the control plane node labeled as master is ignored.
func (*Framework) GatewayCleanup ¶ added in v0.9.0
func (f *Framework) GatewayCleanup()
GatewayCleanup ensures that only the active gateway node is flagged as gateway node which could not be after a failed
test which left the system on an unexpected state.
func (*Framework) GetGatewaysWithHAStatus ¶ added in v0.9.0
func (f *Framework) GetGatewaysWithHAStatus( cluster ClusterIndex, status string, ) []unstructured.Unstructured
func (*Framework) NewNetShootDeployment ¶
func (f *Framework) NewNetShootDeployment(cluster ClusterIndex) *corev1.PodList
func (*Framework) NewNetworkPod ¶
func (f *Framework) NewNetworkPod(config *NetworkPodConfig) *NetworkPod
func (*Framework) NewNginxDeployment ¶
func (f *Framework) NewNginxDeployment(cluster ClusterIndex) *corev1.PodList
func (*Framework) NewNginxService ¶
func (f *Framework) NewNginxService(cluster ClusterIndex) *corev1.Service
func (*Framework) NewService ¶ added in v0.10.1
func (*Framework) SetGatewayLabelOnNode ¶
func (f *Framework) SetGatewayLabelOnNode(cluster ClusterIndex, nodeName string, isGateway bool)
SetGatewayLabelOnNode sets the 'submariner.io/gateway' value for a node to the specified value.
type NetworkPod ¶
type NetworkPod struct { Pod *v1.Pod Config *NetworkPodConfig TerminationError error TerminationErrorMsg string TerminationCode int32 TerminationMessage string // contains filtered or unexported fields }
func (*NetworkPod) AwaitFinish ¶
func (np *NetworkPod) AwaitFinish()
func (*NetworkPod) AwaitFinishVerbose ¶ added in v0.7.2
func (np *NetworkPod) AwaitFinishVerbose(verbose bool)
func (*NetworkPod) AwaitReady ¶
func (np *NetworkPod) AwaitReady()
func (*NetworkPod) CheckSuccessfulFinish ¶
func (np *NetworkPod) CheckSuccessfulFinish()
func (*NetworkPod) CreateService ¶
func (np *NetworkPod) CreateService() *v1.Service
func (*NetworkPod) GetLog ¶ added in v0.9.0
func (np *NetworkPod) GetLog() string
GetLog returns container log from this NetworkPod.
func (*NetworkPod) RunCommand ¶ added in v0.9.0
func (np *NetworkPod) RunCommand(cmd []string) (string, string)
RunCommand run the specified command in this NetworkPod.
type NetworkPodConfig ¶
type NetworkPodConfig struct { Type NetworkPodType Cluster ClusterIndex Scheduling NetworkPodScheduling Port int Data string RemoteIP string ConnectionTimeout uint ConnectionAttempts uint Networking NetworkingType ContainerName string ImageName string Command []string }
type NetworkPodScheduling ¶
type NetworkPodScheduling int
const ( InvalidScheduling NetworkPodScheduling = iota GatewayNode NonGatewayNode )
type NetworkPodType ¶
type NetworkPodType int
const ( InvalidPodType NetworkPodType = iota ListenerPod ConnectorPod ThroughputClientPod ThroughputServerPod LatencyClientPod LatencyServerPod CustomPod )
type NetworkingType ¶
type NetworkingType bool
const ( HostNetworking NetworkingType = true PodNetworking NetworkingType = false )
type PatchStringValue ¶
type PatchUInt32Value ¶
type TestContextType ¶
type TestContextType struct { KubeConfigs []string // KubeConfigs provides an alternative to KubeConfig + KubeContexts KubeConfig string KubeContexts contextArray ClusterIDs []string NumNodesInCluster map[ClusterIndex]int JunitReport string SubmarinerNamespace string ConnectionTimeout uint ConnectionAttempts uint OperationTimeout uint GlobalnetEnabled bool ClientQPS float32 ClientBurst int GroupVersion *schema.GroupVersion }
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package ginkgowrapper wraps Ginkgo Fail and Skip functions to panic with structured data instead of a constant string.
|
Package ginkgowrapper wraps Ginkgo Fail and Skip functions to panic with structured data instead of a constant string. |