...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package podfailure
15
16 import (
17 "context"
18 "testing"
19
20 "k8s.io/client-go/kubernetes/scheme"
21
22 . "github.com/onsi/ginkgo"
23 . "github.com/onsi/gomega"
24
25 v1 "k8s.io/api/core/v1"
26 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
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 TestPodFailure(t *testing.T) {
42 RegisterFailHandler(Fail)
43
44 RunSpecsWithDefaultAndCustomReporters(t,
45 "PodFailure 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("PodFailure", func() {
63 objs, pods := 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{Namespaces: []string{metav1.NamespaceDefault}},
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("PodFailure Action", func() {
94 defer mock.With("MockChaosDaemonClient", &MockChaosDaemonClient{})()
95 defer mock.With("MockSelectAndFilterPods", func() []v1.Pod {
96 return pods
97 })()
98
99 var err error
100
101 err = r.Apply(context.TODO(), ctrl.Request{}, &podChaos)
102 Expect(err).ToNot(HaveOccurred())
103
104 err = r.Recover(context.TODO(), ctrl.Request{}, &podChaos)
105 Expect(err).ToNot(HaveOccurred())
106 })
107
108 })
109 })
110