...
1
16
17 package apps
18
19 import (
20 "context"
21
22 "github.com/onsi/ginkgo/v2"
23
24 appsv1 "k8s.io/api/apps/v1"
25 v1 "k8s.io/api/core/v1"
26 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27 "k8s.io/apimachinery/pkg/util/wait"
28 "k8s.io/kubernetes/test/e2e/framework"
29 e2edaemonset "k8s.io/kubernetes/test/e2e/framework/daemonset"
30 "k8s.io/kubernetes/test/e2e/upgrades"
31 )
32
33
34
35 type DaemonSetUpgradeTest struct {
36 daemonSet *appsv1.DaemonSet
37 }
38
39
40 func (DaemonSetUpgradeTest) Name() string { return "[sig-apps] daemonset-upgrade" }
41
42
43 func (t *DaemonSetUpgradeTest) Setup(ctx context.Context, f *framework.Framework) {
44 daemonSetName := "ds1"
45 labelSet := map[string]string{"ds-name": daemonSetName}
46 image := framework.ServeHostnameImage
47
48 ns := f.Namespace
49
50 t.daemonSet = e2edaemonset.NewDaemonSet(daemonSetName, image, labelSet, nil, nil, []v1.ContainerPort{{ContainerPort: 9376}}, "serve-hostname")
51 t.daemonSet.Spec.Template.Spec.Tolerations = []v1.Toleration{
52 {Operator: v1.TolerationOpExists},
53 }
54
55 ginkgo.By("Creating a DaemonSet")
56 var err error
57 if t.daemonSet, err = f.ClientSet.AppsV1().DaemonSets(ns.Name).Create(ctx, t.daemonSet, metav1.CreateOptions{}); err != nil {
58 framework.Failf("unable to create test DaemonSet %s: %v", t.daemonSet.Name, err)
59 }
60
61 ginkgo.By("Waiting for DaemonSet pods to become ready")
62 err = wait.PollWithContext(ctx, framework.Poll, framework.PodStartTimeout, func(ctx context.Context) (bool, error) {
63 return e2edaemonset.CheckRunningOnAllNodes(ctx, f, t.daemonSet)
64 })
65 framework.ExpectNoError(err)
66
67 ginkgo.By("Validating the DaemonSet after creation")
68 t.validateRunningDaemonSet(ctx, f)
69 }
70
71
72
73 func (t *DaemonSetUpgradeTest) Test(ctx context.Context, f *framework.Framework, done <-chan struct{}, upgrade upgrades.UpgradeType) {
74 ginkgo.By("Waiting for upgrade to complete before re-validating DaemonSet")
75 <-done
76
77 ginkgo.By("validating the DaemonSet is still running after upgrade")
78 t.validateRunningDaemonSet(ctx, f)
79 }
80
81
82 func (t *DaemonSetUpgradeTest) Teardown(ctx context.Context, f *framework.Framework) {
83
84 }
85
86 func (t *DaemonSetUpgradeTest) validateRunningDaemonSet(ctx context.Context, f *framework.Framework) {
87 ginkgo.By("confirming the DaemonSet pods are running on all expected nodes")
88 res, err := e2edaemonset.CheckRunningOnAllNodes(ctx, f, t.daemonSet)
89 framework.ExpectNoError(err)
90 if !res {
91 framework.Failf("expected DaemonSet pod to be running on all nodes, it was not")
92 }
93
94
95 ginkgo.By("confirming the DaemonSet resource is in a good state")
96 err = e2edaemonset.CheckDaemonStatus(ctx, f, t.daemonSet.Name)
97 framework.ExpectNoError(err)
98 }
99
View as plain text