...
1
2
3
4
5
6
7
8
9
10
11
12
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