framework

package
v1.0.0-alpha.1 Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2021 License: Apache-2.0 Imports: 47 Imported by: 38

Documentation

Index

Constants

View Source
const (
	// Poll how often to poll for conditions
	Poll = 2 * time.Second

	// DefaultTimeout time to wait for operations to complete
	DefaultTimeout = 5 * time.Minute
)
View Source
const EchoService = "echo"

EchoService name of the deployment for the echo app

View Source
const HTTPBinService = "httpbin"

HTTPBinService name of the deployment for the httpbin app

View Source
const NginxBaseImage = "k8s.gcr.io/ingress-nginx/nginx:v20210530-g6aab4c291@sha256:a7356029dd0c26cc3466bf7a27daec0f4df73aa14ca6c8b871a767022a812c0b"

NginxBaseImage use for testing

View Source
const SlowEchoService = "slow-echo"

SlowEchoService name of the deployment for the echo app

Variables

View Source
var (
	// KubectlPath defines the full path of the kubectl binary
	KubectlPath = "/usr/local/bin/kubectl"
)
View Source
var RunID = uuid.NewUUID()

RunID unique identifier of the e2e run

Functions

func CreateIngressMASecret

func CreateIngressMASecret(client kubernetes.Interface, host string, secretName, namespace string) (*tls.Config, error)

CreateIngressMASecret creates or updates a Secret containing a Mutual Auth certificate-chain for the given Ingress and returns a TLS configuration suitable for HTTP clients to use against that particular Ingress.

func CreateIngressTLSSecret

func CreateIngressTLSSecret(client kubernetes.Interface, hosts []string, secretName, namespace string) (*tls.Config, error)

CreateIngressTLSSecret creates or updates a Secret containing a TLS certificate for the given Ingress and returns a TLS configuration suitable for HTTP clients to use against that particular Ingress.

func CreateKubeNamespace

func CreateKubeNamespace(baseName string, c kubernetes.Interface) (string, error)

CreateKubeNamespace creates a new namespace in the cluster

func DescribeAnnotation

func DescribeAnnotation(text string, body func()) bool

DescribeAnnotation wrapper function for ginkgo describe. Adds namespacing.

func DescribeSetting

func DescribeSetting(text string, body func()) bool

DescribeSetting wrapper function for ginkgo describe. Adds namespacing.

func Failf

func Failf(format string, args ...interface{})

Failf logs to the INFO logs and fails the test.

func IngressNginxDescribe

func IngressNginxDescribe(text string, body func()) bool

IngressNginxDescribe wrapper function for ginkgo describe. Adds namespacing.

func Logf

func Logf(format string, args ...interface{})

Logf logs to the INFO logs.

func Logs

func Logs(client kubernetes.Interface, namespace, podName string) (string, error)

Logs returns the log entries of a given Pod.

func MemoryLeakIt

func MemoryLeakIt(text string, body interface{}, timeout ...float64) bool

MemoryLeakIt is wrapper function for ginkgo It. Adds "[MemoryLeak]" tag and makes static analysis easier.

func NewInt32

func NewInt32(val int32) *int32

NewInt32 converts int32 to a pointer

func NewInt64

func NewInt64(val int64) *int64

NewInt64 converts int64 to a pointer

func NewSingleCatchAllIngress

func NewSingleCatchAllIngress(name, ns, service string, port int, annotations map[string]string) *networking.Ingress

NewSingleCatchAllIngress creates a simple ingress with a catch-all backend

func NewSingleIngress

func NewSingleIngress(name, path, host, ns, service string, port int, annotations map[string]string) *networking.Ingress

NewSingleIngress creates a simple ingress rule

func NewSingleIngressWithBackendAndRules

func NewSingleIngressWithBackendAndRules(name, path, host, ns, defaultService string, defaultPort int, service string, port int, annotations map[string]string) *networking.Ingress

NewSingleIngressWithBackendAndRules creates an ingress with both a default backend and a rule

func NewSingleIngressWithMultiplePaths

func NewSingleIngressWithMultiplePaths(name string, paths []string, host, ns, service string, port int, annotations map[string]string) *networking.Ingress

NewSingleIngressWithMultiplePaths creates a simple ingress rule with multiple paths

func NewSingleIngressWithTLS

func NewSingleIngressWithTLS(name, path, host string, tlsHosts []string, ns, service string, port int, annotations map[string]string) *networking.Ingress

NewSingleIngressWithTLS creates a simple ingress rule with TLS spec included

func RegisterParseFlags

func RegisterParseFlags()

RegisterParseFlags registers and parses flags for the test binary.

