@@ -100,8 +100,10 @@ func (m *mockValidMEOutputGetter) GetExecOutput(req []byte, path string) ([]byte
100
100
return json .Marshal (response )
101
101
}
102
102
103
- const externalPlugin = "myexternalplugin.sh"
104
- const floatVal = "float"
103
+ const (
104
+ externalPlugin = "myexternalplugin.sh"
105
+ floatVal = "float"
106
+ )
105
107
106
108
var _ = Describe ("Run external plugin using Scaffold" , func () {
107
109
Context ("with valid mock values" , func () {
@@ -136,7 +138,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
136
138
Expect (err ).To (BeNil ())
137
139
138
140
args = []string {"--domain" , "example.com" }
139
-
140
141
})
141
142
142
143
AfterEach (func () {
@@ -185,7 +186,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
185
186
err = c .Scaffold (fs )
186
187
Expect (err ).To (BeNil ())
187
188
})
188
-
189
189
})
190
190
191
191
Context ("with invalid mock values of GetExecOutput() and GetCurrentDir()" , func () {
@@ -204,7 +204,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
204
204
205
205
pluginFileName = externalPlugin
206
206
args = []string {"--domain" , "example.com" }
207
-
208
207
})
209
208
210
209
It ("should return error upon running init subcommand on the external plugin" , func () {
@@ -241,7 +240,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
241
240
err = e .Scaffold (fs )
242
241
Expect (err ).NotTo (BeNil ())
243
242
Expect (err .Error ()).To (ContainSubstring ("error getting current directory" ))
244
-
245
243
})
246
244
247
245
It ("should return error upon running create api subcommand on the external plugin" , func () {
@@ -278,7 +276,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
278
276
err = c .Scaffold (fs )
279
277
Expect (err ).NotTo (BeNil ())
280
278
Expect (err .Error ()).To (ContainSubstring ("error getting current directory" ))
281
-
282
279
})
283
280
})
284
281
@@ -437,14 +434,50 @@ var _ = Describe("Run external plugin using Scaffold", func() {
437
434
438
435
checkFlagset ()
439
436
})
437
+ })
440
438
439
+ Context ("Flag Parsing Filter Functions" , func () {
440
+ It ("gvk(Arg/Flag)Filter should filter out (--)group, (--)version, (--)kind" , func () {
441
+ for _ , toBeFiltered := range []string {
442
+ "group" , "version" , "kind" ,
443
+ } {
444
+ Expect (gvkArgFilter ("--" + toBeFiltered )).To (BeFalse ())
445
+ Expect (gvkArgFilter (toBeFiltered )).To (BeFalse ())
446
+ Expect (gvkFlagFilter (external.Flag {Name : "--" + toBeFiltered })).To (BeFalse ())
447
+ Expect (gvkFlagFilter (external.Flag {Name : "--" + toBeFiltered })).To (BeFalse ())
448
+ }
449
+ Expect (gvkArgFilter ("somerandomflag" )).To (BeTrue ())
450
+ Expect (gvkFlagFilter (external.Flag {Name : "somerandomflag" })).To (BeTrue ())
451
+ })
452
+
453
+ It ("helpArgFilter should filter out (--)help" , func () {
454
+ Expect (helpArgFilter ("--help" )).To (BeFalse ())
455
+ Expect (helpArgFilter ("help" )).To (BeFalse ())
456
+ Expect (helpArgFilter ("somerandomflag" )).To (BeTrue ())
457
+ Expect (helpFlagFilter (external.Flag {Name : "--help" })).To (BeFalse ())
458
+ Expect (helpFlagFilter (external.Flag {Name : "help" })).To (BeFalse ())
459
+ Expect (helpFlagFilter (external.Flag {Name : "somerandomflag" })).To (BeTrue ())
460
+ })
441
461
})
442
462
443
463
Context ("Flag Parsing Helper Functions" , func () {
444
464
var (
445
- fs * pflag.FlagSet
446
- args = []string {"--domain" , "something.com" , "--boolean" , "--another" , "flag" , "--help" }
447
- flags []external.Flag
465
+ fs * pflag.FlagSet
466
+ args = []string {
467
+ "--domain" , "something.com" ,
468
+ "--boolean" ,
469
+ "--another" , "flag" ,
470
+ "--help" ,
471
+ "--group" , "somegroup" ,
472
+ "--kind" , "somekind" ,
473
+ "--version" , "someversion" ,
474
+ }
475
+ forbidden = []string {
476
+ "help" , "group" , "kind" , "version" ,
477
+ }
478
+ flags []external.Flag
479
+ argFilters []argFilterFunc
480
+ externalFlagFilters []externalFlagFilterFunc
448
481
)
449
482
450
483
BeforeEach (func () {
@@ -454,6 +487,13 @@ var _ = Describe("Run external plugin using Scaffold", func() {
454
487
455
488
flags = make ([]external.Flag , len (flagsToAppend ))
456
489
copy (flags , flagsToAppend )
490
+
491
+ argFilters = []argFilterFunc {
492
+ gvkArgFilter , helpArgFilter ,
493
+ }
494
+ externalFlagFilters = []externalFlagFilterFunc {
495
+ gvkFlagFilter , helpFlagFilter ,
496
+ }
457
497
})
458
498
459
499
It ("isBooleanFlag should return true if boolean flag provided at index" , func () {
@@ -464,11 +504,11 @@ var _ = Describe("Run external plugin using Scaffold", func() {
464
504
Expect (isBooleanFlag (0 , args )).To (BeFalse ())
465
505
})
466
506
467
- It ("bindAllFlags should bind all flags except for `--help` " , func () {
507
+ It ("bindAllFlags should bind all flags" , func () {
468
508
usage := "Kubebuilder could not validate this flag with the external plugin. " +
469
509
"Consult the external plugin documentation for more information."
470
510
471
- bindAllFlags (fs , args )
511
+ bindAllFlags (fs , filterArgs ( args , argFilters ) )
472
512
Expect (fs .HasFlags ()).To (BeTrue ())
473
513
Expect (fs .Lookup ("domain" )).NotTo (BeNil ())
474
514
Expect (fs .Lookup ("domain" ).Value .Type ()).To (Equal ("string" ))
@@ -479,15 +519,20 @@ var _ = Describe("Run external plugin using Scaffold", func() {
479
519
Expect (fs .Lookup ("another" )).NotTo (BeNil ())
480
520
Expect (fs .Lookup ("another" ).Value .Type ()).To (Equal ("string" ))
481
521
Expect (fs .Lookup ("another" ).Usage ).To (Equal (usage ))
482
- Expect (fs .Lookup ("help" )).To (BeNil ())
522
+
523
+ By ("bindAllFlags not have bound any forbidden flag after filtering" )
524
+ for i := range forbidden {
525
+ Expect (fs .Lookup (forbidden [i ])).To (BeNil ())
526
+ }
483
527
})
484
528
485
529
It ("bindSpecificFlags should bind all flags in given []Flag" , func () {
486
- bindSpecificFlags (fs , flags )
530
+ filteredFlags := filterFlags (flags , externalFlagFilters )
531
+ bindSpecificFlags (fs , filteredFlags )
487
532
488
533
Expect (fs .HasFlags ()).To (BeTrue ())
489
534
490
- for _ , flag := range flags {
535
+ for _ , flag := range filteredFlags {
491
536
Expect (fs .Lookup (flag .Name )).NotTo (BeNil ())
492
537
// we parse floats as float64 Go type so this check will account for that
493
538
if flag .Type != floatVal {
@@ -498,6 +543,11 @@ var _ = Describe("Run external plugin using Scaffold", func() {
498
543
Expect (fs .Lookup (flag .Name ).Usage ).To (Equal (flag .Usage ))
499
544
Expect (fs .Lookup (flag .Name ).DefValue ).To (Equal (flag .Default ))
500
545
}
546
+
547
+ By ("bindSpecificFlags not have bound any forbidden flag after filtering" )
548
+ for i := range forbidden {
549
+ Expect (fs .Lookup (forbidden [i ])).To (BeNil ())
550
+ }
501
551
})
502
552
})
503
553
@@ -629,7 +679,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
629
679
checkMetadata ()
630
680
})
631
681
})
632
-
633
682
})
634
683
635
684
func getFlags () []external.Flag {
0 commit comments