Commit Graph

730 Commits

Author SHA1 Message Date
Patrick Ohly
4e6cf3ca0c ktesting: shorter error logging in WithError
Gomega formats errors by first showing Error() (already has all information
after WithError) and then again by dumping the error struct, which is redundant
in this case. We can avoid the latter by providing a GomegaString
implementation which returns nothing.
2026-01-07 14:11:33 +01:00
Patrick Ohly
01765f4a41 ktesting: more flexible Eventually/Consistently
Being able to call arbitrary functions is useful, even if it means giving up
some compile-time checking. Because we now use reflection,
Eventually/Consistently can be methods.
2026-01-07 14:11:33 +01:00
Patrick Ohly
047682908d ktesting: replace Begin/End with TContext.Step
Manually pairing Being with End is too error prone to be useful. It had the
advantage of keeping variables created between them visible to the following
code, but that doesn't justify using those calls.

By using a callback we can achieve a few things:

- Code using it automatically shadows the parent tCtx, thus enforcing
  that within a code block the tCtx with step is used consistently.
- The code block is clearly delineated with curly braces.
- When the code block ends, the unmodified parent tCtx is automatically
  in scope again.

Downsides:

- Extra boilerplate for the anonymous function.
  Python's `with tCtx.Step(...) as tCtx: ` would be nicer.
  As an approximation of that `for tCtx := range tCtx.Step(...)` was
  tried with `Step` returning an iterator, but that wasn't very idiomatic.
- Variables created inside the code block are not visible outside of it.
2026-01-07 14:11:33 +01:00
Patrick Ohly
dab76ef8de ktesting: add namespace support
Many helper packages need to know the test namespace in addition to the client.
Supporting passing of that information through the TContext avoids adding
another parameter to such helper packages.

This mirrors similar functionality in framework.Framework which also provides
a namespace to the test and packages taking such a parameter.
2026-01-05 13:45:03 +01:00
Patrick Ohly
57ae8e991a ktesting: safer RESTConfig()
Instead of granting callers access to the instance stored in the context,
let's return a copy. Otherwise a caller might accidentally modify what is
stored in the context when they forget to make a copy themselves before
modifying fields.
2026-01-05 13:45:03 +01:00
Patrick Ohly
551cf6f171 ktesting: reimplement without interface
The original implementation was inspired by how context.Context is handled via
wrapping a parent context. That approach had several issues:

- It is useful to let users call methods (e.g. tCtx.ExpectNoError)
  instead of ktesting functions with a tCtx parameters, but that only
  worked if all implementations of the interface implemented that
  set of methods. This made extending those methods cumbersome (see
  the commit which added Require+Assert) and could potentially break
  implementations of the interface elsewhere, defeating part of the
  motivation for having the interface in the first place.

- It was hard to see how the different TContext wrappers cooperated
  with each other.

- Layering injection of "ERROR" and "FATAL ERROR" on top of prefixing
  with the klog header caused post-processing of a failed unit test to
  remove that line because it looked like log output. Other log output
  lines where kept because they were not indented.

- In Go <=1.25, the `go vet sprintf` check only works for functions and
  methods if they get called directly and themselves directly pass their
  parameters on to fmt.Sprint. The check does not work when calling
  methods through an interface. Support for that is coming in Go 1.26,
  but will depend on bumping the Go version also in go.mod and thus
  may not be immediately possible in Kubernetes.

