Skip to content

A Go framework for end-to-end testing of components running in Kubernetes clusters.

License

Notifications You must be signed in to change notification settings

codegold79/e2e-framework

E2E Framework

godoc

A Go framework for end-to-end testing of components running in Kubernetes clusters.

The primary goal of this project is to provide a go test(able) framework that uses the native Go testing API to define end-to-end tests suites that can be used to test Kubernetes components. Some additional goals include:

  • Provide a sensible programmatic API to compose tests
  • Leverage Go's testing API to compose test suites
  • Expose packages that are easy to programmatically consume
  • Collection of helper functions that abstracts Client-Go functionalities
  • Rely on built-in Go test features to easily select/filter tests to run during execution
  • And more

For more detail, see the design document.

Getting started

The Go package is designed to be integrated directly in your test. Simply update your project to pull the desired Go modules:

go get sigs.k8s.io/e2e-framework/pkg/env go get sigs.k8s.io/e2e-framework/klient 

Using the framework

The framework uses the built-in Go testing framework directly to define and run tests.

Setup TestMain

Use function TestMain to define package-wide testing steps and configure behavior. The following examples uses pre-defined steps to create a KinD cluster before running any test in the package:

var ( testenv env.Environment ) funcTestMain(m*testing.M){testenv=env.New() kindClusterName:=envconf.RandomName("my-cluster", 16) namespace:=envconf.RandomName("myns", 16) // Use pre-defined environment funcs to create a kind cluster prior to test runtestenv.Setup( envfuncs.CreateKindCluster(kindClusterName), ) // Use pre-defined environment funcs to teardown kind cluster after teststestenv.Finish( envfuncs.DeleteNamespace(namespace), ) // launch package testsos.Exit(testenv.Run(m)) }

Define a test function

Use a Go test function to define features to be tested as shown below:

funcTestKubernetes(t*testing.T){f1:=features.New("count pod"). WithLabel("type", "pod-count"). Assess("pods from kube-system", func(ctx context.Context, t*testing.T, cfg*envconf.Config) context.Context{varpods corev1.PodListerr:=cfg.Client().Resources("kube-system").List(context.TODO(), &pods) iferr!=nil{t.Fatal(err) } iflen(pods.Items) ==0{t.Fatal("no pods in namespace kube-system") } returnctx }).Feature() f2:=features.New("count namespaces"). WithLabel("type", "ns-count"). Assess("namespace exist", func(ctx context.Context, t*testing.T, cfg*envconf.Config) context.Context{varnspaces corev1.NamespaceListerr:=cfg.Client().Resources().List(context.TODO(), &nspaces) iferr!=nil{t.Fatal(err) } iflen(nspaces.Items) ==1{t.Fatal("no other namespace") } returnctx }).Feature() // test featuretestenv.Test(t, f1, f2) }

Running the test

Use the Go testing tooling to run the tests in the package as shown below. The following would run all tests except those with label type=ns-count:

go test ./package -args --skip-labels="type=ns-count" 

Examples

See the ./examples directory for additional examples showing how to use the framework.

Community, discussion, contribution, and support

Learn how to engage with the Kubernetes community on the community page.

You can reach the maintainers of this project at:

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.

About

A Go framework for end-to-end testing of components running in Kubernetes clusters.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go95.8%
  • Shell3.0%
  • Makefile1.2%