func RestclientConfig

func RestclientConfig(config, context string) (*api.Config, error)

RestclientConfig deserializes the contents of a kubeconfig file into a Config object.

func Sleep

func Sleep(duration ...time.Duration)

Sleep pauses the current goroutine for at least the duration d. If no duration is defined, it uses a default

func UpdateDeployment

func UpdateDeployment(kubeClientSet kubernetes.Interface, namespace string, name string, replicas int, updateFunc func(d *appsv1.Deployment) error) error

UpdateDeployment runs the given updateFunc on the deployment and waits for it to be updated

func UpdateIngress

func UpdateIngress(kubeClientSet kubernetes.Interface, namespace string, name string, updateFunc func(d *networking.Ingress) error) error

UpdateIngress runs the given updateFunc on the ingress

func WaitForEndpoints

func WaitForEndpoints(kubeClientSet kubernetes.Interface, timeout time.Duration, name, ns string, expectedEndpoints int) error

WaitForEndpoints waits for a given amount of time until the number of endpoints = expectedEndpoints.

func WaitForFileInFS

func WaitForFileInFS(file string) error

WaitForFileInFS waits a default amount of time for the specified file is present in the filesystem

func WaitForIngressInNamespace

func WaitForIngressInNamespace(c kubernetes.Interface, namespace, name string) error

WaitForIngressInNamespace waits until a particular ingress object exists namespace

func WaitForKubeNamespaceNotExist

func WaitForKubeNamespaceNotExist(c kubernetes.Interface, namespace string) error

WaitForKubeNamespaceNotExist waits until a namespaces is not present in the cluster

func WaitForNoIngressInNamespace

func WaitForNoIngressInNamespace(c kubernetes.Interface, namespace, name string) error

WaitForNoIngressInNamespace waits until there is no ingress object in a particular namespace

func WaitForNoPodsInNamespace

func WaitForNoPodsInNamespace(c kubernetes.Interface, namespace string) error

WaitForNoPodsInNamespace waits until there are no pods running in a namespace

func WaitForPodRunningInNamespace

func WaitForPodRunningInNamespace(c kubernetes.Interface, pod *corev1.Pod) error

WaitForPodRunningInNamespace waits a default amount of time (PodStartTimeout) for the specified pod to become running. Returns an error if timeout occurs first, or pod goes in to failed state.

func WaitForSecretInNamespace

func WaitForSecretInNamespace(c kubernetes.Interface, namespace, name string) error

WaitForSecretInNamespace waits a default amount of time for the specified secret is present in a particular namespace

func WaitForTLS

func WaitForTLS(url string, tlsConfig *tls.Config)

WaitForTLS waits until the TLS handshake with a given server completes successfully.

Types

type Framework

type Framework struct {
	BaseName string

	IsIngressV1Ready bool

	// A Kubernetes and Service Catalog client
	KubeClientSet          kubernetes.Interface
	KubeConfig             *restclient.Config
	APIExtensionsClientSet apiextcs.Interface

	Namespace string
	// contains filtered or unexported fields
}

Framework supports common operations used by e2e tests; it will keep a client & a namespace for you.

func NewDefaultFramework

func NewDefaultFramework(baseName string) *Framework

NewDefaultFramework makes a new framework and sets up a BeforeEach/AfterEach for you (you can write additional before/after each functions).

func (*Framework) AfterEach

func (f *Framework) AfterEach()

AfterEach deletes the namespace, after reading its events.

func (*Framework) BeforeEach

func (f *Framework) BeforeEach()

BeforeEach gets a client and makes a namespace.

func (*Framework) CreateConfigMap

func (f *Framework) CreateConfigMap(name string, data map[string]string)

CreateConfigMap creates a new configmap in the current namespace

func (*Framework) DeleteDeployment

func (f *Framework) DeleteDeployment(name string) error

DeleteDeployment deletes a deployment with a particular name and waits for the pods to be deleted

func (*Framework) DeleteNGINXPod

func (f *Framework) DeleteNGINXPod(grace int64)

DeleteNGINXPod deletes the currently running pod. It waits for the replacement pod to be up. Grace period to wait for pod shutdown is in seconds.

func (*Framework) EnsureConfigMap

func (f *Framework) EnsureConfigMap(configMap *api.ConfigMap) (*api.ConfigMap, error)

EnsureConfigMap creates a ConfigMap object or returns it if it already exists.

func (*Framework) EnsureDeployment

func (f *Framework) EnsureDeployment(deployment *appsv1.Deployment) *appsv1.Deployment

EnsureDeployment creates a Deployment object and returns it, throws error if it already exists.

