1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package sidecar
17
18 import (
19 "context"
20 "time"
21
22 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23 "k8s.io/apimachinery/pkg/labels"
24 "k8s.io/apimachinery/pkg/util/wait"
25 "k8s.io/client-go/kubernetes"
26 "k8s.io/kubernetes/test/e2e/framework"
27 "sigs.k8s.io/controller-runtime/pkg/client"
28
29 "github.com/chaos-mesh/chaos-mesh/e2e-test/e2e/util"
30 "github.com/chaos-mesh/chaos-mesh/e2e-test/pkg/fixture"
31 )
32
33 func TestcaseNoTemplate(
34 ns string,
35 cmNamespace string,
36 cmName string,
37 kubeCli kubernetes.Interface,
38 cli client.Client,
39 ) {
40 ctx, cancel := context.WithCancel(context.Background())
41 defer cancel()
42 err := createInjectionConfig(ctx, cli, ns, cmName,
43 map[string]string{
44 "chaosfs-io": `name: chaosfs-io
45 selector:
46 labelSelectors:
47 app: io`})
48 framework.ExpectNoError(err, "failed to create injection config")
49
50 listOptions := metav1.ListOptions{
51 LabelSelector: labels.SelectorFromSet(map[string]string{
52 "app.kubernetes.io/component": "controller-manager",
53 }).String(),
54 }
55 pods, err := kubeCli.CoreV1().Pods(cmNamespace).List(context.TODO(), listOptions)
56 framework.ExpectNoError(err, "get chaos mesh controller pods error")
57
58 err = wait.Poll(time.Second, 10*time.Second, func() (done bool, err error) {
59 newPods, err := kubeCli.CoreV1().Pods(cmNamespace).List(context.TODO(), listOptions)
60 framework.ExpectNoError(err, "get chaos mesh controller pods error")
61 if !fixture.HaveSameUIDs(pods.Items, newPods.Items) {
62 return true, nil
63 }
64 if len(newPods.Items) > 0 && newPods.Items[0].Status.ContainerStatuses[0].RestartCount > 0 {
65 return true, nil
66 }
67 return false, nil
68 })
69 framework.ExpectError(err, "wait chaos mesh not dies")
70 framework.ExpectEqual(err.Error(), wait.ErrWaitTimeout.Error())
71
72 err = enableWebhook(ns)
73 framework.ExpectNoError(err, "enable webhook on ns error")
74 nd := fixture.NewIOTestDeployment("io-test", ns)
75 _, err = kubeCli.AppsV1().Deployments(ns).Create(context.TODO(), nd, metav1.CreateOptions{})
76 framework.ExpectNoError(err, "create io-test deployment error")
77 err = util.WaitDeploymentReady("io-test", ns, kubeCli)
78 framework.ExpectNoError(err, "wait io-test deployment ready error")
79
80
81
82 }
83
84 func TestcaseNoTemplateArgs(
85 ns string,
86 cmNamespace string,
87 cmName string,
88 kubeCli kubernetes.Interface,
89 cli client.Client,
90 ) {
91 ctx, cancel := context.WithCancel(context.Background())
92 defer cancel()
93
94 err := createInjectionConfig(ctx, cli, ns, cmName,
95 map[string]string{
96 "chaosfs-io": `name: chaosfs-io
97 template: chaosfs-sidecar
98 selector:
99 labelSelectors:
100 app: io`})
101 framework.ExpectNoError(err, "failed to create injection config")
102
103 listOptions := metav1.ListOptions{
104 LabelSelector: labels.SelectorFromSet(map[string]string{
105 "app.kubernetes.io/component": "controller-manager",
106 }).String(),
107 }
108 pods, err := kubeCli.CoreV1().Pods(cmNamespace).List(context.TODO(), listOptions)
109 framework.ExpectNoError(err, "get chaos mesh controller pods error")
110
111 err = wait.Poll(time.Second, 10*time.Second, func() (done bool, err error) {
112 newPods, err := kubeCli.CoreV1().Pods(cmNamespace).List(context.TODO(), listOptions)
113 framework.ExpectNoError(err, "get chaos mesh controller pods error")
114 if !fixture.HaveSameUIDs(pods.Items, newPods.Items) {
115 return true, nil
116 }
117 if len(newPods.Items) > 0 && newPods.Items[0].Status.ContainerStatuses[0].RestartCount > 0 {
118 return true, nil
119 }
120 return false, nil
121 })
122 framework.ExpectError(err, "wait chaos mesh not dies")
123 framework.ExpectEqual(err.Error(), wait.ErrWaitTimeout.Error())
124
125 err = enableWebhook(ns)
126 framework.ExpectNoError(err, "enable webhook on ns error")
127 nd := fixture.NewIOTestDeployment("io-test", ns)
128 _, err = kubeCli.AppsV1().Deployments(ns).Create(context.TODO(), nd, metav1.CreateOptions{})
129 framework.ExpectNoError(err, "create io-test deployment error")
130 err = util.WaitDeploymentReady("io-test", ns, kubeCli)
131 framework.ExpectNoError(err, "wait io-test deployment ready error")
132 }
133