test

package
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Nov 28, 2018 License: Apache-2.0 Imports: 25 Imported by: 0

README

Test

This directory contains tests and testing docs for Knative Eventing.

Running unit tests

Use go test:

go test -v ./pkg/...

By default go test will not run the e2e tests, which need -tags=e2e to be enabled.

Presubmit tests

presubmit-tests.sh is the entry point for the end-to-end tests.

This script, and consequently, the e2e tests will be run before every code submission. You can run these tests manually with:

test/presubmit-tests.sh

Note that to run presubmit-tests.sh or e2e-tests.sh scripts, you need to have a running environment that meets the e2e test environment requirements

Running end-to-end tests

To run the e2e tests, you need to have a running environment that meets the e2e test environment requirements, and you need to specify the build tag e2e.

go test -v -tags=e2e -count=1 ./test/e2e
One test case

To run one e2e test case, e.g. TestKubernetesEvents, use the -run flag with go test:

go test -v -tags=e2e -count=1 ./test/e2e -run ^TestKubernetesEvents$
Environment requirements

There's couple of things you need to install before running e2e tests locally.

  1. kubetest installed:
    go get -u k8s.io/test-infra/kubetest
    
  2. [A running Knative Serving cluster.]
  3. A docker repo containing the test images

Simply run the ./test/e2e-tests.sh script. It will create a GKE cluster, install Knative Serving stack with Istio, upload test images to your Docker repo and run the end-to-end tests against the Knative Eventing built from source.

If you already have the *_OVERRIDE environment variables set, call the script with the --run-tests argument and it will use the cluster and run the tests. Note that this requires you to have Serving and Istio installed and configured to your particular configuration setup. Knative Eventing will still built and deployed from source.

Otherwise, calling this script without arguments will create a new cluster in project $PROJECT_ID, start Knative Serving and the eventing system, upload test images, run the tests and delete the cluster. In this case, it's required that $DOCKER_REPO_OVERRIDE points to a valid writable docker repo.

Test images

Building the test images

Note: this is only required when you run e2e tests locally with go test commands. Running tests throught e2e-tests.sh will publish the images automatically.

The upload-test-images.sh script can be used to build and push the test images used by the e2e tests. It requires:

To run the script for all end to end test images:

./test/upload-test-images.sh e2e

A docker tag is mandatory to avoid issues with using latest tag for images deployed in GCR.

Adding new test images

New test images should be placed in ./test/test_images. For each image create a new sub-folder and include a Go file that will be an entry point to the application. This Go file should use the package "main" and include the function main(). It is a good practice to include a readme file as well. When uploading test images, ko will build an image from this folder.

Flags

Flags are similar to those in Knative Serving

Documentation

Index

Constants

This section is empty.

Variables

View Source
var EventingFlags = initializeEventingFlags()

EventingFlags holds the command line flags specific to knative/eventing

Functions

func Channel

func Channel(name string, namespace string, provisioner *corev1.ObjectReference) *v1alpha1.Channel

Channel returns a Channel with the specified provisioner

func ChannelRef

func ChannelRef(name string) *corev1.ObjectReference

ChannelRef returns an ObjectReference for a given Channel Name

func CleanupOnInterrupt

func CleanupOnInterrupt(cleanup func(), logger *logging.BaseLogger)

CleanupOnInterrupt will execute the function cleanup if an interrupt signal is caught

func ClusterChannelProvisioner

func ClusterChannelProvisioner(name string) *corev1.ObjectReference

ClusterChannelProvisioner returns a ClusterChannelProvisioner for a given name

func ClusterRoleBinding

func ClusterRoleBinding(name string, namespace string, serviceAccount string, role string) *rbacv1beta1.ClusterRoleBinding

ClusterRoleBinding returns ClusterRoleBinding for given subject and role

func Configuration

func Configuration(name string, namespace string, imagePath string) *servingv1alpha1.Configuration

Configuration returns a Configuration object in namespace with the name names.Config that uses the image specified by imagePath.

func IsRevisionReady

func IsRevisionReady(r *v1alpha1.Revision) (bool, error)

