...

Source file src/github.com/chaos-mesh/chaos-mesh/controllers/podchaos/containerkill/containerkill_suite_test.go

Documentation: github.com/chaos-mesh/chaos-mesh/controllers/podchaos/containerkill

     1  // Copyright 2020 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  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package containerkill
    15  
    16  import (
    17  	"context"
    18  	"errors"
    19  	"testing"
    20  
    21  	. "github.com/onsi/ginkgo"
    22  	. "github.com/onsi/gomega"
    23  
    24  	v1 "k8s.io/api/core/v1"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  	"k8s.io/client-go/kubernetes/scheme"
    27  	"k8s.io/client-go/tools/record"
    28  	ctrl "sigs.k8s.io/controller-runtime"
    29  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    30  	"sigs.k8s.io/controller-runtime/pkg/envtest"
    31  	logf "sigs.k8s.io/controller-runtime/pkg/log"
    32  	"sigs.k8s.io/controller-runtime/pkg/log/zap"
    33  
    34  	"github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
    35  	. "github.com/chaos-mesh/chaos-mesh/controllers/test"
    36  	"github.com/chaos-mesh/chaos-mesh/pkg/mock"
    37  	ctx "github.com/chaos-mesh/chaos-mesh/pkg/router/context"
    38  	. "github.com/chaos-mesh/chaos-mesh/pkg/testutils"
    39  )
    40  
    41  func TestContainerKill(t *testing.T) {
    42  	RegisterFailHandler(Fail)
    43  
    44  	RunSpecsWithDefaultAndCustomReporters(t,
    45  		"ContainerKill Suite",
    46  		[]Reporter{envtest.NewlineReporter{}})
    47  }
    48  
    49  var _ = BeforeSuite(func(done Done) {
    50  	logf.SetLogger(zap.LoggerTo(GinkgoWriter, true))
    51  
    52  	Expect(v1.AddToScheme(scheme.Scheme)).To(Succeed())
    53  	Expect(v1alpha1.AddToScheme(scheme.Scheme)).To(Succeed())
    54  
    55  	close(done)
    56  }, 60)
    57  
    58  var _ = AfterSuite(func() {
    59  })
    60  
    61  var _ = Describe("PodChaos", func() {
    62  	Context("ContainerKill", func() {
    63  		objs, _ := GenerateNPods("p", 1, PodArg{ContainerStatus: v1.ContainerStatus{
    64  			ContainerID: "fake-container-id",
    65  			Name:        "container-name",
    66  		}})
    67  
    68  		podChaos := v1alpha1.PodChaos{
    69  			TypeMeta: metav1.TypeMeta{
    70  				Kind:       "PodChaos",
    71  				APIVersion: "v1",
    72  			},
    73  			ObjectMeta: metav1.ObjectMeta{
    74  				Namespace: metav1.NamespaceDefault,
    75  				Name:      "podchaos-name",
    76  			},
    77  			Spec: v1alpha1.PodChaosSpec{
    78  				Selector:      v1alpha1.SelectorSpec{},
    79  				Mode:          v1alpha1.OnePodMode,
    80  				ContainerName: "container-name",
    81  				Scheduler:     &v1alpha1.SchedulerSpec{Cron: "@hourly"},
    82  			},
    83  		}
    84  
    85  		r := endpoint{
    86  			Context: ctx.Context{
    87  				Client:        fake.NewFakeClientWithScheme(scheme.Scheme, objs...),
    88  				EventRecorder: &record.FakeRecorder{},
    89  				Log:           ctrl.Log.WithName("controllers").WithName("PodChaos"),
    90  			},
    91  		}
    92  
    93  		It("ContainerKill Apply", func() {
    94  			defer mock.With("MockChaosDaemonClient", &MockChaosDaemonClient{})()
    95  
    96  			err := r.Apply(context.TODO(), ctrl.Request{}, &podChaos)
    97  			Expect(err).ToNot(HaveOccurred())
    98  
    99  			err = r.Recover(context.TODO(), ctrl.Request{}, &podChaos)
   100  			Expect(err).ToNot(HaveOccurred())
   101  		})
   102  
   103  		It("ContainerKill Apply Error", func() {
   104  			defer mock.With("MockChaosDaemonClient", &MockChaosDaemonClient{})()
   105  			defer mock.With("MockContainerKillError", errors.New("ContainerKillError"))()
   106  
   107  			err := r.Apply(context.TODO(), ctrl.Request{}, &podChaos)
   108  
   109  			Expect(err).To(HaveOccurred())
   110  			Expect(err.Error()).To(ContainSubstring("ContainerKillError"))
   111  		})
   112  	})
   113  })
   114