...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package controllers
15
16 import (
17 "context"
18 "os"
19 "path/filepath"
20 "testing"
21
22 . "github.com/onsi/ginkgo"
23 . "github.com/onsi/gomega"
24 "go.uber.org/fx"
25 "k8s.io/client-go/rest"
26 "k8s.io/kubectl/pkg/scheme"
27 ctrl "sigs.k8s.io/controller-runtime"
28 "sigs.k8s.io/controller-runtime/pkg/client"
29 "sigs.k8s.io/controller-runtime/pkg/envtest"
30 "sigs.k8s.io/controller-runtime/pkg/envtest/printer"
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/types"
36 "github.com/chaos-mesh/chaos-mesh/controllers/utils/test"
37 )
38
39 var app *fx.App
40 var kubeClient client.Client
41 var config *rest.Config
42 var testEnv *envtest.Environment
43 var setupLog = ctrl.Log.WithName("setup")
44
45
46
47 func TestWorkflow(t *testing.T) {
48 RegisterFailHandler(Fail)
49
50 RunSpecsWithDefaultAndCustomReporters(t,
51 "workflow suite",
52 []Reporter{printer.NewlineReporter{}})
53 }
54
55 var _ = BeforeSuite(func() {
56 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
57 By("bootstrapping test environment")
58 t := true
59 if os.Getenv("USE_EXISTING_CLUSTER") == "true" {
60 testEnv = &envtest.Environment{
61 UseExistingCluster: &t,
62 }
63 } else {
64 testEnv = &envtest.Environment{
65 CRDDirectoryPaths: []string{filepath.Join("..", "..", "..", "config", "crd", "bases")},
66 }
67 }
68
69 err := v1alpha1.SchemeBuilder.AddToScheme(scheme.Scheme)
70 Expect(err).NotTo(HaveOccurred())
71
72 config, err = testEnv.Start()
73 Expect(err).ToNot(HaveOccurred())
74 Expect(config).ToNot(BeNil())
75
76 kubeClient, err = client.New(config, client.Options{Scheme: scheme.Scheme})
77 Expect(err).ToNot(HaveOccurred())
78 Expect(kubeClient).ToNot(BeNil())
79
80 app = fx.New(
81 fx.Options(
82 test.Module,
83 fx.Supply(config),
84 types.ChaosObjects,
85 ),
86
87 fx.Invoke(BootstrapWorkflowControllers),
88 )
89 startCtx, cancel := context.WithTimeout(context.Background(), app.StartTimeout())
90 defer cancel()
91
92 if err := app.Start(startCtx); err != nil {
93 setupLog.Error(err, "fail to start manager")
94 }
95 Expect(err).ToNot(HaveOccurred())
96
97 }, 60)
98
99 var _ = AfterSuite(func() {
100 By("tearing down the test environment")
101 stopCtx, cancel := context.WithTimeout(context.Background(), app.StopTimeout())
102 defer cancel()
103
104 if err := app.Stop(stopCtx); err != nil {
105 setupLog.Error(err, "fail to stop manager")
106 }
107 err := testEnv.Stop()
108 Expect(err).ToNot(HaveOccurred())
109 })
110