...

Source file src/github.com/chaos-mesh/chaos-mesh/e2e-test/e2e/chaos/sidecar/injection_config.go

Documentation: github.com/chaos-mesh/chaos-mesh/e2e-test/e2e/chaos/sidecar

     1  // Copyright 2021 Chaos Mesh Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  // http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    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  	// cleanup
    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