@@ -100,8 +100,10 @@ func (m *mockValidMEOutputGetter) GetExecOutput(req []byte, path string) ([]byte
100100 return json .Marshal (response )
101101}
102102
103- const externalPlugin = "myexternalplugin.sh"
104- const floatVal = "float"
103+ const (
104+ externalPlugin = "myexternalplugin.sh"
105+ floatVal = "float"
106+ )
105107
106108var _ = Describe ("Run external plugin using Scaffold" , func () {
107109 Context ("with valid mock values" , func () {
@@ -136,7 +138,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
136138 Expect (err ).To (BeNil ())
137139
138140 args = []string {"--domain" , "example.com" }
139-
140141 })
141142
142143 AfterEach (func () {
@@ -185,7 +186,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
185186 err = c .Scaffold (fs )
186187 Expect (err ).To (BeNil ())
187188 })
188-
189189 })
190190
191191 Context ("with invalid mock values of GetExecOutput() and GetCurrentDir()" , func () {
@@ -204,7 +204,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
204204
205205 pluginFileName = externalPlugin
206206 args = []string {"--domain" , "example.com" }
207-
208207 })
209208
210209 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() {
241240 err = e .Scaffold (fs )
242241 Expect (err ).NotTo (BeNil ())
243242 Expect (err .Error ()).To (ContainSubstring ("error getting current directory" ))
244-
245243 })
246244
247245 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() {
278276 err = c .Scaffold (fs )
279277 Expect (err ).NotTo (BeNil ())
280278 Expect (err .Error ()).To (ContainSubstring ("error getting current directory" ))
281-
282279 })
283280 })
284281
@@ -437,14 +434,50 @@ var _ = Describe("Run external plugin using Scaffold", func() {
437434
438435 checkFlagset ()
439436 })
437+ })
440438
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+ })
441461 })
442462
443463 Context ("Flag Parsing Helper Functions" , func () {
444464 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
448481 )
449482
450483 BeforeEach (func () {
@@ -454,6 +487,13 @@ var _ = Describe("Run external plugin using Scaffold", func() {
454487
455488 flags = make ([]external.Flag , len (flagsToAppend ))
456489 copy (flags , flagsToAppend )
490+
491+ argFilters = []argFilterFunc {
492+ gvkArgFilter , helpArgFilter ,
493+ }
494+ externalFlagFilters = []externalFlagFilterFunc {
495+ gvkFlagFilter , helpFlagFilter ,
496+ }
457497 })
458498
459499 It ("isBooleanFlag should return true if boolean flag provided at index" , func () {
@@ -464,11 +504,11 @@ var _ = Describe("Run external plugin using Scaffold", func() {
464504 Expect (isBooleanFlag (0 , args )).To (BeFalse ())
465505 })
466506
467- It ("bindAllFlags should bind all flags except for `--help` " , func () {
507+ It ("bindAllFlags should bind all flags" , func () {
468508 usage := "Kubebuilder could not validate this flag with the external plugin. " +
469509 "Consult the external plugin documentation for more information."
470510
471- bindAllFlags (fs , args )
511+ bindAllFlags (fs , filterArgs ( args , argFilters ) )
472512 Expect (fs .HasFlags ()).To (BeTrue ())
473513 Expect (fs .Lookup ("domain" )).NotTo (BeNil ())
474514 Expect (fs .Lookup ("domain" ).Value .Type ()).To (Equal ("string" ))
@@ -479,15 +519,20 @@ var _ = Describe("Run external plugin using Scaffold", func() {
479519 Expect (fs .Lookup ("another" )).NotTo (BeNil ())
480520 Expect (fs .Lookup ("another" ).Value .Type ()).To (Equal ("string" ))
481521 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+ }
483527 })
484528
485529 It ("bindSpecificFlags should bind all flags in given []Flag" , func () {
486- bindSpecificFlags (fs , flags )
530+ filteredFlags := filterFlags (flags , externalFlagFilters )
531+ bindSpecificFlags (fs , filteredFlags )
487532
488533 Expect (fs .HasFlags ()).To (BeTrue ())
489534
490- for _ , flag := range flags {
535+ for _ , flag := range filteredFlags {
491536 Expect (fs .Lookup (flag .Name )).NotTo (BeNil ())
492537 // we parse floats as float64 Go type so this check will account for that
493538 if flag .Type != floatVal {
@@ -498,6 +543,11 @@ var _ = Describe("Run external plugin using Scaffold", func() {
498543 Expect (fs .Lookup (flag .Name ).Usage ).To (Equal (flag .Usage ))
499544 Expect (fs .Lookup (flag .Name ).DefValue ).To (Equal (flag .Default ))
500545 }
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+ }
501551 })
502552 })
503553
@@ -629,7 +679,6 @@ var _ = Describe("Run external plugin using Scaffold", func() {
629679 checkMetadata ()
630680 })
631681 })
632-
633682})
634683
635684func getFlags () []external.Flag {
0 commit comments