func (*Framework) EnsureIngress

func (f *Framework) EnsureIngress(ingress *networking.Ingress) *networking.Ingress

EnsureIngress creates an Ingress object and returns it, throws error if it already exists.

func (*Framework) EnsureSecret

func (f *Framework) EnsureSecret(secret *api.Secret) *api.Secret

EnsureSecret creates a Secret object or returns it if it already exists.

func (*Framework) EnsureService

func (f *Framework) EnsureService(service *core.Service) *core.Service

EnsureService creates a Service object and returns it, throws error if it already exists.

func (*Framework) ExecCommand

func (f *Framework) ExecCommand(pod *corev1.Pod, command string) (string, error)

ExecCommand executes a command inside a the first container in a running pod

func (*Framework) ExecIngressPod

func (f *Framework) ExecIngressPod(command string) (string, error)

ExecIngressPod executes a command inside the first container in ingress controller running pod

func (*Framework) GetIngress

func (f *Framework) GetIngress(namespace string, name string) *networking.Ingress

GetIngress gets an Ingress object from the given namespace, name and returns it, throws error if it does not exists.

func (*Framework) GetIngressNGINXPod

func (f *Framework) GetIngressNGINXPod() *corev1.Pod

GetIngressNGINXPod returns the ingress controller running pod

func (*Framework) GetLbAlgorithm

func (f *Framework) GetLbAlgorithm(serviceName string, servicePort int) (string, error)

GetLbAlgorithm returns algorithm identifier for the given backend

func (*Framework) GetMetric

func (f *Framework) GetMetric(metricName, ip string) (*dto.MetricFamily, error)

GetMetric returns the current prometheus metric exposed by NGINX

func (*Framework) GetNginxIP

func (f *Framework) GetNginxIP() string

GetNginxIP returns the number of TCP port where NGINX is running

func (*Framework) GetNginxPodIP

func (f *Framework) GetNginxPodIP() string

GetNginxPodIP returns the IP addresses of the running pods

func (*Framework) GetURL

func (f *Framework) GetURL(scheme RequestScheme) string

GetURL returns the URL should be used to make a request to NGINX

func (*Framework) HTTPTestClient

func (f *Framework) HTTPTestClient() *httpexpect.Expect

HTTPTestClient returns a new httpexpect client for end-to-end HTTP testing.

func (*Framework) HTTPTestClientWithTLSConfig

func (f *Framework) HTTPTestClientWithTLSConfig(config *tls.Config) *httpexpect.Expect

HTTPTestClientWithTLSConfig returns a new httpexpect client for end-to-end HTTP testing with a custom TLS configuration.

func (*Framework) KubectlProxy

func (f *Framework) KubectlProxy(port int) (int, *exec.Cmd, error)

KubectlProxy creates a proxy to kubernetes apiserver

func (*Framework) NGINXWithConfigDeployment

func (f *Framework) NGINXWithConfigDeployment(name string, cfg string)

NGINXWithConfigDeployment creates an NGINX deployment using a configmap containing the nginx.conf configuration

func (*Framework) NamespaceContent

func (f *Framework) NamespaceContent() (string, error)

NamespaceContent executes a kubectl command that returns information about pods, services, endpoint and deployments inside the current namespace

func (*Framework) NewDeployment

func (f *Framework) NewDeployment(name, image string, port int32, replicas int32)

NewDeployment creates a new deployment in a particular namespace.

func (*Framework) NewEchoDeployment

func (f *Framework) NewEchoDeployment()

NewEchoDeployment creates a new single replica deployment of the echoserver image in a particular namespace

func (*Framework) NewEchoDeploymentWithNameAndReplicas

func (f *Framework) NewEchoDeploymentWithNameAndReplicas(name string, replicas int)

NewEchoDeploymentWithNameAndReplicas creates a new deployment of the echoserver image in a particular namespace. Number of replicas is configurable and name is configurable

func (*Framework) NewEchoDeploymentWithReplicas

func (f *Framework) NewEchoDeploymentWithReplicas(replicas int)

NewEchoDeploymentWithReplicas creates a new deployment of the echoserver image in a particular namespace. Number of replicas is configurable

func (*Framework) NewFastCGIHelloServerDeployment

func (f *Framework) NewFastCGIHelloServerDeployment()

NewFastCGIHelloServerDeployment creates a new single replica deployment of the fortune teller image in a particular namespace

func (*Framework) NewGRPCBinDeployment

func (f *Framework) NewGRPCBinDeployment()

NewGRPCBinDeployment creates a new deployment of the moul/grpcbin image for GRPC tests