- Interface documentation in
  https://pkg.go.dev/k8s.io/kubernetes@v1.34.2/test/utils/ktesting#TContext
  is a monolithic text block. Documentation for methods is more readable and allows
  referencing those methods with [] (e.g. [TC.Errorf] works, [TContext.Errorf]
  didn't).

The revised implementation is a single struct with (almost) no exported
fields. The two exceptions (embedded context.Context and TB) are useful because
it avoids having to write wrappers for several functions resp. necessary
because Helper cannot be wrapped. Like a logr.LogSink, With* methods can make a
shallow copy and then change some fields in the cloned instance.

The former `ktesting.TContext` interface is now a type alias for
`*ktesting.TC`. This ensures that existing code using ktesting doesn't need to
be updated and because that code is a bit more compact (`tCtx
ktesting.TContext` instead of `tCtx *ktesting.TContext` when not using such an
alias). Hiding that it is a pointer might discourage accessing the exported
fields because it looks like an interface.

Output gets fixed and improved such that:
- "FATAL ERROR" and "ERROR" are at the start of the line, followed by the klog header.
- The failure message follows in the next line.
- Continuation lines are always indented.

The set of methods exposed via TB is now a bit more complete (Attr, Chdir).

All former stand-alone With* functions are now also available as methods and
should be used instead of the functions. Those will be removed.

Linting of log calls now works and found some issues.
2026-01-05 13:45:03 +01:00
Patrick Ohly
8a10a1a4a4 ktesting: add tContext.Require and tContext.Assert
Assert is useful because sometimes one wants to check several different things
in the same test, without stopping after the first failed assertion.

Require gets added for symmetry and to mirror testify's require and
assert. Require is identical to Expect (gomega naming).
2026-01-05 13:45:03 +01:00
Patrick Ohly
095475485f ktesting: rewrite unit testing with mock TB
We need to see the actual effect that ktesting will have when used as wrapper
around testing.T. Producing an error hid that adding the klog header makes some
output sub-optimal:

     <klog header>: FATAL ERROR: ...

The problem with having the klog header at the beginning of the line is that
the Kubernetes `make test` post-processing treats this as log output instead
of the failure message of the test. Will be fixed separately.
2026-01-05 13:45:03 +01:00
Kubernetes Prow Robot
9bd81471eb Merge pull request #135805 from humblec/etcd-3.6.7
etcd: Update etcd to v3.6.7
2025-12-22 16:28:39 -08:00
Patrick Ohly
db841afdbb dependencies: ginkgo v2.27.3 + gomega v1.38.3
This fixes some issues found in Kubernetes (data race in ginkgo CLI, gomega
formatting) and helps with diagnosing OOM killing in CI jobs (exit status of
processes).

The modified gomega formatting shows up in some of the output tests for the E2E
framework. They get updated accordingly.
2025-12-19 10:37:54 +01:00
Humble Devassy Chirammal
8dc8edf49b etcd: Update etcd to v3.6.7
ETCD 3.6.7 has some critical bug fixes
https://github.com/etcd-io/etcd/blob/main/CHANGELOG/CHANGELOG-3.6.md

Signed-off-by: Humble Devassy Chirammal <humble.devassy@gmail.com>
2025-12-18 19:05:14 +05:30
Patrick Ohly
ad79e479c2 build: remove deprecated '// +build' tag
This has been replaced by `//build:...` for a long time now.

Removal of the old build tag was automated with:

    for i in $(git grep -l '^// +build' | grep -v -e '^vendor/'); do if ! grep -q '^// Code generated' "$i"; then sed -i -e '/^\/\/ +build/d' "$i"; fi; done
2025-12-18 12:16:21 +01:00
bzsuni
2c811fdd3a etcd: Update etcd to v3.6.6
Signed-off-by: bzsuni <bingzhe.sun@daocloud.io>
2025-12-08 05:37:15 +00:00
Carlos Panato
eae2a1bd5f Bump images and versions to go 1.25.5 and distroless iptables
Signed-off-by: Carlos Panato <ctadeu@gmail.com>
2025-12-05 10:40:45 +01:00
Carlos Panato
3661554f87 Bump images and versions to go 1.25.4 and distroless iptables
Signed-off-by: Carlos Panato <ctadeu@gmail.com>
2025-11-28 10:21:55 +01:00
tinatingyu
3f8444210c Add e2e tests, metrics and events for podcertificaterequests v1beta1 2025-11-05 18:12:39 +00:00
tinatingyu
59e075e8d3 Promote PodCertificateRequests to v1beta1 2025-11-02 05:33:44 +00:00
Kubernetes Prow Robot
6056b0dfa4 Merge pull request #134973 from pohly/dra-test-utilities
DRA: test improvements
2025-10-30 09:26:05 -07:00
Kubernetes Prow Robot
34988e758d Merge pull request #134453 from stlaz/node-conformance-e2e
Fix node conformance tests with fake registry
2025-10-30 07:48:06 -07:00
Stanislav Láznička
ee777bef91 test/utils: remove GcAuthenticatedRegistry from RegistryList
Signed-off-by: Stanislav Láznička <slznika@microsoft.com>
2025-10-29 13:17:05 +01:00
Stanislav Láznička
fc81e22735 fix Node Conformance Container Runtime test with fake registry
Signed-off-by: Stanislav Láznička <slznika@microsoft.com>
2025-10-29 13:17:03 +01:00
Stanislav Láznička
a0e64c21f2 Use fake registry in Node's container runtime image pulling tests
Signed-off-by: Stanislav Láznička <slznika@microsoft.com>
2025-10-29 13:06:34 +01:00
Patrick Ohly
03e337cfb7 ktesting: support for synctest
A "sync test" runs the test inside a testing/synctest bubble. Time moves
forward in a deterministic fashion when all goroutines are blocked
waiting for time to progress. This simplifies testing concurrent behavior.

ktesting enables writing such tests with a new SyncTest method: it can start a
new sub-test (similar to Run) or turn an existing test (typically a top-level
Test<something>) into a sync test when no new name is given.

TContext.IsSyncTest can be used to check the mode of the current test, which
may be useful in common helper code.

TContext.Wait directly maps to synctest.Wait.

This new functionality is limited to tests which use an underlying testing.T
instance.
2025-10-28 21:05:56 +01:00
Stanislav Láznička
a3f242676c Revert "remove failing test that depends on expired credential, remove credential, add TODOs"
This reverts commit 8ace0fb89f.
2025-10-28 14:23:54 +01:00
Jan Safranek
04fb0931ae test: remove usage of storage v1beta1 APIs
All beta objects were promoted to GA
2025-10-27 10:12:25 +01:00
Carlos Panato
15154374bc Bump images, dependencies and versions to go 1.25.3 and distroless iptables
Signed-off-by: Carlos Panato <ctadeu@gmail.com>
2025-10-15 09:41:57 +02:00
Kubernetes Prow Robot
4db43d1321 Merge pull request #134251 from joshjms/update-etcd-3.6.5
etcd: Update etcd to v3.6.5
2025-10-03 07:00:58 -07:00
joshjms
070d4c1846 bump etcd to v3.6.5
Signed-off-by: joshjms <joshjms1607@gmail.com>
2025-10-03 18:19:15 +08:00
Kubernetes Prow Robot
0dd78f632e Merge pull request #133747 from pohly/dra-e2e-crud-conformance
DRA: CRUD conformance tests
2025-10-02 20:22:56 -07:00
Antonio Ojea
0b0a5974f8 integration test: webhook proxy behavior
adds a new integration test to verify that the API server's egress
to admission webhooks correctly respects the standard `HTTPS_PROXY`
and `NO_PROXY` environment variables.

It adds a new test util to implement a Fake DNS server that allows
to override DNS resolution in tests, specially useful for integration
test that can only bind to localhost the servers, that is ignored
by certain functionalities.
2025-10-02 22:31:08 +00:00
Patrick Ohly
2ac9ff1c1f test: format unstructured as YAML
It's a nested map which looks a lot nicer as YAML, in particular
when it represents a Kubernetes object.

Unit+integration tests using ktesting+gomega and E2E tests benefit from this
change.
2025-10-02 16:07:48 +02:00
arkadeepsen
25893cb579 Promote regression-issue-74839 to 1.4
Signed-off-by: arkadeepsen <arsen@redhat.com>
2025-09-22 17:05:43 +05:30
Davanum Srinivas
3fc0498d6e Bump distroless-iptables to v0.7.8 2025-09-16 17:16:06 -04:00
ylink-lfs
1fd7f308fc ci: remove httpd usage while using agnhost instead 2025-09-01 20:11:18 +08:00
Stephen Kitt
81cec6df1d Bump to mockery v3
mockery has introduced breaking changes and switched to a v3 branch,
this migrates to that, mostly using the built-in migration tool. Mocks
are now generated in single files per package, except in packages
containing mocks for multiple interface packages (in
pkg/kubelet/container/testing).

Signed-off-by: Stephen Kitt <skitt@redhat.com>
2025-08-29 13:43:54 +02:00
Kubernetes Prow Robot
8e8046d7fe Merge pull request #133237 from ylink-lfs/chore/intptr_deref_replacement
chore: use ptr.Deref to replace int deref utils
2025-08-27 16:06:04 -07:00
Carlos Panato
020b7052ca Bump dependencies, images and versions used to Go 1.24.6 and distroless iptables
Signed-off-by: Carlos Panato <ctadeu@gmail.com>
2025-08-14 09:46:06 +02:00
Luiz Oliveira
7fbf63a23f HPA support for pod-level resource specifications (#132430)
* HPA support for pod-level resource specifications

* Add e2e tests for HPA support for pod-level resource specifications
2025-07-29 09:02:26 -07:00
Kubernetes Prow Robot
dd4e4f1dd1 Merge pull request #133262 from BenTheElder/no-authenticated-image-pulling
remove broken test that depends on expired credential, remove hardcoded credential, add TODOs
2025-07-28 17:28:28 -07:00
Benjamin Elder
8ace0fb89f remove failing test that depends on expired credential, remove credential, add TODOs
see: https://github.com/kubernetes/kubernetes/issues/130271
2025-07-28 15:43:43 -07:00
Ivan Valdes
e8dc272c53 Update etcd to 3.6.4 2025-07-27 21:45:02 -07:00
ylink-lfs
065899e95d chore: use ptr.Deref to replace int deref utils 2025-07-27 16:33:22 +08:00
Kubernetes Prow Robot
b3d00a026d Merge pull request #132756 from ylink-lfs/ci/redis_removal
ci: redis removal for e2e test dependency simplicity
2025-07-24 09:38:42 -07:00
Taahir Ahmed
4624cb9bb9 Pod Certificates: Basic implementation
* Define feature gate
* Define and serve PodCertificateRequest
* Implement Kubelet projected volume source
* kube-controller-manager GCs PodCertificateRequests
* Add agnhost subcommand that implements a toy signer for testing

Change-Id: Id7ed030d449806410a4fa28aab0f2ce4e01d3b10
2025-07-21 21:49:57 +00:00
Kubernetes Prow Robot
c44bf18b9b Merge pull request #130713 from ArkaSaha30/bump-pause-version
dependency: update pause version to registry.k8s.io/pause:3.10.1
2025-07-20 20:16:26 -07:00
Patrick Ohly
c8ca9249ac DRA integration: add upgrade/downgrade testing with local-up-cluster.sh
The test brings up the cluster and uses that power to run through
an upgrade/downgrade scenario. Version skew testing (running tests while the cluster
is partially up- or downgraded) could be added.

The new helper code for managing the cluster is written so that it could be
used both in an integration test and an E2E
test. https://github.com/kubernetes/kubernetes/pull/122481 could make that a
bit easier in an E2E test, but is not absolutely required.

In contrast to running on a normal cluster, pods need no privileges.
Instead, the caller has to make sure that the test itself can write
into system directories used by the cluster.
2025-07-15 12:54:40 +02:00
Patrick Ohly
e5f57d2cfa ktesting: add WithoutCancel
This closes a gap compared to the context package. It's useful when combined
with Ginkgo to keep something running beyond the end of the Ginkgo BeforeEach
or It node.
2025-07-15 12:52:27 +02:00
Patrick Ohly
e01603b2e3 ktesting: document side effect of SetDefaultVerbosity during init 2025-07-15 12:52:27 +02:00
Patrick Ohly
0b1bed1a1e ktesting: WithCancel does not cancel on test completion anymore
That WithCancel added a deferred cleanup which cancels on test termination was
unexpected. This automatic cancellation makes sense only for the initial root
TContext.
2025-07-15 12:52:27 +02:00
Patrick Ohly
906505281f ktesting: add step Begin/End
This allows declaring a code region as one step without having to use
an anonymous callback function, which has the advantage that variables
set during the step are visible afterwards.

In Python, this would be done as

    with ktesting.Step(tctx) as tcxt:
        // some code code inside step
    // code not in the same step

But Go has no such construct.

In contrast to WithStep, the start and end of the step are logged, including
timing information.
2025-07-15 12:52:27 +02:00