Commit Graph

3476 Commits

Author SHA1 Message Date
Kubernetes Prow Robot
e7fd5b85ed Merge pull request #121068 from carlory/cleanup-e2e-framework-deprecated-funcs
clean up deprecated funcs in e2e framework
2023-10-17 21:28:57 +02:00
Kubernetes Prow Robot
675a64eaa6 Merge pull request #121129 from carlory/cleanup-e2e-framework-equal
remove deprecated framework.ExpectEqual
2023-10-14 23:50:37 +02:00
carlory
2c1836bc24 remove deprecated framework.ExpectEqual 2023-10-11 12:43:10 +08:00
Patrick Ohly
f2d34426f8 e2e: enhance SIGDescribe
framework.SIGDescribe is better because:
- Ginkgo uses the source code location of the test, not of the wrapper,
  when reporting progress.
- Additional annotations can be passed.

To make this a drop-in replacement, framework.SIGDescribe generates a function
that can be used instead of the former SIGDescribe functions.

windows.SIGDescribe contained some additional code to ensure that tests are
skipped when not running with a suitable node OS. This gets moved into a
separate wrapper generator, to allow using framework.SIGDescribe as intended.
To ensure that all callers were modified, the windows.sigDescribe isn't
exported anymore (wasn't necessary in the first place!).
2023-10-10 18:15:49 +02:00
Patrick Ohly
39b6916cbc e2e: add wrapper functions to annotate tests
These wrapper functions set labels in addition to injecting the annotation into
the test text. It then becomes possible to select tests in different ways:

    ginkgo -v --focus="should respect internalTrafficPolicy.*\[FeatureGate:ServiceInternalTrafficPolicy\]"

    ginkgo -v --label-filter="FeatureGate:ServiceInternalTrafficPolicy"

    ginkgo -v --label-filter="Beta"

When a test runs, ginkgo shows it as:

    [It] should respect internalTrafficPolicy=Local Pod to Pod [FeatureGate:ServiceInternalTrafficPolicy] [Beta] [FeatureGate:ServiceInternalTrafficPolicy, Beta]

The test name and the labels at the end are in different colors. Embedding the
annotations inside the text is redundant and only done because users of the e2e
suite might expect it. Also, our tooling that consumes test results currently
doesn't know about ginkgo labels.

Environments, features and node features as described by
https://github.com/kubernetes/enhancements/tree/master/keps/sig-testing/3041-node-conformance-and-features
are also supported.

The framework and thus (at the moment) test/e2e do not have any pre-defined
environments and features. Adding those and modifying tests will follow in
a separate commit.
2023-10-10 18:15:49 +02:00
Patrick Ohly
535ab74346 e2e framework: track and report internal bugs
If something goes wrong during the test registration phase, the only solution
so far was to panic. This is not user-friendly and only allows to report one
problem at a time.

If initialization can continue, then a better solution is to record a bug,
continue, and then report all bugs together.

This also works when just listing tests. The new verify-e2e-suites.sh uses that
to check all test suites (identified as "packages that call
framework.AfterReadingAllFlags", with some exceptions) as part of
pull-kubernetes-verify.

Example output for a fake

    framework.RecordBug(framework.NewBug("fake bug during SIGDescribe", 0))

in test/e2e/storage/volume_metrics.go:
```
$ hack/verify-e2e-suites.sh
go version go1.21.1 linux/amd64
ERROR: E2E test suite invocation failed for test/e2e.
   ERROR: E2E suite initialization was faulty, these errors must be fixed:
   ERROR: test/e2e/storage/volume_metrics.go:49: fake bug during SIGDescribe
E2E suite test/e2e_kubeadm passed.
E2E suite test/e2e_node passed.
```
2023-10-10 18:15:46 +02:00
Patrick Ohly
3afdcc03ea e2e framework: list specs and labels
-list-tests is a more concise alternative for `ginkgo --dry-run` with one line
per test. In contrast to `--dry-run`, it really lists all tests. `--dry-run`
without additional parameters uses the default skip expression from the E2E
context, which filters out flaky and feature-gated tests. The output includes
the source code location where each test is defined. It is sorted by test
name (not source code location) because that order is independent of
reorganizing the source code and ordering by location can be achieved with
"sort".

-list-labels has no corresponding feature in Ginkgo.

One possible usage is to figure out what values might make sense for
-focus/skip/label-filter.

Unit tests will follow in a future commit.
2023-10-10 17:15:59 +02:00
carlory
137ad9bf2b clean up deprecated funcs in e2e framework 2023-10-09 16:51:53 +08:00
carlory
bb02d0feba fix incorrect Consistently due to missing assignment when create a newAsyncAssertion 2023-10-08 13:23:46 +08:00
Kubernetes Prow Robot
9af7096c89 Merge pull request #120968 from borg-land/remove-kubeup-tests-1
Remove an e2e test specific to kubeup clusters - Part One
2023-10-06 19:20:11 +02:00
upodroid
243ba5fb6b remove an e2e test specific to kubeup clusters 2023-10-02 16:21:41 +01:00
Kubernetes Prow Robot
d924775d78 Merge pull request #120750 from pohly/test-output-init-fix
e2e framework: adapt unit test to Go 1.22
2023-09-27 06:26:10 -07:00
Kubernetes Prow Robot
144baff189 Merge pull request #120598 from neolit123/1.29-kubeadm-ownders-cleanup
/cmd/kubeadm,/test/e2e*: update OWNERS for fabriziopandini & RA489
2023-09-19 21:39:59 -07:00
Patrick Ohly
83c37acb21 e2e framework: adapt unit test to Go 1.22
Go 1.22 changed the name of init functions from "glob..func" to
"init.func". That difference is acceptable and has to be ignored when comparing
output.
2023-09-19 12:18:34 +02:00
Kubernetes Prow Robot
a68093a3ff Merge pull request #120506 from alexzielenski/import-restrictions
Update e2e import restrictions
2023-09-13 21:56:22 -07:00
Lubomir I. Ivanov
3d91ffc6f9 /cmd/kubeadm,/test/e2e*: update OWNERS for fabriziopandini & RA489
- move fabriziopandini to emeritus_approvers for /test/e2e*
and /cmd/kubeadm. fabriziopandini remains in /OWNERS_ALIASES
under sig-cluster-lifecycle-leads.
- remove RA489 as reviewer for /test/e2e* and /cmd/kubeadm
2023-09-12 12:35:40 +03:00
Patrick Ohly
fc3ee07b51 e2e pods: fix WaitForPodsResponding retry
The status error was embedded inside the new error constructed by
WaitForPodsResponding's get function, but not wrapped. Therefore
`apierrors.IsServiceUnavailable(err)` didn't find it and returned false -> no
retries.

Wrapping fixes this and Gomega formatting of the error remains useful:

	err := &errors.StatusError{}
	err.ErrStatus.Code = 503
	err.ErrStatus.Message = "temporary failure"

	err2 := fmt.Errorf("Controller %s: failed to Get from replica pod %s:\n%w\nPod status:\n%s",
		"foo", "bar",
		err, "some status")
	fmt.Println(format.Object(err2, 1))
        fmt.Println(errors.IsServiceUnavailable(err2))

=>

    <*fmt.wrapError | 0xc000139340>:
    Controller foo: failed to Get from replica pod bar:
    temporary failure
    Pod status:
    some status
    {
        msg: "Controller foo: failed to Get from replica pod bar:\ntemporary failure\nPod status:\nsome status",
        err: <*errors.StatusError | 0xc0001a01e0>{
            ErrStatus: {
                TypeMeta: {Kind: "", APIVersion: ""},
                ListMeta: {
                    SelfLink: "",
                    ResourceVersion: "",
                    Continue: "",
                    RemainingItemCount: nil,
                },
                Status: "",
                Message: "temporary failure",
                Reason: "",
                Details: nil,
                Code: 503,
            },
        },
    }

    true
2023-09-11 11:54:15 +02:00
Kubernetes Prow Robot
cc0a24d2e8 Merge pull request #120406 from wlq1212/cheanup/framework/timeout
e2e_framework:stop using deprecated wait.ErrwaitTimeout
2023-09-10 21:10:10 -07:00
Alexander Zielenski
7a13b11af0 update e2e import restrictions 2023-09-07 12:20:29 -07:00
carlory
f33265cf5d HandleRetry has already called in the GetObject 2023-09-07 15:48:18 +08:00
wlq1212
ef235c4eac e2e_framework:stop using deprecated wait.ErrwaitTimeout 2023-09-05 14:19:42 +08:00
wlq1212
a56745c706 e2e_cloud:stop using deprecated framework.ExpectError 2023-09-01 17:53:37 +08:00
Patrick Ohly
2472291790 api: introduce separate VolumeResourceRequirements struct
PVC and containers shared the same ResourceRequirements struct to define their
API. When resource claims were added, that struct got extended, which
accidentally also changed the PVC API. To avoid such a mistake from happening
again, PVC now uses its own VolumeResourceRequirements struct.

The `Claims` field gets removed because risk of breaking someone is low:
theoretically, YAML files which have a claims field for volumes now
get rejected when validating against the OpenAPI. Such files
have never made sense and should be fixed.

Code that uses the struct definitions needs to be updated.
2023-08-21 15:31:28 +02:00
Richa Banker
4712025ea8 Graduate kubelet resource metrics to GA 2023-08-17 09:22:48 -07:00
Kubernetes Prow Robot
18290bfdc8 Merge pull request #119966 from aojea/fixfix
e2e framework util subtle bug checking endpoints
2023-08-16 09:33:08 -07:00
git-jxj
a5b3a4b738 cleanup: Update deprecated FromInt to FromInt32 (#119858)
* redo commit

* apply suggestions from liggitt

* update Parse function based on suggestions
2023-08-16 09:33:01 -07:00
Antonio Ojea
8314122382 e2e framework util subtle bug checking endpoints
Change-Id: Ied14efcb75a45e3bbd5f76d4ee4c89703161df54
2023-08-16 08:18:11 +00:00
Kubernetes Prow Robot
b57b2dcfcf Merge pull request #119928 from aojea/fixe2e
e2e WaitForServiceEndpointsNum take into account the address family
2023-08-16 00:24:27 -07:00
Kubernetes Prow Robot
67c33faddd Merge pull request #117631 from skitt/intstr-fromint32-testing
Test: use new intstr functions
2023-08-15 15:16:27 -07:00
Antonio Ojea
a0f07f2b4d e2e WaitForServiceEndpointsNum take into account the address family
Since EndpointSlices can carry dual stack families, but Endpoints can
only have one single family, the function must take this into account
and only compare the addresses of the same family, otherwise it will
always fail for Services with dual stack endoints, because the endpoint
slices will have always twice addresses than the Endpoints.

Change-Id: Id08cb22f8a2adc103a4f5a4fe3eec25f448cd21b
2023-08-14 17:02:50 +00:00
Antonio Ojea
2ceca1c78d e2e WaitForServiceEndpointsNum should watch EndpointSlices
EndpointSlices is the evolution of the Endpoint object and most of the
components are using it for implementing Services, this menas that
despite the Endpoint object is up to date, the EndpointSlices may
lag behind, so test must ensure that both objects are in sync to
avoid race conditions.

Change-Id: I5d9bc7774c68f321537379d1f20b2a1fe0b39e6e
2023-08-07 18:34:06 +00:00
Rafael Fonseca
9f5b6db8be test: azure: check error for cloud detection.
If something goes wrong during the Azure cloud detection, trying to cast
the returned value will result in the following panic and give no clue
as to what the error was.

```
  panic: interface conversion: cloudprovider.Interface is nil, not *azure.Cloud

goroutine 1 [running]:
k8s.io/kubernetes/test/e2e/framework/providers/azure.newProvider()
	test/e2e/framework/providers/azure/azure.go:50 +0x2b5
k8s.io/kubernetes/test/e2e/framework.SetupProviderConfig({0xc0007966b8, 0x5})
	test/e2e/framework/provider.go:82 +0x1a6
```
2023-07-13 09:04:24 +02:00
Kubernetes Prow Robot
d48fc2ad2d Merge pull request #119035 from saschagrunert/critical-pod
Fix `should be able to create and delete a critical pod` test
2023-07-06 00:51:03 -07:00
Patrick Ohly
c903c29c3b e2e: support admissionapi.LevelRestricted in test/e2e/framwork/pod
CreatePod and MakePod only accepted an `isPrivileged` boolean, which made it
impossible to write tests using those helpers which work in a default
framework.Framework, because the default there is LevelRestricted.

The simple boolean gets replaced with admissionapi.Level. Passing
LevelRestricted does the same as calling e2epod.MixinRestrictedPodSecurity.

Instead of explicitly passing a constant to these modified helpers, most tests
get updated to pass f.NamespacePodSecurityLevel. This has the advantage
that if that level gets lowered in the future, tests only need to be updated in
one place.

In some cases, helpers taking client+namespace+timeouts parameters get replaced
with passing the Framework instance to get access to
f.NamespacePodSecurityEnforceLevel. These helpers don't need separate
parameters because in practice all they ever used where the values from the
Framework instance.
2023-07-03 16:26:28 +02:00
Sascha Grunert
bcbc12cd79 Fix should be able to create and delete a critical pod test
The namespace the crictical pod was referring to was wrong, because it
was using the generated one instead of `kube-system`. This and the
resulting test condition is now fixed.

The test seems to run only in `ci-crio-cgroupv1-node-e2e-flaky` for now.

Closes https://github.com/kubernetes/kubernetes/issues/109296

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2023-07-03 11:15:59 +02:00
Kubernetes Prow Robot
2190775b69 Merge pull request #118280 from stlaz/e2e_psa_labels
Set all PSa labels in tests
2023-06-28 11:14:43 -07:00
Kubernetes Prow Robot
9d50c0a025 Merge pull request #118889 from swetharepakula/extend-timeout
Extend Large Create Timeout to 60 min
2023-06-26 20:04:42 -07:00
Swetha Repakula
08198fe22b Extend Large Create Timeout to 60 min
* Load balancers are taking greater than 45 to provision
 * https://github.com/kubernetes/kubernetes/issues/118295
2023-06-26 15:32:34 -07:00
Stanislav Laznicka
e5cbc51d29 e2e framework: allow setting all PSa labels at once 2023-06-21 13:02:01 +02:00
upodroid
a29be0cfb0 update container runtime flags to use containerd instead of docker 2023-06-14 19:18:39 +01:00
SataQiu
4dbece1e20 e2e-framework: remove node-role.kubernetes.io/master taint from non-blocking-taints 2023-06-06 22:19:55 +08:00
guoguangwu
923db7bd8e chore: use strings.Contains instead 2023-06-06 14:29:20 +08:00
TommyStarK
d9e2583af1 test/e2e: replace deprecated ioutil
Signed-off-by: TommyStarK <thomasmilox@gmail.com>
2023-05-29 19:36:29 +02:00
SataQiu
4d2ff08bfa e2e-framework: code cleanup for mismatched comments 2023-05-26 12:36:19 +08:00
Antonio Ojea
e31b2080f5 e2e framework retry on Service unavailable errors
the e2e framwork use active loops to wait for certain async operations,
these loops need to retry on some operations and fail in others.

For the functions that depend on some operations to happen, the
apiserver may return 503 errors until that specific service is
available, so we should retry on those too.

Change-Id: Ib3d194184f6385b9d3d151c7055f27c97c21c3ff
2023-05-25 11:22:45 +00:00
Humble Chirammal
36f0caf7ec remove GlusterFS references from test/e2e/* comments/descriptions
Signed-off-by: Humble Chirammal <humble.devassy@gmail.com>
2023-05-17 17:40:28 +05:30
Humble Chirammal
e3eb4bd0c5 updating dependencies.yaml for etcd v3.5.9 version
Signed-off-by: Humble Chirammal <humble.devassy@gmail.com>
2023-05-16 20:27:17 +05:30
Kubernetes Prow Robot
c72bedb6cb Merge pull request #117670 from carlory/fix-issue-117583
e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod
2023-05-12 09:39:01 -07:00
carlory
20602c819b e2e framework: remove dependency on k8s.io/kubernetes/pkg/api/v1/pod 2023-05-12 08:39:37 +08:00
Maciej Szulik
8c82855467 When expecting pods count only active ones 2023-05-11 13:04:42 +02:00