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