...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package finalizers
17
18 import (
19 "context"
20 "os"
21 "path/filepath"
22 "testing"
23
24 "sigs.k8s.io/controller-runtime/pkg/envtest/printer"
25
26 "github.com/go-logr/logr"
27 . "github.com/onsi/ginkgo"
28 . "github.com/onsi/gomega"
29 "go.uber.org/fx"
30
31 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1"
32 "github.com/chaos-mesh/chaos-mesh/controllers/schedule/utils"
33 "github.com/chaos-mesh/chaos-mesh/controllers/types"
34 "github.com/chaos-mesh/chaos-mesh/controllers/utils/test"
35
36 "k8s.io/client-go/rest"
37 "k8s.io/kubectl/pkg/scheme"
38 ctrl "sigs.k8s.io/controller-runtime"
39 "sigs.k8s.io/controller-runtime/pkg/client"
40 "sigs.k8s.io/controller-runtime/pkg/envtest"
41 logf "sigs.k8s.io/controller-runtime/pkg/log"
42 "sigs.k8s.io/controller-runtime/pkg/log/zap"
43 )
44
45
46
47
48 var app *fx.App
49 var k8sClient client.Client
50 var lister *utils.ActiveLister
51 var config *rest.Config
52 var testEnv *envtest.Environment
53 var setupLog = ctrl.Log.WithName("setup")
54
55 func TestSchedule(t *testing.T) {
56 RegisterFailHandler(Fail)
57
58 RunSpecsWithDefaultAndCustomReporters(t,
59 "Schedule suit",
60 []Reporter{printer.NewlineReporter{}})
61 }
62
63 var _ = BeforeSuite(func() {
64 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
65 By("bootstrapping test environment")
66 t := true
67 if os.Getenv("USE_EXISTING_CLUSTER") == "true" {
68 testEnv = &envtest.Environment{
69 UseExistingCluster: &t,
70 }
71 } else {
72 testEnv = &envtest.Environment{
73 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")},
74 }
75 }
76
77 err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
78 Expect(err).NotTo(HaveOccurred())
79
80 config, err = testEnv.Start()
81 Expect(err).ToNot(HaveOccurred())
82 Expect(config).ToNot(BeNil())
83
84 k8sClient, err = client.New(config, client.Options{Scheme: scheme.Scheme})
85 Expect(err).ToNot(HaveOccurred())
86 Expect(k8sClient).ToNot(BeNil())
87
88 app = fx.New(
89 fx.Options(
90 test.Module,
91 fx.Invoke(Bootstrap),
92 fx.Supply(config),
93 types.ChaosObjects,
94 ),
95 fx.Invoke(Run),
96 )
97 startCtx, cancel := context.WithTimeout(context.Background(), app.StartTimeout())
98 defer cancel()
99
100 if err := app.Start(startCtx); err != nil {
101 setupLog.Error(err, "fail to start manager")
102 }
103 Expect(err).ToNot(HaveOccurred())
104
105 }, 60)
106
107 var _ = AfterSuite(func() {
108 By("tearing down the test environment")
109 stopCtx, cancel := context.WithTimeout(context.Background(), app.StopTimeout())
110 defer cancel()
111
112 if err := app.Stop(stopCtx); err != nil {
113 setupLog.Error(err, "fail to stop manager")
114 }
115 err := testEnv.Stop()
116 Expect(err).ToNot(HaveOccurred())
117 })
118
119 type RunParams struct {
120 fx.In
121
122 Mgr ctrl.Manager
123 Logger logr.Logger
124
125 Controllers []types.Controller `group:"controller"`
126 Objs []types.Object `group:"objs"`
127 }
128
129 func Run(params RunParams) error {
130 lister = utils.NewActiveLister(k8sClient, params.Logger)
131 return nil
132 }
133