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