func (*Framework) NewGRPCFortuneTellerDeployment

func (f *Framework) NewGRPCFortuneTellerDeployment()

NewGRPCFortuneTellerDeployment creates a new single replica deployment of the fortune teller image in a particular namespace

func (*Framework) NewHttpbinDeployment

func (f *Framework) NewHttpbinDeployment()

NewHttpbinDeployment creates a new single replica deployment of the httpbin image in a particular namespace.

func (*Framework) NewInfluxDBDeployment

func (f *Framework) NewInfluxDBDeployment()

NewInfluxDBDeployment creates an InfluxDB server configured to reply on 8086/tcp and 8089/udp

func (*Framework) NewNewFastCGIHelloServerDeploymentWithReplicas

func (f *Framework) NewNewFastCGIHelloServerDeploymentWithReplicas(replicas int32)

NewNewFastCGIHelloServerDeploymentWithReplicas creates a new deployment of the fortune teller image in a particular namespace. Number of replicas is configurable

func (*Framework) NewNewGRPCFortuneTellerDeploymentWithReplicas

func (f *Framework) NewNewGRPCFortuneTellerDeploymentWithReplicas(replicas int32)

NewNewGRPCFortuneTellerDeploymentWithReplicas creates a new deployment of the fortune teller image in a particular namespace. Number of replicas is configurable

func (*Framework) NewSlowEchoDeployment

func (f *Framework) NewSlowEchoDeployment()

NewSlowEchoDeployment creates a new deployment of the slow echo server image in a particular namespace.

func (*Framework) NginxLogs

func (f *Framework) NginxLogs() (string, error)

NginxLogs returns the logs of the nginx ingress controller pod running

func (*Framework) ScaleDeploymentToZero

func (f *Framework) ScaleDeploymentToZero(name string)

ScaleDeploymentToZero scales a deployment with a particular name and waits for the pods to be deleted

func (*Framework) SetNginxConfigMapData

func (f *Framework) SetNginxConfigMapData(cmData map[string]string)

SetNginxConfigMapData sets ingress-nginx's nginx-ingress-controller configMap data

func (*Framework) UpdateIngress

func (f *Framework) UpdateIngress(ingress *networking.Ingress) *networking.Ingress

UpdateIngress updates an Ingress object and returns the updated object.

func (*Framework) UpdateIngressControllerDeployment

func (f *Framework) UpdateIngressControllerDeployment(fn func(deployment *appsv1.Deployment) error) error

UpdateIngressControllerDeployment updates the ingress-nginx deployment

func (*Framework) UpdateNginxConfigMapData

func (f *Framework) UpdateNginxConfigMapData(key string, value string)

UpdateNginxConfigMapData updates single field in ingress-nginx's nginx-ingress-controller map data

func (*Framework) VerifyHealthz

func (f *Framework) VerifyHealthz(ip string, statusCode int) error

VerifyHealthz verifies the status code of the healthz endpoint

func (*Framework) WaitForNginxConfiguration

func (f *Framework) WaitForNginxConfiguration(matcher func(cfg string) bool)

WaitForNginxConfiguration waits until the nginx configuration contains a particular configuration `cfg` passed to matcher is normalized by replacing all tabs and spaces with single space.

func (*Framework) WaitForNginxCustomConfiguration

func (f *Framework) WaitForNginxCustomConfiguration(from string, to string, matcher func(cfg string) bool)

WaitForNginxCustomConfiguration waits until the nginx configuration given part (from, to) contains a particular configuration

func (*Framework) WaitForNginxListening

func (f *Framework) WaitForNginxListening(port int)

WaitForNginxListening waits until NGINX starts accepting connections on a port

func (*Framework) WaitForNginxServer

func (f *Framework) WaitForNginxServer(name string, matcher func(cfg string) bool)

WaitForNginxServer waits until the nginx configuration contains a particular server section. `cfg` passed to matcher is normalized by replacing all tabs and spaces with single space.

func (*Framework) WaitForReload

func (f *Framework) WaitForReload(fn func())

WaitForReload calls the passed function and asser it has caused at least 1 reload.

type RequestScheme

type RequestScheme string

RequestScheme define a scheme used in a test request.

const (
	HTTP  RequestScheme = "http"
	HTTPS RequestScheme = "https"
)

These are valid test request schemes.

type TestContextType

type TestContextType struct {
	KubeHost string
	//KubeConfig  string
	KubeContext string
}

TestContextType describes the client context to use in communications with the Kubernetes API.

var TestContext TestContextType

TestContext is the global client context for tests.

Jump to

Keyboard shortcuts

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