...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package desiredphase
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/test"
39 )
40
41
42
43
44 var app *fx.App
45 var k8sClient client.Client
46 var lister *utils.ActiveLister
47 var config *rest.Config
48 var testEnv *envtest.Environment
49 var setupLog = ctrl.Log.WithName("setup")
50
51 func TestDesiredPhase(t *testing.T) {
52 RegisterFailHandler(Fail)
53
54 RunSpecsWithDefaultAndCustomReporters(t,
55 "Desired Phase suit",
56 []Reporter{printer.NewlineReporter{}})
57 }
58
59 var _ = BeforeSuite(func() {
60 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
61 By("bootstrapping test environment")
62 t := true
63 if os.Getenv("USE_EXISTING_CLUSTER") == "true" {
64 testEnv = &envtest.Environment{
65 UseExistingCluster: &t,
66 }
67 } else {
68 testEnv = &envtest.Environment{
69 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")},
70 }
71 }
72
73 err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
74 Expect(err).NotTo(HaveOccurred())
75
76 config, err = testEnv.Start()
77 Expect(err).ToNot(HaveOccurred())
78 Expect(config).ToNot(BeNil())
79
80 k8sClient, err = client.New(config, client.Options{Scheme: scheme.Scheme})
81 Expect(err).ToNot(HaveOccurred())
82 Expect(k8sClient).ToNot(BeNil())
83
84 app = fx.New(
85 fx.Options(
86 test.Module,
87 fx.Provide(
88 fx.Annotated{
89 Group: "controller",
90 Target: NewController,
91 },
92 ),
93 fx.Supply(config),
94 types.ChaosObjects,
95 ),
96 fx.Invoke(Run),
97 )
98 startCtx, cancel := context.WithTimeout(context.Background(), app.StartTimeout())
99 defer cancel()
100
101 if err := app.Start(startCtx); err != nil {
102 setupLog.Error(err, "fail to start manager")
103 }
104 Expect(err).ToNot(HaveOccurred())
105
106 }, 60)
107
108 var _ = AfterSuite(func() {
109 By("tearing down the test environment")
110 stopCtx, cancel := context.WithTimeout(context.Background(), app.StopTimeout())
111 defer cancel()
112
113 if err := app.Stop(stopCtx); err != nil {
114 setupLog.Error(err, "fail to stop manager")
115 }
116 err := testEnv.Stop()
117 Expect(err).ToNot(HaveOccurred())
118 })
119
120 type RunParams struct {
121 fx.In
122
123 Mgr ctrl.Manager
124 Logger logr.Logger
125
126 Controllers []types.Controller `group:"controller"`
127 Objs []types.Object `group:"objs"`
128 }
129
130 func Run(params RunParams) error {
131 lister = utils.NewActiveLister(k8sClient, params.Logger)
132 return nil
133 }
134