Skip to content

Commit 1135eb2

Browse files
committed
test(e2e): add cordon/uncordon scheduling filter test
1 parent bb7ece1 commit 1135eb2

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

test/e2e/e2e_test.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,88 @@ spec:
214214
}).Should(Succeed())
215215
})
216216
})
217+
218+
Context("Scheduling filter", Ordered, func() {
219+
var nodeName string
220+
221+
BeforeAll(func() {
222+
By("getting Kind node name")
223+
out, err := utils.Run(exec.Command("kubectl", "get", "nodes",
224+
"-o", "jsonpath={.items[0].metadata.name}"))
225+
Expect(err).NotTo(HaveOccurred())
226+
nodeName = strings.TrimSpace(out)
227+
Expect(nodeName).NotTo(BeEmpty())
228+
229+
By("removing control-plane taint so scheduler can use the node")
230+
_, _ = utils.Run(exec.Command("kubectl", "taint", "nodes", nodeName,
231+
"node-role.kubernetes.io/control-plane:NoSchedule-"))
232+
233+
By("labeling node imp/enabled=true")
234+
_, err = utils.Run(exec.Command("kubectl", "label", "node", nodeName,
235+
"imp/enabled=true", "--overwrite"))
236+
Expect(err).NotTo(HaveOccurred())
237+
})
238+
239+
AfterAll(func() {
240+
By("removing imp/enabled label")
241+
_, _ = utils.Run(exec.Command("kubectl", "label", "node", nodeName,
242+
"imp/enabled-"))
243+
})
244+
245+
AfterEach(func() {
246+
for _, name := range []string{"e2e-sched-cordon", "e2e-sched-notoleration", "e2e-sched-toleration"} {
247+
_, _ = utils.Run(exec.Command("kubectl", "delete", "impvm", name,
248+
"-n", "default", "--ignore-not-found"))
249+
}
250+
_, _ = utils.Run(exec.Command("kubectl", "uncordon", nodeName))
251+
_, _ = utils.Run(exec.Command("kubectl", "taint", "nodes", nodeName,
252+
"e2e-test=blocked:NoSchedule-"))
253+
})
254+
255+
It("keeps VM Pending on cordoned node, schedules after uncordon", func() {
256+
By("cordoning the node")
257+
_, err := utils.Run(exec.Command("kubectl", "cordon", nodeName))
258+
Expect(err).NotTo(HaveOccurred())
259+
260+
By("creating ImpVM e2e-sched-cordon")
261+
manifest := `
262+
apiVersion: imp.dev/v1alpha1
263+
kind: ImpVM
264+
metadata:
265+
name: e2e-sched-cordon
266+
namespace: default
267+
spec:
268+
classRef:
269+
name: small
270+
image: ghcr.io/syscode-labs/test:latest
271+
lifecycle: ephemeral
272+
`
273+
applyCmd := exec.Command("kubectl", "apply", "-f", "-")
274+
applyCmd.Stdin = strings.NewReader(manifest)
275+
_, err = utils.Run(applyCmd)
276+
Expect(err).NotTo(HaveOccurred())
277+
278+
By("verifying VM stays Pending (no nodeName) while node is cordoned")
279+
Consistently(func(g Gomega) {
280+
getCmd := exec.Command("kubectl", "get", "impvm", "e2e-sched-cordon",
281+
"-n", "default", "-o", "jsonpath={.spec.nodeName}")
282+
out, getErr := utils.Run(getCmd)
283+
g.Expect(getErr).NotTo(HaveOccurred())
284+
g.Expect(strings.TrimSpace(out)).To(BeEmpty())
285+
}, 20*time.Second, time.Second).Should(Succeed())
286+
287+
By("uncordoning the node")
288+
_, err = utils.Run(exec.Command("kubectl", "uncordon", nodeName))
289+
Expect(err).NotTo(HaveOccurred())
290+
291+
By("verifying VM gets scheduled (nodeName set)")
292+
Eventually(func(g Gomega) {
293+
getCmd := exec.Command("kubectl", "get", "impvm", "e2e-sched-cordon",
294+
"-n", "default", "-o", "jsonpath={.spec.nodeName}")
295+
out, getErr := utils.Run(getCmd)
296+
g.Expect(getErr).NotTo(HaveOccurred())
297+
g.Expect(strings.TrimSpace(out)).NotTo(BeEmpty())
298+
}).Should(Succeed())
299+
})
300+
})
217301
})

0 commit comments

Comments
 (0)