Skip to content

Commit e567bef

Browse files
committed
Add uncordon e2e to broadcastjob.go
Signed-off-by: GautamBytes <[email protected]>
1 parent a225598 commit e567bef

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

test/e2e/apps/broadcastjob.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/onsi/gomega"
3232
v1 "k8s.io/api/core/v1"
3333
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
34+
"k8s.io/apimachinery/pkg/types"
3435
"k8s.io/apimachinery/pkg/util/intstr"
3536
"k8s.io/apimachinery/pkg/util/rand"
3637
clientset "k8s.io/client-go/kubernetes"
@@ -78,6 +79,7 @@ var _ = ginkgo.Describe("BroadcastJob", ginkgo.Label("BroadcastJob", "job", "wor
7879
}
7980
},
8081
}
82+
8183
ginkgo.Context("BroadcastJob dispatching", func() {
8284
ginkgo.It("succeeds for parallelism < number of node", func() {
8385
ginkgo.By("Create Fake Node " + randStr)
@@ -153,4 +155,85 @@ var _ = ginkgo.Describe("BroadcastJob", ginkgo.Label("BroadcastJob", "job", "wor
153155
}, 60*time.Second, time.Second).Should(gomega.Equal(int32(len(nodes))))
154156
})
155157
})
158+
159+
ginkgo.Context("BroadcastJob uncordon handling", func() {
160+
ginkgo.It("creates missing pod after node uncordon", func() {
161+
// Create fake node
162+
fakeNode, err := nodeTester.CreateFakeNode(randStr)
163+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
164+
165+
// Cordon the fake node
166+
ginkgo.By("Cordoning fake node " + fakeNode.Name)
167+
_, err = c.CoreV1().Nodes().Patch(context.TODO(), fakeNode.Name,
168+
types.StrategicMergePatchType,
169+
[]byte(`{"spec":{"unschedulable":true}}`),
170+
metav1.PatchOptions{})
171+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
172+
173+
// Create BroadcastJob job-" + randStr
174+
job := &appsv1alpha1.BroadcastJob{
175+
ObjectMeta: metav1.ObjectMeta{Namespace: ns, Name: "job-" + randStr},
176+
Spec: appsv1alpha1.BroadcastJobSpec{
177+
Template: v1.PodTemplateSpec{
178+
Spec: v1.PodSpec{
179+
Tolerations: []v1.Toleration{{Key: framework.E2eFakeKey, Operator: v1.TolerationOpEqual, Value: randStr, Effect: v1.TaintEffectNoSchedule}},
180+
Containers: []v1.Container{{
181+
Name: "box",
182+
Image: BusyboxImage,
183+
Command: []string{"/bin/sh", "-c", "sleep 30"},
184+
}},
185+
RestartPolicy: v1.RestartPolicyNever,
186+
},
187+
},
188+
CompletionPolicy: appsv1alpha1.CompletionPolicy{Type: appsv1alpha1.Always},
189+
},
190+
}
191+
192+
nodes, err := nodeTester.ListRealNodesWithFake(job.Spec.Template.Spec.Tolerations)
193+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
194+
totalNodes := int32(len(nodes))
195+
parallelism := intstr.FromInt(len(nodes))
196+
job.Spec.Parallelism = &parallelism
197+
198+
ginkgo.By("Creating BroadcastJob " + job.Name)
199+
job, err = tester.CreateBroadcastJob(job)
200+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
201+
202+
ginkgo.By("Verify desired count equals total nodes - 1 (due to cordoned node)")
203+
gomega.Eventually(func() int32 {
204+
job, err = tester.GetBroadcastJob(job.Name)
205+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
206+
return job.Status.Desired
207+
}, 30*time.Second, time.Second).Should(gomega.Equal(totalNodes - 1))
208+
209+
ginkgo.By("Verify active pods equals total nodes - 1 (as pod is not created on cordoned node)")
210+
gomega.Eventually(func() int32 {
211+
job, err = tester.GetBroadcastJob(job.Name)
212+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
213+
return job.Status.Active
214+
}, 60*time.Second, 3*time.Second).Should(gomega.Equal(totalNodes - 1))
215+
216+
// Uncordon the fake node
217+
ginkgo.By("Uncordoning fake node " + fakeNode.Name)
218+
_, err = c.CoreV1().Nodes().Patch(context.TODO(), fakeNode.Name,
219+
types.StrategicMergePatchType,
220+
[]byte(`{"spec":{"unschedulable":false}}`),
221+
metav1.PatchOptions{})
222+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
223+
224+
ginkgo.By("Verify desired count becomes total nodes after uncordon")
225+
gomega.Eventually(func() int32 {
226+
job, err = tester.GetBroadcastJob(job.Name)
227+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
228+
return job.Status.Desired
229+
}, 30*time.Second, time.Second).Should(gomega.Equal(totalNodes))
230+
231+
ginkgo.By("Verify active pods becomes total nodes after uncordon (missing pod now created)")
232+
gomega.Eventually(func() int32 {
233+
job, err = tester.GetBroadcastJob(job.Name)
234+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
235+
return job.Status.Active
236+
}, 60*time.Second, 3*time.Second).Should(gomega.Equal(totalNodes))
237+
})
238+
})
156239
})

0 commit comments

Comments
 (0)