Skip to content

Commit ab7d178

Browse files
Stabilize unit testing (#540)
* Stabilize unit testing * Fix bmcSettings controller test
1 parent a3c4378 commit ab7d178

10 files changed

+236
-19
lines changed

bmc/mock/server/server.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,11 @@ func handleSystemReset(s *MockServer, r *http.Request, urlPath string, body []by
326326
if val, ok := base[ResourceLockKey]; ok && val == LockedResourceState {
327327
s.mu.Unlock()
328328
s.log.Info("System resource is locked, cannot perform reset", base)
329+
go func() {
330+
// unlock after waiting period incase of stuck lock
331+
time.Sleep(300 * time.Millisecond)
332+
delete(base, ResourceLockKey)
333+
}()
329334
return errors.New("system resource locked, cannot perform reset")
330335
}
331336
base[ResourceLockKey] = LockedResourceState

internal/controller/biossettings_controller_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,14 @@ var _ = Describe("BIOSSettings Controller", func() {
178178
Eventually(Object(server)).Should(
179179
HaveField("Spec.BIOSSettingsRef.Name", biosSettingsV2.Name),
180180
)
181+
By("Deleting the BIOSSettings V2 (new)")
182+
Expect(k8sClient.Delete(ctx, biosSettingsV2)).To(Succeed())
183+
Eventually(Object(server)).Should(
184+
HaveField("Spec.BIOSSettingsRef", BeNil()),
185+
)
186+
Eventually(Object(server)).Should(
187+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
188+
)
181189
})
182190

183191
It("should move to completed if no bios setting changes to referred server", func(ctx SpecContext) {
@@ -239,6 +247,9 @@ var _ = Describe("BIOSSettings Controller", func() {
239247
Eventually(Object(server)).Should(
240248
HaveField("Spec.BIOSSettingsRef", BeNil()),
241249
)
250+
Eventually(Object(server)).Should(
251+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
252+
)
242253
})
243254

244255
It("Should request maintenance when changing power status of server, even if bios settings update does not need it", func(ctx SpecContext) {
@@ -386,6 +397,10 @@ var _ = Describe("BIOSSettings Controller", func() {
386397

387398
// cleanup
388399
Expect(k8sClient.Delete(ctx, serverClaim)).Should(Succeed())
400+
Eventually(Object(server)).Should(SatisfyAll(
401+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
402+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
403+
))
389404
})
390405

391406
It("should create maintenance if setting update needs reboot", func(ctx SpecContext) {
@@ -519,7 +534,12 @@ var _ = Describe("BIOSSettings Controller", func() {
519534
Consistently(Get(serverMaintenance)).Should(Satisfy(apierrors.IsNotFound))
520535

521536
// cleanup
537+
Expect(k8sClient.Delete(ctx, biosSettings)).Should(Succeed())
522538
Expect(k8sClient.Delete(ctx, serverClaim)).Should(Succeed())
539+
Eventually(Object(server)).Should(SatisfyAll(
540+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
541+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
542+
))
523543
})
524544

525545
It("should update setting if server is in available state", func(ctx SpecContext) {
@@ -612,6 +632,9 @@ var _ = Describe("BIOSSettings Controller", func() {
612632
Eventually(Object(server)).Should(
613633
HaveField("Spec.BIOSSettingsRef", BeNil()),
614634
)
635+
Eventually(Object(server)).Should(
636+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
637+
)
615638
})
616639

617640
It("should wait for upgrade and reconcile when biosSettings version is correct", func(ctx SpecContext) {
@@ -735,6 +758,9 @@ var _ = Describe("BIOSSettings Controller", func() {
735758

736759
// cleanup
737760
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
761+
Eventually(Object(server)).Should(
762+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
763+
)
738764
})
739765

740766
It("should allow retry using annotation", func(ctx SpecContext) {
@@ -787,6 +813,9 @@ var _ = Describe("BIOSSettings Controller", func() {
787813

788814
Expect(k8sClient.Delete(ctx, biosSettings)).To(Succeed())
789815
Eventually(Get(biosSettings)).Should(Satisfy(apierrors.IsNotFound))
816+
Eventually(Object(server)).Should(
817+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
818+
)
790819
})
791820
})
792821

@@ -996,6 +1025,10 @@ var _ = Describe("BIOSSettings Controller with BMCRef BMC", func() {
9961025

9971026
// cleanup
9981027
Expect(k8sClient.Delete(ctx, serverClaim)).Should(Succeed())
1028+
Eventually(Object(server)).Should(SatisfyAll(
1029+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
1030+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
1031+
))
9991032
})
10001033
})
10011034

@@ -1098,6 +1131,9 @@ var _ = Describe("BIOSSettings Sequence Controller", func() {
10981131

10991132
By("Deleting the BIOSSetting")
11001133
Expect(k8sClient.Delete(ctx, biosSettings)).To(Succeed())
1134+
Eventually(Object(server)).Should(
1135+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
1136+
)
11011137
})
11021138

11031139
It("Should fail if duplicate keys in names or settings found", func(ctx SpecContext) {
@@ -1202,6 +1238,11 @@ var _ = Describe("BIOSSettings Sequence Controller", func() {
12021238

12031239
By("Deleting the biosSettings2")
12041240
Expect(k8sClient.Delete(ctx, biosSettings2)).To(Succeed())
1241+
By("Deleting the biosSettings")
1242+
Expect(k8sClient.Delete(ctx, biosSettings)).To(Succeed())
1243+
Eventually(Object(server)).Should(
1244+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
1245+
)
12051246
})
12061247

12071248
It("Should successfully apply sequence of different settings and reconcile from applied state", func(ctx SpecContext) {
@@ -1243,6 +1284,12 @@ var _ = Describe("BIOSSettings Sequence Controller", func() {
12431284
By("Ensuring that the BIOSSettings conditions are updated")
12441285
ensureBiosSettingsFlowCondition(biosSettings)
12451286

1287+
// move server back to available state (to avoid initial/discovery state loop)
1288+
By("Ensure that the Server is in available state")
1289+
Eventually(UpdateStatus(server, func() {
1290+
server.Status.State = metalv1alpha1.ServerStateAvailable
1291+
})).Should(Succeed())
1292+
12461293
// should reconcile again from the Applied state when the settings has been changed
12471294
Eventually(Update(biosSettings, func() {
12481295
biosSettings.Spec.SettingsFlow[1].Settings = map[string]string{"PowerProfile": "OsDbpm"}
@@ -1261,6 +1308,9 @@ var _ = Describe("BIOSSettings Sequence Controller", func() {
12611308

12621309
By("Deleting the BIOSSettings")
12631310
Expect(k8sClient.Delete(ctx, biosSettings)).To(Succeed())
1311+
Eventually(Object(server)).Should(
1312+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
1313+
)
12641314
})
12651315

12661316
It("should successfully apply sequence of settings when the names and priority changed, before the settings update was issued on server", func(ctx SpecContext) {
@@ -1354,6 +1404,9 @@ var _ = Describe("BIOSSettings Sequence Controller", func() {
13541404

13551405
By("Deleting the BIOSSetting")
13561406
Expect(k8sClient.Delete(ctx, biosSettings)).To(Succeed())
1407+
Eventually(Object(server)).Should(
1408+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
1409+
)
13571410
})
13581411
})
13591412

internal/controller/biossettingsset_controller_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,15 @@ var _ = Describe("BIOSSettingsSet Controller", func() {
216216
Eventually(Get(biosSettings03)).Should(Satisfy(apierrors.IsNotFound))
217217
Expect(k8sClient.Delete(ctx, biosSettings02)).To(Succeed())
218218
Eventually(Get(biosSettings02)).Should(Satisfy(apierrors.IsNotFound))
219+
Eventually(Object(server01)).Should(
220+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
221+
)
222+
Eventually(Object(server02)).Should(
223+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
224+
)
225+
Eventually(Object(server03)).Should(
226+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
227+
)
219228
})
220229

221230
It("Should successfully reconcile the resource when server are deleted/created", func(ctx SpecContext) {
@@ -386,5 +395,14 @@ var _ = Describe("BIOSSettingsSet Controller", func() {
386395
Eventually(Get(biosSettings02)).Should(Satisfy(apierrors.IsNotFound))
387396
Expect(k8sClient.Delete(ctx, biosSettings03)).To(Succeed())
388397
Eventually(Get(biosSettings03)).Should(Satisfy(apierrors.IsNotFound))
398+
Eventually(Object(server01)).Should(
399+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
400+
)
401+
Eventually(Object(server02)).Should(
402+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
403+
)
404+
Eventually(Object(server03)).Should(
405+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
406+
)
389407
})
390408
})

internal/controller/biosversion_controller_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ var _ = Describe("BIOSVersion Controller", func() {
123123
By("Ensuring that the BiosVersion has been removed")
124124
Eventually(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
125125
Consistently(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
126+
Eventually(Object(server)).Should(
127+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
128+
)
126129
})
127130

128131
It("Should successfully Start and monitor Upgrade task to completion", func(ctx SpecContext) {
@@ -223,6 +226,9 @@ var _ = Describe("BIOSVersion Controller", func() {
223226
By("Ensuring that the BiosVersion has been removed")
224227
Eventually(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
225228
Consistently(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
229+
Eventually(Object(server)).Should(
230+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
231+
)
226232
})
227233

228234
It("Should upgrade servers BIOS when in reserved state", func(ctx SpecContext) {
@@ -361,6 +367,10 @@ var _ = Describe("BIOSVersion Controller", func() {
361367

362368
// cleanup
363369
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
370+
Eventually(Object(server)).Should(SatisfyAll(
371+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
372+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
373+
))
364374
})
365375

366376
It("Should allow retry using annotation", func(ctx SpecContext) {
@@ -402,6 +412,9 @@ var _ = Describe("BIOSVersion Controller", func() {
402412

403413
// cleanup
404414
Expect(k8sClient.Delete(ctx, biosVersion)).To(Succeed())
415+
Eventually(Object(server)).Should(
416+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
417+
)
405418
})
406419
})
407420

@@ -568,6 +581,9 @@ var _ = Describe("BIOSVersion Controller with BMCRef BMC", func() {
568581
By("Ensuring that the BiosVersion has been removed")
569582
Eventually(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
570583
Consistently(Get(biosVersion)).Should(Satisfy(apierrors.IsNotFound))
584+
Eventually(Object(server)).Should(
585+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
586+
)
571587
})
572588
})
573589

internal/controller/biosversionset_controller_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,15 @@ var _ = Describe("BIOSVersionSet Controller", func() {
224224
// cleanup
225225
Expect(k8sClient.Delete(ctx, biosVersion02)).To(Succeed())
226226
Expect(k8sClient.Delete(ctx, biosVersion03)).To(Succeed())
227+
Eventually(Object(server01)).Should(
228+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
229+
)
230+
Eventually(Object(server02)).Should(
231+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
232+
)
233+
Eventually(Object(server03)).Should(
234+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
235+
)
227236
})
228237

229238
It("Should successfully reconcile the resource when BMC are deleted/created", func(ctx SpecContext) {
@@ -385,5 +394,14 @@ var _ = Describe("BIOSVersionSet Controller", func() {
385394
Expect(k8sClient.Delete(ctx, biosVersion01)).To(Succeed())
386395
Expect(k8sClient.Delete(ctx, biosVersion02)).To(Succeed())
387396
Expect(k8sClient.Delete(ctx, biosVersion03)).To(Succeed())
397+
Eventually(Object(server01)).Should(
398+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
399+
)
400+
Eventually(Object(server02)).Should(
401+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
402+
)
403+
Eventually(Object(server03)).Should(
404+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
405+
)
388406
})
389407
})

internal/controller/bmcsettings_controller_test.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,14 @@ var _ = Describe("BMCSettings Controller", func() {
202202
HaveField("Status.State", metalv1alpha1.BMCSettingsStateApplied),
203203
))
204204

205+
By("Ensuring that the Maintenance resource has been deleted")
206+
var serverMaintenanceList metalv1alpha1.ServerMaintenanceList
207+
Eventually(ObjectList(&serverMaintenanceList)).Should(HaveField("Items", BeEmpty()))
208+
Consistently(ObjectList(&serverMaintenanceList)).Should(HaveField("Items", BeEmpty()))
209+
Consistently(Object(bmcSettings)).Should(SatisfyAll(
210+
HaveField("Spec.ServerMaintenanceRefs", BeNil()),
211+
))
212+
205213
By("Deleting the BMCSettings")
206214
Expect(k8sClient.Delete(ctx, bmcSettings)).To(Succeed())
207215

@@ -211,9 +219,9 @@ var _ = Describe("BMCSettings Controller", func() {
211219
))
212220

213221
// cleanup
214-
Eventually(UpdateStatus(server, func() {
215-
server.Status.State = metalv1alpha1.ServerStateAvailable
216-
})).Should(Succeed())
222+
Eventually(Object(server)).Should(
223+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
224+
)
217225
})
218226

219227
It("Should create maintenance and wait for its approval before applying settings", func(ctx SpecContext) {
@@ -336,6 +344,10 @@ var _ = Describe("BMCSettings Controller", func() {
336344

337345
// cleanup
338346
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
347+
Eventually(Object(server)).Should(SatisfyAll(
348+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
349+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
350+
))
339351
})
340352

341353
It("Should wait for upgrade and reconcile BMCSettings version is correct", func(ctx SpecContext) {
@@ -428,6 +440,10 @@ var _ = Describe("BMCSettings Controller", func() {
428440
Eventually(Object(bmc)).Should(SatisfyAll(
429441
HaveField("Spec.BMCSettingRef", BeNil()),
430442
))
443+
444+
Eventually(Object(server)).Should(
445+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
446+
)
431447
})
432448

433449
It("Should allow retry using annotation", func(ctx SpecContext) {
@@ -478,5 +494,8 @@ var _ = Describe("BMCSettings Controller", func() {
478494

479495
// cleanup
480496
Expect(k8sClient.Delete(ctx, bmcSettings)).To(Succeed())
497+
Eventually(Object(server)).Should(
498+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
499+
)
481500
})
482501
})

internal/controller/bmcversion_controller_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ var _ = Describe("BMCVersion Controller", func() {
134134
By("Ensuring that the BMCVersion has been removed")
135135
Eventually(Get(bmcVersion)).Should(Satisfy(apierrors.IsNotFound))
136136
Consistently(Get(bmcVersion)).Should(Satisfy(apierrors.IsNotFound))
137+
Eventually(Object(server)).Should(
138+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
139+
)
137140
})
138141

139142
It("Should successfully Start and monitor Upgrade task to completion", func(ctx SpecContext) {
@@ -231,6 +234,9 @@ var _ = Describe("BMCVersion Controller", func() {
231234
By("Ensuring that the BMCVersion has been removed")
232235
Eventually(Get(bmcVersion)).Should(Satisfy(apierrors.IsNotFound))
233236
Consistently(Get(bmcVersion)).Should(Satisfy(apierrors.IsNotFound))
237+
Eventually(Object(server)).Should(
238+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
239+
)
234240
})
235241

236242
It("Should upgrade servers BMC when server in reserved state", func(ctx SpecContext) {
@@ -364,6 +370,10 @@ var _ = Describe("BMCVersion Controller", func() {
364370

365371
// cleanup
366372
Expect(k8sClient.Delete(ctx, serverClaim)).To(Succeed())
373+
Eventually(Object(server)).Should(SatisfyAll(
374+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateMaintenance))),
375+
HaveField("Status.State", Not(Equal(metalv1alpha1.ServerStateReserved))),
376+
))
367377
})
368378

369379
It("Should allow retry using annotation", func(ctx SpecContext) {

internal/controller/bmcversionset_controller.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,15 @@ func (r *BMCVersionSetReconciler) patchBMCVersionfromTemplate(
280280
continue
281281
}
282282
opResult, err := controllerutil.CreateOrPatch(ctx, r.Client, &bmcVersion, func() error {
283-
bmcVersion.Spec.BMCVersionTemplate = *bmcVersionTemplate.DeepCopy()
283+
if bmcVersionTemplate.ServerMaintenanceRefs != nil {
284+
bmcVersion.Spec.BMCVersionTemplate = *bmcVersionTemplate.DeepCopy()
285+
} else {
286+
// preserve existing serverMaintenanceRefs if not set in the template
287+
// temporary solution to avoid accidental deletion of Refs and unit test failure until PR #515 is merged
288+
existingServerMaintenanceRefs := bmcVersion.Spec.ServerMaintenanceRefs
289+
bmcVersion.Spec.BMCVersionTemplate = *bmcVersionTemplate.DeepCopy()
290+
bmcVersion.Spec.ServerMaintenanceRefs = existingServerMaintenanceRefs
291+
}
284292
return nil
285293
}) //nolint:errcheck
286294
if err != nil {

0 commit comments

Comments
 (0)