Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/ws-daemon/pkg/controller/suite_test.go
2500 views
1
// Copyright (c) 2023 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
package controller
6
7
import (
8
"context"
9
"path/filepath"
10
"testing"
11
"time"
12
13
"github.com/golang/mock/gomock"
14
. "github.com/onsi/ginkgo/v2"
15
. "github.com/onsi/gomega"
16
corev1 "k8s.io/api/core/v1"
17
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
"k8s.io/client-go/tools/record"
19
"k8s.io/kubectl/pkg/scheme"
20
ctrl "sigs.k8s.io/controller-runtime"
21
"sigs.k8s.io/controller-runtime/pkg/client"
22
"sigs.k8s.io/controller-runtime/pkg/envtest"
23
"sigs.k8s.io/controller-runtime/pkg/log/zap"
24
ctrl_metrics "sigs.k8s.io/controller-runtime/pkg/metrics"
25
26
//+kubebuilder:scaffold:imports
27
28
"github.com/gitpod-io/gitpod/common-go/util"
29
workspacev1 "github.com/gitpod-io/gitpod/ws-manager/api/crd/v1"
30
logf "sigs.k8s.io/controller-runtime/pkg/log"
31
)
32
33
const secretsNamespace = "workspace-secrets"
34
35
var (
36
k8sClient client.Client
37
testEnv *envtest.Environment
38
mock_ctrl *gomock.Controller
39
ctx context.Context
40
cancel context.CancelFunc
41
workspaceCtrl *WorkspaceController
42
NodeName = "ws-daemon-node"
43
)
44
45
func TestAPIs(t *testing.T) {
46
mock_ctrl = gomock.NewController(t)
47
RegisterFailHandler(Fail)
48
RunSpecs(t, "Controller Suite")
49
}
50
51
var _ = BeforeSuite(func() {
52
logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
53
54
crdPath := filepath.Join("..", "..", "crd")
55
if !util.InLeewayBuild() {
56
crdPath = filepath.Join("..", "..", "..", "ws-manager-mk2", "config", "crd", "bases")
57
}
58
59
By("bootstrapping test environment")
60
testEnv = &envtest.Environment{
61
ControlPlaneStartTimeout: 1 * time.Minute,
62
ControlPlaneStopTimeout: 1 * time.Minute,
63
CRDDirectoryPaths: []string{crdPath},
64
ErrorIfCRDPathMissing: true,
65
}
66
67
cfg, err := testEnv.Start()
68
Expect(err).NotTo(HaveOccurred())
69
Expect(cfg).NotTo(BeNil())
70
71
err = workspacev1.AddToScheme(scheme.Scheme)
72
Expect(err).NotTo(HaveOccurred())
73
74
//+kubebuilder:scaffold:scheme
75
76
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
77
Expect(err).NotTo(HaveOccurred())
78
Expect(k8sClient).NotTo(BeNil())
79
80
k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{
81
Scheme: scheme.Scheme,
82
})
83
Expect(err).ToNot(HaveOccurred())
84
ctx, cancel = context.WithCancel(context.Background())
85
86
workspaceCtrl, err = NewWorkspaceController(k8sClient, record.NewFakeRecorder(100), NodeName, secretsNamespace, 5, nil, ctrl_metrics.Registry, nil)
87
Expect(err).NotTo(HaveOccurred())
88
89
Expect(workspaceCtrl.SetupWithManager(k8sManager)).To(Succeed())
90
_ = createNamespace(secretsNamespace)
91
92
go func() {
93
defer GinkgoRecover()
94
err = k8sManager.Start(ctx)
95
Expect(err).ToNot(HaveOccurred(), "failed to run manager")
96
}()
97
})
98
99
func createNamespace(name string) *corev1.Namespace {
100
GinkgoHelper()
101
102
namespace := &corev1.Namespace{
103
ObjectMeta: metav1.ObjectMeta{
104
Name: name,
105
},
106
}
107
108
Expect(k8sClient.Create(ctx, namespace)).To(Succeed())
109
return namespace
110
}
111
112
var _ = AfterSuite(func() {
113
if cancel != nil {
114
cancel()
115
}
116
By("tearing down the test environment")
117
err := testEnv.Stop()
118
Expect(err).NotTo(HaveOccurred())
119
})
120
121