helpers

package
v3.1.0 Latest Latest
Warning

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

Go to latest
Published: Feb 7, 2024 License: Apache-2.0 Imports: 39 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultGatewayName is the default name for the Gateways created during tests.
	DefaultGatewayName = "kong"
)

Variables

This section is empty.

Functions

func CountHTTPGetResponses

func CountHTTPGetResponses(
	t *testing.T,
	proxyURL *url.URL,
	cfg CountHTTPResponsesConfig,
	matchers ...ResponseMatcher,
) (matchedResponseCounter map[string]int)

func CreateIngressClass added in v3.1.0

func CreateIngressClass(ctx context.Context, ingressClassName string, client *kubernetes.Clientset) error

func DefaultHTTPClient

func DefaultHTTPClient() *http.Client

DefaultHTTPClient returns a client that should be used by default in tests. All defaults that should be propagated to tests for use should be changed in here.

func DefaultHTTPClientWithProxy

func DefaultHTTPClientWithProxy(proxyURL *url.URL) *http.Client

func DeployGateway added in v3.1.0

func DeployGateway(ctx context.Context, client *gatewayclient.Clientset, namespace, gatewayClassName string, opts ...func(*gatewayapi.Gateway)) (*gatewayapi.Gateway, error)

DeployGateway creates a default gateway, accepts a variadic set of options, and finally deploys it on the Kubernetes cluster by means of the gateway client given as arg.

func DeployGatewayClass added in v3.1.0

func DeployGatewayClass(ctx context.Context, client *gatewayclient.Clientset, gatewayClassName string, opts ...func(*gatewayapi.GatewayClass)) (*gatewayapi.GatewayClass, error)

DeployGatewayClass creates a default gatewayClass, accepts a variadic set of options, and finally deploys it on the Kubernetes cluster by means of the gateway client given as arg.

func DistributionOfMapValues

func DistributionOfMapValues(counter map[string]int) map[string]float64

DistributionOfMapValues returns a map of the values in the given counter map and the relative frequency of each value.

func EventuallyExpectHTTP404WithNoRoute

func EventuallyExpectHTTP404WithNoRoute(
	t *testing.T,
	proxyURL *url.URL,
	host string,
	path string,
	waitDuration time.Duration,
	waitTick time.Duration,
	headers map[string]string,
)

EventuallyExpectHTTP404WithNoRoute is used to check whether a given http response is (specifically) a Kong 404.

func EventuallyGETPath

func EventuallyGETPath(
	t *testing.T,
	proxyURL *url.URL,
	host string,
	path string,
	statusCode int,
	bodyContents string,
	headers map[string]string,
	waitDuration time.Duration,
	waitTick time.Duration,
)

EventuallyGETPath makes a GET request to the Kong proxy multiple times until either the request starts to respond with the given status code and contents present in the response body, or until timeout occurs according to ingressWait time limits. This uses a "require" for the desired conditions so if this request doesn't eventually succeed the calling test will fail and stop. Parameter proxyURL is the URL of Kong Gateway proxy (set nil when it's not different from parameter host). Parameter host, path and headers are used to make the GET request. Response is expected to have the given statusCode and contain the passed bodyContents.

func ExitOnErr added in v3.1.0

func ExitOnErr(ctx context.Context, err error)

ExitOnErr is a wrapper around exitOnErrorWithCode that defaults to using the ExitCodeEnvSetupFailed exit code. This function is meant for convenience to wrap errors in setup that are hard to predict.

func ExitOnErrWithCode added in v3.1.0

func ExitOnErrWithCode(ctx context.Context, err error, exitCode int, fns ...CleanupFunc)

ExitOnErrWithCode is a helper function meant for us in the test.Main to simplify failing and exiting the tests under unrecoverable error conditions. It will also attempt to perform any cluster cleaning necessary before exiting.

func GenerateKongBuilder

func GenerateKongBuilder(_ context.Context) (*kong.Builder, []string, error)

GenerateKongBuilder returns a Kong KTF addon builder, a string slice of controller arguments needed to interact with the addon and an error.

func GetGatewayIsLinkedCallback added in v3.1.0

func GetGatewayIsLinkedCallback(
	ctx context.Context,
	t *testing.T,
	c *gatewayclient.Clientset,
	protocolType gatewayapi.ProtocolType,
	namespace,
	name string,
) func() bool

GetGatewayIsLinkedCallback returns a callback that checks if the specific Route (HTTP, TCP, TLS, or UDP) is correctly linked to a supported gateway.

func GetGatewayIsUnlinkedCallback added in v3.1.0

func GetGatewayIsUnlinkedCallback(
	ctx context.Context,
	t *testing.T,
	c *gatewayclient.Clientset,
	protocolType gatewayapi.ProtocolType,
	namespace,
	name string,
) func() bool

GetGatewayIsUnlinkedCallback returns a callback that checks if the specific Route (HTTP, TCP, TLS, or UDP) is correctly unlinked from a supported gateway.

func GetKongDBMode

func GetKongDBMode(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) (dpconf.DBMode, error)

GetKongDBMode returns kong dbmode using the provided Admin API URL.

func GetKongLicenses added in v3.1.0

func GetKongLicenses(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) ([]*kong.License, error)

GetKongLicenses fetches all licenses applied to Kong gateway.

func GetKongRootConfig

