@@ -35,8 +35,25 @@ const (
3535 duration = time .Second * 2
3636 interval = time .Millisecond * 250
3737 workspaceNamespace = "default"
38+ secretsNamespace = "workspace-secrets"
3839)
3940
41+ var (
42+ k8sClient client.Client
43+ testEnv * envtest.Environment
44+ mock_ctrl * gomock.Controller
45+ ctx context.Context
46+ cancel context.CancelFunc
47+ workspaceCtrl * WorkspaceCountController
48+ NodeName = "cool-ws-node"
49+ )
50+
51+ func TestAPIs (t * testing.T ) {
52+ mock_ctrl = gomock .NewController (t )
53+ RegisterFailHandler (Fail )
54+ RunSpecs (t , "Controller Suite" )
55+ }
56+
4057var _ = Describe ("WorkspaceCountController" , func () {
4158 It ("should remove scale-down-disabled when last workspace is removed" , func () {
4259 ws1 := newWorkspace (uuid .NewString (), workspaceNamespace , NodeName , workspacev1 .WorkspacePhaseRunning )
@@ -81,6 +98,76 @@ var _ = Describe("WorkspaceCountController", func() {
8198 })
8299})
83100
101+ var _ = BeforeSuite (func () {
102+ logf .SetLogger (zap .New (zap .WriteTo (GinkgoWriter ), zap .UseDevMode (true )))
103+
104+ By ("bootstrapping test environment" )
105+ testEnv = & envtest.Environment {
106+ ControlPlaneStartTimeout : 1 * time .Minute ,
107+ ControlPlaneStopTimeout : 1 * time .Minute ,
108+ CRDDirectoryPaths : []string {filepath .Join (".." , "crd" )},
109+ ErrorIfCRDPathMissing : true ,
110+ }
111+
112+ cfg , err := testEnv .Start ()
113+ Expect (err ).NotTo (HaveOccurred ())
114+ Expect (cfg ).NotTo (BeNil ())
115+
116+ err = workspacev1 .AddToScheme (clientgoscheme .Scheme )
117+ Expect (err ).NotTo (HaveOccurred ())
118+
119+ //+kubebuilder:scaffold:scheme
120+
121+ k8sClient , err = client .New (cfg , client.Options {Scheme : clientgoscheme .Scheme })
122+ Expect (err ).NotTo (HaveOccurred ())
123+ Expect (k8sClient ).NotTo (BeNil ())
124+
125+ k8sManager , err := ctrl .NewManager (cfg , ctrl.Options {
126+ Scheme : clientgoscheme .Scheme ,
127+ })
128+ Expect (err ).ToNot (HaveOccurred ())
129+ ctx , cancel = context .WithCancel (context .Background ())
130+
131+ By ("Creating default ws node" )
132+ node := & corev1.Node {
133+ ObjectMeta : metav1.ObjectMeta {
134+ Name : NodeName ,
135+ },
136+ }
137+ Expect (k8sClient .Create (ctx , node )).To (Succeed ())
138+
139+ By ("Setting up workspace controller" )
140+ workspaceCtrl , err = NewWorkspaceCountController (k8sClient )
141+ Expect (err ).NotTo (HaveOccurred ())
142+ Expect (workspaceCtrl .SetupWithManager (k8sManager )).To (Succeed ())
143+
144+ _ = createNamespace (secretsNamespace )
145+
146+ By ("Starting the manager" )
147+ go func () {
148+ defer GinkgoRecover ()
149+ err = k8sManager .Start (ctx )
150+ Expect (err ).ToNot (HaveOccurred (), "failed to run manager" )
151+ }()
152+
153+ By ("Waiting for controllers to be ready" )
154+ DeferCleanup (cancel )
155+
156+ // Wait for controllers to be ready
157+ Eventually (func () bool {
158+ return k8sManager .GetCache ().WaitForCacheSync (ctx )
159+ }, time .Second * 10 , time .Millisecond * 100 ).Should (BeTrue ())
160+ })
161+
162+ var _ = AfterSuite (func () {
163+ if cancel != nil {
164+ cancel ()
165+ }
166+ By ("tearing down the test environment" )
167+ err := testEnv .Stop ()
168+ Expect (err ).NotTo (HaveOccurred ())
169+ })
170+
84171func newWorkspace (name , namespace , nodeName string , phase workspacev1.WorkspacePhase ) * workspacev1.Workspace {
85172 GinkgoHelper ()
86173 initializer := & csapi.WorkspaceInitializer {
@@ -153,85 +240,6 @@ func updateObjWithRetries[O client.Object](c client.Client, obj O, updateStatus
153240 }, timeout , interval ).Should (Succeed ())
154241}
155242
156- const secretsNamespace = "workspace-secrets"
157-
158- var (
159- k8sClient client.Client
160- testEnv * envtest.Environment
161- mock_ctrl * gomock.Controller
162- ctx context.Context
163- cancel context.CancelFunc
164- workspaceCtrl * WorkspaceCountController
165- NodeName = "cool-ws-node"
166- )
167-
168- func TestAPIs (t * testing.T ) {
169- mock_ctrl = gomock .NewController (t )
170- RegisterFailHandler (Fail )
171- RunSpecs (t , "Controller Suite" )
172- }
173-
174- var _ = BeforeSuite (func () {
175- logf .SetLogger (zap .New (zap .WriteTo (GinkgoWriter ), zap .UseDevMode (true )))
176-
177- By ("bootstrapping test environment" )
178- testEnv = & envtest.Environment {
179- ControlPlaneStartTimeout : 1 * time .Minute ,
180- ControlPlaneStopTimeout : 1 * time .Minute ,
181- CRDDirectoryPaths : []string {filepath .Join (".." , "crd" )},
182- ErrorIfCRDPathMissing : true ,
183- }
184-
185- cfg , err := testEnv .Start ()
186- Expect (err ).NotTo (HaveOccurred ())
187- Expect (cfg ).NotTo (BeNil ())
188-
189- err = workspacev1 .AddToScheme (clientgoscheme .Scheme )
190- Expect (err ).NotTo (HaveOccurred ())
191-
192- //+kubebuilder:scaffold:scheme
193-
194- k8sClient , err = client .New (cfg , client.Options {Scheme : clientgoscheme .Scheme })
195- Expect (err ).NotTo (HaveOccurred ())
196- Expect (k8sClient ).NotTo (BeNil ())
197-
198- k8sManager , err := ctrl .NewManager (cfg , ctrl.Options {
199- Scheme : clientgoscheme .Scheme ,
200- })
201- Expect (err ).ToNot (HaveOccurred ())
202- ctx , cancel = context .WithCancel (context .Background ())
203-
204- By ("Creating default ws node" )
205- node := & corev1.Node {
206- ObjectMeta : metav1.ObjectMeta {
207- Name : NodeName ,
208- },
209- }
210- Expect (k8sClient .Create (ctx , node )).To (Succeed ())
211-
212- By ("Setting up workspace controller" )
213- workspaceCtrl , err = NewWorkspaceCountController (k8sClient )
214- Expect (err ).NotTo (HaveOccurred ())
215- Expect (workspaceCtrl .SetupWithManager (k8sManager )).To (Succeed ())
216-
217- _ = createNamespace (secretsNamespace )
218-
219- By ("Starting the manager" )
220- go func () {
221- defer GinkgoRecover ()
222- err = k8sManager .Start (ctx )
223- Expect (err ).ToNot (HaveOccurred (), "failed to run manager" )
224- }()
225-
226- By ("Waiting for controllers to be ready" )
227- DeferCleanup (cancel )
228-
229- // Wait for controllers to be ready
230- Eventually (func () bool {
231- return k8sManager .GetCache ().WaitForCacheSync (ctx )
232- }, time .Second * 10 , time .Millisecond * 100 ).Should (BeTrue ())
233- })
234-
235243func createNamespace (name string ) * corev1.Namespace {
236244 GinkgoHelper ()
237245
@@ -244,12 +252,3 @@ func createNamespace(name string) *corev1.Namespace {
244252 Expect (k8sClient .Create (ctx , namespace )).To (Succeed ())
245253 return namespace
246254}
247-
248- var _ = AfterSuite (func () {
249- if cancel != nil {
250- cancel ()
251- }
252- By ("tearing down the test environment" )
253- err := testEnv .Stop ()
254- Expect (err ).NotTo (HaveOccurred ())
255- })
0 commit comments