IsRevisionReady will check the status conditions of the revision and return true if the revision is ready to serve traffic. It will return false if the status indicates a state other than deploying or being ready. It will also return false if the type of the condition is unexpected.

func IsRouteReady

func IsRouteReady(r *v1alpha1.Route) (bool, error)

IsRouteReady will check the status conditions of the route and return true if the route is ready.

func IsServiceReady

func IsServiceReady(s *v1alpha1.Service) (bool, error)

IsServiceReady will check the status conditions of the service and return true if the service is ready. This means that its configurations and routes have all reported ready.

func KubernetesEventSource

func KubernetesEventSource(name string, namespace string, targetNamespace string, serviceAccount string, channel *corev1.ObjectReference) *sourcesv1alpha1.KubernetesEventSource

KubernetesEventSource returns a KubernetesEventSource sinking to specified channel

func NGinxPod

func NGinxPod(namespace string) *corev1.Pod

NGinxPod returns nginx pod defined in given namespace

func PodsRunning

func PodsRunning(podList *corev1.PodList) (bool, error)

PodsRunning will check the status conditions of the pod list and return true all pods are Running

func Route

func Route(name string, namespace string, configName string) *servingv1alpha1.Route

Route returns a Route object in namespace

func ServiceAccount

func ServiceAccount(name string, namespace string) *corev1.ServiceAccount

ServiceAccount returns ServiceAccount object in given namespace

func SubscriberSpecForRoute

func SubscriberSpecForRoute(name string) *v1alpha1.SubscriberSpec

SubscriberSpecForRoute returns a SubscriberSpec for a given Knative Service.

func Subscription

func Subscription(name string, namespace string, channel *corev1.ObjectReference, subscriber *v1alpha1.SubscriberSpec, reply *v1alpha1.ReplyStrategy) *v1alpha1.Subscription

Subscription returns a Subscription

func WaitForRouteState

func WaitForRouteState(client servingtyped.RouteInterface, name string, inState func(r *servingV1alpha1.Route) (bool, error), desc string) error

WaitForRouteState polls the status of the Route called name from client every interval until inState returns `true` indicating it is done, returns an error or timeout. desc will be used to name the metric that is emitted to track how long it took for name to get into the state checked by inState.

Types

type Cleaner

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

Cleaner holds resources that will be cleaned after test

func NewCleaner

func NewCleaner(log *logging.BaseLogger, client dynamic.Interface) *Cleaner

NewCleaner creates a new Cleaner

func (*Cleaner) Add

func (c *Cleaner) Add(group string, version string, resource string, namespace string, name string) error

Add will register a resource to be cleaned by the Clean function This function is generic enough so as to be able to register any resources Each resource is identified by: * group (e.g. serving.knative.dev) * version (e.g. v1alpha1) * resource's plural (e.g. routes) * namespace (use "" if the resource is not tied to any namespace) * actual name of the resource (e.g. myroute)

func (*Cleaner) Clean

func (c *Cleaner) Clean(awaitDeletion bool) error

Clean will delete all registered resources

type Clients

type Clients struct {
	Kube     *test.KubeClient
	Serving  *serving.Clientset
	Eventing *eventing.Clientset
	Dynamic  dynamic.Interface
	Sources  *sources.Clientset
}

Clients holds instances of interfaces for making requests to Knative.

func NewClients

func NewClients(configPath string, clusterName string, namespace string) (*Clients, error)

NewClients instantiates and returns several clientsets required for making request to the cluster specified by the combination of clusterName and configPath. Clients can make requests within namespace.

type EventingEnvironmentFlags

type EventingEnvironmentFlags struct {
	DockerRepo string // Docker repo (defaults to $DOCKER_REPO_OVERRIDE)
	Tag        string // Tag for test images
}

EventingEnvironmentFlags holds the e2e flags needed only by the eventing repo

type ResourceDeleter

type ResourceDeleter struct {
	Resource dynamic.ResourceInterface
	Name     string
}

ResourceDeleter holds the cleaner and name of resource to be cleaned

Directories

Path Synopsis
test_images

Jump to

Keyboard shortcuts

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