func GetKongRootConfig(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) (map[string]any, error)

GetKongRootConfig gets version and root configurations of Kong from / endpoint of the provided Admin API URL.

func GetKongRouterFlavor

func GetKongRouterFlavor(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) (dpconf.RouterFlavor, error)

GetKongRouterFlavor gets router flavor of Kong using the provided Admin API URL.

func GetKongVersion

func GetKongVersion(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) (kong.Version, error)

GetKongVersion returns kong version using the provided Admin API URL.

func GetVerifyProgrammedConditionCallback added in v3.1.0

func GetVerifyProgrammedConditionCallback(t *testing.T,
	c *gatewayclient.Clientset,
	protocolType gatewayapi.ProtocolType,
	namespace, name string,
	expectedStatus metav1.ConditionStatus,
) func() bool

func LabelValueForTest

func LabelValueForTest(t *testing.T) string

LabelValueForTest returns a sanitized test name that can be used as kubernetes label value.

func MustHTTPRequest

func MustHTTPRequest(t *testing.T, method string, host, path string, headers map[string]string) *http.Request

MustHTTPRequest creates a request with provided parameters and it fails the test that it was called in when request creation fails.

func MustParseURL

func MustParseURL(t *testing.T, urlStr string) *url.URL

MustParseURL parses a string format URL to *url.URL. If error happens, fails the test.

func Namespace

Namespace provides the Namespace provisioned for each test case given their t.Name as the "testCase".

func RemoveCluster

func RemoveCluster(ctx context.Context, cluster clusters.Cluster) error

RemoveCluster removes the cluster if it was created by the test suite. Pass desired timeout through context.

func RetryableHTTPClient

func RetryableHTTPClient(base *http.Client) *http.Client

RetryableHTTPClient wraps a client with retry logic. That should be used when calling external services that might temporarily fail (e.g. Konnect APIs), and we don't want them to affect the test results.

func Setup

Setup is a test helper function which:

  • creates a cluster cleaner which will be used to to clean up test resources automatically after the test finishes and creates a new namespace for the test to use.
  • creates a namespace for the provided test and adds it to the cleaner for automatic cleanup using the previously created cleaner.

TODO move this into a shared library https://github.com/Kong/kubernetes-testing-framework/issues/302

func TeardownCluster

func TeardownCluster(ctx context.Context, t *testing.T, cluster clusters.Cluster)

TeardownCluster dumps the diagnostics from the test cluster if the test failed and performs a cluster removal.

func ValidateMinimalSupportedKongVersion

func ValidateMinimalSupportedKongVersion(ctx context.Context, proxyAdminURL *url.URL, kongTestPassword string) (kong.Version, error)

ValidateMinimalSupportedKongVersion returns version of Kong Gateway running at the provided Admin API URL. In case the version is below the minimal supported version versions.KICv3VersionCutoff (3.4.1), it returns an error.

func WaitForDeploymentRollout added in v3.1.0

func WaitForDeploymentRollout(ctx context.Context, t *testing.T, cluster clusters.Cluster, namespace, name string)

WaitForDeploymentRollout waits for the deployment to roll out in the cluster. It fails the test if the deployment doesn't roll out in time.

Types

type CleanupFunc added in v3.1.0

type CleanupFunc func(context.Context) error

type ControllerManagerOpt added in v3.1.0

type ControllerManagerOpt func([]string) []string

func ControllerManagerOptAdditionalWatchNamespace added in v3.1.0

func ControllerManagerOptAdditionalWatchNamespace(ns string) ControllerManagerOpt

ControllerManagerOptAdditionalWatchNamespace adds the provided namespace to controller manager's watch namespaces if it's not there yet.

type CountHTTPResponsesConfig

type CountHTTPResponsesConfig struct {
	Method      string
	Host        string
	Path        string
	Headers     map[string]string
	Duration    time.Duration
	RequestTick time.Duration
}

type ResponseMatcher

type ResponseMatcher func(resp *http.Response, respBody string) (key string, ok bool)

ResponseMatcher is a function that returns match-name and whether the response matches the provided criteria.

func MatchRespByStatusAndContent

func MatchRespByStatusAndContent(
	responseName string,
	expectedStatusCode int,
	expectedBodyContents string,
) ResponseMatcher

MatchRespByStatusAndContent returns a responseMatcher that matches the given status code and body contents.

type TCPProxy

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

TCPProxy is a simple server that forwards TCP connections to a given destination. It can be used to simulate network failures by stopping accepting new connections and interrupting existing ones.

func NewTCPProxy

func NewTCPProxy(destination string) (*TCPProxy, error)

func (*TCPProxy) Address

func (p *TCPProxy) Address() string

Address returns the address of the proxy.

func (*TCPProxy) Run

func (p *TCPProxy) Run(ctx context.Context) error

Run starts connections accepting loop and blocks until the context is canceled.

func (*TCPProxy) StartHandlingConnections

func (p *TCPProxy) StartHandlingConnections()

StartHandlingConnections starts handling new connections.

func (*TCPProxy) StopHandlingConnections

func (p *TCPProxy) StopHandlingConnections()

StopHandlingConnections stops handling connections by interrupting all existing connections and immediately closing new connections.

type TooOldKongGatewayError

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

func (TooOldKongGatewayError) Error

func (e TooOldKongGatewayError) Error() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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