kubernetes/test/e2e/framework
Kubernetes Prow Robot a54d84d17f
Merge pull request #123138 from carlory/remove-ExpectNotEqual
remove deprecated framework.ExpectNotEqual
2024-02-23 02:57:09 -08:00
..
auth e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
autoscaling E2E - Sig-autoscaling: Refactor the Autoscaling utils to use gomega.Consistenly according to e2e test framework guidance 2023-12-01 18:02:15 +08:00
config e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
daemonset e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod 2023-05-12 08:39:37 +08:00
debug e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod 2023-05-12 08:39:37 +08:00
deployment e2e: support admissionapi.LevelRestricted in test/e2e/framwork/pod 2023-07-03 16:26:28 +02:00
endpoints e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
endpointslice e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
events use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
gpu e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
ingress e2e: remove dead code 2024-01-17 12:57:35 +01:00
internal e2e framework: unify logging, support skipping helpers 2024-01-20 18:23:31 +01:00
job Add a new neverTerminate job behavior just for upgrade 2024-01-08 13:51:08 +01:00
kubectl e2e-framework: code cleanup for mismatched comments 2023-05-26 12:36:19 +08:00
kubelet e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod 2023-05-12 08:39:37 +08:00
kubesystem e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
manifest e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
metrics use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
network use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
node use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
perf e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod 2023-05-12 08:39:37 +08:00
pod Merge pull request #122456 from AxeZhan/beta3960 2024-02-19 07:44:50 -08:00
providers e2e: remove dead code for providers 2024-02-22 12:42:17 +01:00
pv use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
rc Replace a function closure 2023-02-27 09:13:36 -08:00
replicaset use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
resource use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
security remove deprecated framework.ExpectEqual 2023-10-11 12:43:10 +08:00
service use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
skipper e2e: remove dead code 2024-01-17 12:57:35 +01:00
ssh framework: add SSH support for Azure 2023-11-02 15:01:31 -07:00
statefulset use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
testfiles e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
timer remove deprecated framework.ExpectEqual 2023-10-11 12:43:10 +08:00
volume use PollUntilContextTimeout to replace PollImmediateWithContext in test 2023-10-19 22:50:21 +08:00
websocket e2e framework: control k/k/pkg imports 2023-04-17 00:17:16 +03:00
.import-restrictions e2e: add wrapper functions to annotate tests 2023-10-10 18:15:49 +02:00
bugs.go e2e framework: track and report internal bugs 2023-10-10 18:15:46 +02:00
expect_test.go e2e framework: include additional stack backtrace in failures 2023-02-06 15:39:12 +01:00
expect.go remove deprecated framework.ExpectNotEqual 2024-02-06 02:53:28 +08:00
flake_reporting_util.go fix pass []any as any in variadic function 2022-07-09 18:53:54 +08:00
framework.go Correct typo from 'gingko' to 'ginkgo' 2023-12-20 10:31:53 +09:00
get.go e2e framework retry on Service unavailable errors 2023-05-25 11:22:45 +00:00
ginkgologger.go e2e framework: unify logging, support skipping helpers 2024-01-20 18:23:31 +01:00
ginkgowrapper_test.go e2e storage: use framework to tag tests 2023-10-23 17:32:06 +02:00
ginkgowrapper.go e2e: enforce usage of WithFlaky instead of [Flaky] 2024-01-19 12:17:37 +01:00
log_test.go e2e framework: unify logging, support skipping helpers 2024-01-20 18:23:31 +01:00
log.go e2e framework: unify logging, support skipping helpers 2024-01-20 18:23:31 +01:00
namespacedname.go e2e framework: add NamespacedName 2023-01-16 09:05:37 +01:00
nodes_util.go e2e framework: move NodeKiller into framework/node 2022-10-06 08:16:47 +02:00
OWNERS /cmd/kubeadm,/test/e2e*: update OWNERS for fabriziopandini & RA489 2023-09-12 12:35:40 +03:00
ports.go refactor(e2e): grab metrics from controller-manager via nginx 2021-05-03 00:12:06 +08:00
provider_less.go Add fake GCE provider to make CI jobs happy 2024-01-07 08:16:06 -05:00
provider.go e2e: use Ginkgo context 2022-12-16 20:14:04 +01:00
README.md Fix typos in markdown 2023-10-17 10:55:40 -04:00
size.go
test_context.go e2e framework: unify logging, support skipping helpers 2024-01-20 18:23:31 +01:00
timeouts.go DRA: e2e: test non-graceful node shutdown 2023-10-19 22:09:11 +03:00
util.go framework: add SSH support for Azure 2023-11-02 15:01:31 -07:00

Overview

The Kubernetes E2E framework simplifies writing Ginkgo tests suites. It's main usage is for these tests suites in the Kubernetes repository itself:

  • test/e2e: runs as client for a Kubernetes cluster. The e2e.test binary is used for conformance testing.
  • test/e2e_node: runs on the same node as a kubelet instance. Used for testing kubelet.
  • test/e2e_kubeadm: test suite for kubeadm.

Usage of the framework outside of Kubernetes is possible, but not encouraged. Downstream users have to be prepared to deal with API changes.

Code Organization

The core framework is the k8s.io/kubernetes/test/e2e/framework package. It contains functionality that all E2E suites are expected to need:

  • connecting to the apiserver
  • managing per-test namespaces
  • logging (Logf)
  • failure handling (Fail, Failf)
  • writing concise JUnit test results

It also contains a TestContext with settings that can be controlled via command line flags. For historic reasons, this also contains settings for individual tests or packages that are not part of the core framework.

Optional functionality is placed in sub packages like test/e2e/framework/pod. The core framework does not depend on those. Sub packages may depend on the core framework.

The advantages of splitting the code like this are:

  • leaner go doc packages by grouping related functions together
  • not forcing all E2E suites to import all functionality
  • avoiding import cycles

Execution Flow

When a test suite gets invoked, the top-level Describe calls register the callbacks that define individual tests, but does not invoke them yet. After that init phase, command line flags are parsed and the Describe callbacks are invoked. Those then define the actual tests for the test suite. Command line flags can be used to influence the test definitions.

Now Context/BeforeEach/AfterEach/It define code that will be called later when executing a specific test. During this setup phase, f := framework.NewDefaultFramework("some tests") creates a Framework instance for one or more tests. NewDefaultFramework initializes that instance anew for each test with a BeforeEach callback. Starting with Kubernetes 1.26, that instance gets cleaned up after all other code for a test has been invoked, so the following code is correct:

f := framework.NewDefaultFramework("some tests")

ginkgo.AfterEach(func() {
    # Do something with f.ClientSet.
}

ginkgo.It("test something", func(ctx context.Context) {
    # The actual test.
})

Optional functionality can be injected into each test by adding a callback to NewFrameworkExtensions in an init function. NewDefaultFramework will invoke those callbacks as if the corresponding code had been added to each test like this:

f := framework.NewDefaultFramework("some tests")

optional.SomeCallback(f)

SomeCallback then can register additional BeforeEach or AfterEach callbacks that use the test's Framework instance.

When a test runs, callbacks defined for it with BeforeEach and AfterEach are called in first-in-first-out order. Since the migration to ginkgo v2 in Kubernetes 1.25, the AfterEach callback is called also when there has been a test failure. This can be used to run cleanup code for a test reliably. However, ginkgo.DeferCleanup is often a better alternative. Its callbacks are executed in first-in-last-out order.

test/e2e/framework/internal/unittests/cleanup/cleanup.go shows how these different callbacks can be used and in which order they are going to run.