@@ -36,7 +36,6 @@ import (
36
36
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
37
37
"k8s.io/apimachinery/pkg/runtime"
38
38
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
39
- k8sclient "k8s.io/client-go/kubernetes"
40
39
fakeclient "k8s.io/client-go/kubernetes/fake"
41
40
fakecorev1client "k8s.io/client-go/kubernetes/typed/core/v1/fake"
42
41
clienttesting "k8s.io/client-go/testing"
@@ -104,12 +103,24 @@ func newFakeNfdAPIController(client *fakenfdclient.Clientset) *nfdController {
104
103
return c
105
104
}
106
105
107
- func newFakeMaster (cli k8sclient.Interface ) * nfdMaster {
108
- return & nfdMaster {
109
- nodeName : testNodeName ,
110
- config : & NFDConfig {},
111
- k8sClient : cli ,
106
+ func withNodeName (nodeName string ) NfdMasterOption {
107
+ return & nfdMasterOpt {f : func (n * nfdMaster ) { n .nodeName = nodeName }}
108
+ }
109
+
110
+ func withConfig (config * NFDConfig ) NfdMasterOption {
111
+ return & nfdMasterOpt {f : func (n * nfdMaster ) { n .config = config }}
112
+ }
113
+
114
+ func newFakeMaster (opts ... NfdMasterOption ) * nfdMaster {
115
+ defaultOpts := []NfdMasterOption {
116
+ withNodeName (testNodeName ),
117
+ withConfig (& NFDConfig {}),
118
+ }
119
+ m , err := NewNfdMaster (append (defaultOpts , opts ... )... )
120
+ if err != nil {
121
+ panic (err )
112
122
}
123
+ return m .(* nfdMaster )
113
124
}
114
125
115
126
func TestUpdateNodeObject (t * testing.T ) {
@@ -153,7 +164,7 @@ func TestUpdateNodeObject(t *testing.T) {
153
164
154
165
// Create fake api client and initialize NfdMaster instance
155
166
fakeCli := fakeclient .NewSimpleClientset (testNode )
156
- fakeMaster := newFakeMaster (fakeCli )
167
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
157
168
158
169
Convey ("When I successfully update the node with feature labels" , func () {
159
170
err := fakeMaster .updateNodeObject (testNode , featureLabels , featureAnnotations , featureExtResources , nil )
@@ -205,7 +216,7 @@ func TestUpdateMasterNode(t *testing.T) {
205
216
206
217
Convey ("When update operation succeeds" , func () {
207
218
fakeCli := fakeclient .NewSimpleClientset (testNode )
208
- fakeMaster := newFakeMaster (fakeCli )
219
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
209
220
err := fakeMaster .updateMasterNode ()
210
221
Convey ("No error should be returned" , func () {
211
222
So (err , ShouldBeNil )
@@ -220,7 +231,7 @@ func TestUpdateMasterNode(t *testing.T) {
220
231
221
232
Convey ("When getting API node object fails" , func () {
222
233
fakeCli := fakeclient .NewSimpleClientset (testNode )
223
- fakeMaster := newFakeMaster (fakeCli )
234
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
224
235
fakeMaster .nodeName = "does-not-exist"
225
236
226
237
err := fakeMaster .updateMasterNode ()
@@ -235,7 +246,7 @@ func TestUpdateMasterNode(t *testing.T) {
235
246
fakeCli .CoreV1 ().(* fakecorev1client.FakeCoreV1 ).PrependReactor ("patch" , "nodes" , func (action clienttesting.Action ) (handled bool , ret runtime.Object , err error ) {
236
247
return true , & v1.Node {}, fakeErr
237
248
})
238
- fakeMaster := newFakeMaster (fakeCli )
249
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
239
250
240
251
err := fakeMaster .updateMasterNode ()
241
252
Convey ("An error should be returned" , func () {
@@ -247,7 +258,7 @@ func TestUpdateMasterNode(t *testing.T) {
247
258
248
259
func TestAddingExtResources (t * testing.T ) {
249
260
Convey ("When adding extended resources" , t , func () {
250
- fakeMaster := newFakeMaster (nil )
261
+ fakeMaster := newFakeMaster ()
251
262
Convey ("When there are no matching labels" , func () {
252
263
testNode := newTestNode ()
253
264
resourceLabels := ExtendedResources {}
@@ -290,7 +301,7 @@ func TestAddingExtResources(t *testing.T) {
290
301
291
302
func TestRemovingExtResources (t * testing.T ) {
292
303
Convey ("When removing extended resources" , t , func () {
293
- fakeMaster := newFakeMaster (nil )
304
+ fakeMaster := newFakeMaster ()
294
305
Convey ("When none are removed" , func () {
295
306
testNode := newTestNode ()
296
307
resourceLabels := ExtendedResources {nfdv1alpha1 .FeatureLabelNs + "/feature-1" : "1" , nfdv1alpha1 .FeatureLabelNs + "/feature-2" : "2" }
@@ -339,7 +350,7 @@ func TestSetLabels(t *testing.T) {
339
350
340
351
Convey ("When node update succeeds" , func () {
341
352
fakeCli := fakeclient .NewSimpleClientset (testNode )
342
- fakeMaster := newFakeMaster (fakeCli )
353
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
343
354
344
355
_ , err := fakeMaster .SetLabels (ctx , req )
345
356
Convey ("No error should be returned" , func () {
@@ -354,11 +365,13 @@ func TestSetLabels(t *testing.T) {
354
365
355
366
Convey ("When -resource-labels is specified" , func () {
356
367
fakeCli := fakeclient .NewSimpleClientset (testNode )
357
- fakeMaster := newFakeMaster (fakeCli )
358
- fakeMaster .config .ResourceLabels = map [string ]struct {}{
359
- "feature.node.kubernetes.io/feature-3" : {},
360
- "feature-1" : {},
361
- }
368
+ fakeMaster := newFakeMaster (
369
+ WithKubernetesClient (fakeCli ),
370
+ withConfig (& NFDConfig {
371
+ ResourceLabels : map [string ]struct {}{
372
+ "feature.node.kubernetes.io/feature-3" : {},
373
+ "feature-1" : {}},
374
+ }))
362
375
363
376
_ , err := fakeMaster .SetLabels (ctx , req )
364
377
Convey ("Error is nil" , func () {
@@ -374,7 +387,7 @@ func TestSetLabels(t *testing.T) {
374
387
375
388
Convey ("When node update fails" , func () {
376
389
fakeCli := fakeclient .NewSimpleClientset (testNode )
377
- fakeMaster := newFakeMaster (fakeCli )
390
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
378
391
379
392
fakeErr := errors .New ("Fake error when patching node" )
380
393
fakeCli .CoreV1 ().(* fakecorev1client.FakeCoreV1 ).PrependReactor ("patch" , "nodes" , func (action clienttesting.Action ) (handled bool , ret runtime.Object , err error ) {
@@ -388,7 +401,7 @@ func TestSetLabels(t *testing.T) {
388
401
389
402
Convey ("With '-no-publish'" , func () {
390
403
fakeCli := fakeclient .NewSimpleClientset (testNode )
391
- fakeMaster := newFakeMaster (fakeCli )
404
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
392
405
393
406
fakeMaster .config .NoPublish = true
394
407
_ , err := fakeMaster .SetLabels (ctx , req )
@@ -400,7 +413,7 @@ func TestSetLabels(t *testing.T) {
400
413
}
401
414
402
415
func TestFilterLabels (t * testing.T ) {
403
- fakeMaster := newFakeMaster (nil )
416
+ fakeMaster := newFakeMaster ()
404
417
fakeMaster .config .ExtraLabelNs = map [string ]struct {}{"example.io" : {}}
405
418
fakeMaster .deniedNs = deniedNs {
406
419
normal : map [string ]struct {}{"" : struct {}{}, "kubernetes.io" : struct {}{}, "denied.ns" : struct {}{}},
@@ -571,9 +584,7 @@ func TestRemoveLabelsWithPrefix(t *testing.T) {
571
584
572
585
func TestConfigParse (t * testing.T ) {
573
586
Convey ("When parsing configuration" , t , func () {
574
- m , err := NewNfdMaster (& Args {})
575
- So (err , ShouldBeNil )
576
- master := m .(* nfdMaster )
587
+ master := newFakeMaster ()
577
588
overrides := `{"noPublish": true, "enableTaints": true, "extraLabelNs": ["added.ns.io","added.kubernetes.io"], "denyLabelNs": ["denied.ns.io","denied.kubernetes.io"], "resourceLabels": ["vendor-1.com/feature-1","vendor-2.io/feature-2"], "labelWhiteList": "foo"}`
578
589
579
590
Convey ("and no core cmdline flags have been specified" , func () {
@@ -684,18 +695,16 @@ extraLabelNs: ["added.ns.io"]
684
695
os .Exit (1 )
685
696
}
686
697
_ = features .NFDMutableFeatureGate .OverrideDefault (features .NodeFeatureAPI , false )
687
- m , err := NewNfdMaster (& Args {
698
+ master := newFakeMaster ( WithArgs (& Args {
688
699
ConfigFile : configFile ,
689
700
Overrides : ConfigOverrideArgs {
690
701
NoPublish : & noPublish ,
691
702
},
692
- })
693
- So (err , ShouldBeNil )
694
- master := m .(* nfdMaster )
703
+ }))
695
704
696
705
Convey ("config file updates should take effect" , func () {
697
- go func () { _ = m .Run () }()
698
- defer m .Stop ()
706
+ go func () { _ = master .Run () }()
707
+ defer master .Stop ()
699
708
// Check initial config
700
709
time .Sleep (10 * time .Second )
701
710
So (func () interface {} { return master .config .ExtraLabelNs },
@@ -759,7 +768,7 @@ func newTestNodeList() *corev1.NodeList {
759
768
760
769
func BenchmarkNfdAPIUpdateAllNodes (b * testing.B ) {
761
770
fakeCli := fakeclient .NewSimpleClientset (newTestNodeList ())
762
- fakeMaster := newFakeMaster (fakeCli )
771
+ fakeMaster := newFakeMaster (WithKubernetesClient ( fakeCli ) )
763
772
fakeMaster .nfdController = newFakeNfdAPIController (fakenfdclient .NewSimpleClientset ())
764
773
765
774
nodeUpdaterPool := newNodeUpdaterPool (fakeMaster )
0 commit comments