kuma
76 строк · 1.9 Кб
1package graceful
2
3import (
4"github.com/gruntwork-io/terratest/modules/k8s"
5. "github.com/onsi/ginkgo/v2"
6. "github.com/onsi/gomega"
7
8. "github.com/kumahq/kuma/test/framework"
9"github.com/kumahq/kuma/test/framework/envs/kubernetes"
10)
11
12func Eviction() {
13nsName := "eviction"
14meshName := "eviction"
15
16BeforeAll(func() {
17err := NewClusterSetup().
18Install(NamespaceWithSidecarInjection(nsName)).
19Install(MeshKubernetes(meshName)).
20Setup(kubernetes.Cluster)
21Expect(err).ToNot(HaveOccurred())
22})
23
24E2EAfterAll(func() {
25Expect(kubernetes.Cluster.TriggerDeleteNamespace(nsName)).To(Succeed())
26Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
27})
28
29It("remove Dataplane of evicted Pod", func() {
30evictionPod := `apiVersion: v1
31kind: Pod
32metadata:
33name: to-be-evicted
34namespace: eviction
35annotations:
36kuma.io/mesh: eviction
37spec:
38volumes:
39containers:
40- name: alpine-evict
41image: alpine
42args:
43- /bin/ash
44- -c
45- --
46- "while true; do cat /usr/bin/* ; done"
47resources:
48limits:
49cpu: 50m
50ephemeral-storage: 10Ki
51memory: 64Mi`
52
53// when faulty pod is applied
54Expect(kubernetes.Cluster.Install(YamlK8s(evictionPod))).To(Succeed())
55
56// when it's evicted
57Eventually(func(g Gomega) {
58out, err := k8s.RunKubectlAndGetOutputE(
59kubernetes.Cluster.GetTesting(),
60kubernetes.Cluster.GetKubectlOptions(nsName),
61"get",
62"pod", "to-be-evicted",
63"-o", "go-template=\"{{.status.reason}}\"",
64)
65g.Expect(err).ToNot(HaveOccurred())
66g.Expect(out).To(ContainSubstring("Evicted"))
67}, "60s", "1s").Should(Succeed())
68
69// then Dataplane is removed
70Eventually(func(g Gomega) {
71dataplanes, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("dataplanes", meshName)
72g.Expect(err).ToNot(HaveOccurred())
73g.Expect(dataplanes).ShouldNot(ContainElement(ContainSubstring("to-be-evicted")))
74}, "60s", "1s").Should(Succeed())
75})
76}
77