@@ -121,8 +121,35 @@ var _ = Describe("Main", func() {
121121 }) // Generic Validator
122122
123123 Describe ("CLI argument validation" , func () {
124+ type testCase struct {
125+ Param string
126+ Domain string
127+ ExpError bool
128+ }
129+
124130 var mockFlags * flag.FlagSet
125131 var gatewayCtlrName string
132+
133+ tester := func (t testCase ) {
134+ err := mockFlags .Set (gatewayCtlrName , t .Param )
135+ Expect (err ).ToNot (HaveOccurred ())
136+
137+ v := GatewayControllerParam (domain , t .Domain )
138+ Expect (v .V ).ToNot (BeNil ())
139+
140+ err = v .V (mockFlags )
141+ if t .ExpError {
142+ Expect (err ).To (HaveOccurred ())
143+ } else {
144+ Expect (err ).ToNot (HaveOccurred ())
145+ }
146+ }
147+ runner := func (table []testCase ) {
148+ for i := range table {
149+ tester (table [i ])
150+ }
151+ }
152+
126153 BeforeEach (func () {
127154 domain = "k8s-gateway.nginx.org"
128155 gatewayCtlrName = "gateway-ctlr-name"
@@ -136,97 +163,75 @@ var _ = Describe("Main", func() {
136163 mockFlags = nil
137164 })
138165 It ("should parse full gateway-ctlr-name" , func () {
139- err := mockFlags .Set (gatewayCtlrName , "k8s-gateway.nginx.org/nginx-gateway/my-gateway" )
140- Expect (err ).ToNot (HaveOccurred ())
141-
142- v := GatewayControllerParam (domain , "nginx-gateway" )
143- Expect (v .V ).ToNot (BeNil ())
144-
145- err = v .V (mockFlags )
146- Expect (err ).ToNot (HaveOccurred ())
166+ t := testCase {
167+ "k8s-gateway.nginx.org/nginx-gateway/my-gateway" ,
168+ "nginx-gateway" ,
169+ false ,
170+ }
171+ tester (t )
147172 }) // should parse full gateway-ctlr-name
148173
149174 It ("should fail with too many path elements" , func () {
150- err := mockFlags .Set (gatewayCtlrName , "k8s-gateway.nginx.org/nginx-gateway/my-gateway/broken" )
151- Expect (err ).ToNot (HaveOccurred ())
152-
153- v := GatewayControllerParam (domain , "nginx-gateway" )
154- Expect (v .V ).ToNot (BeNil ())
155-
156- err = v .V (mockFlags )
157- Expect (err ).To (HaveOccurred ())
175+ t := testCase {
176+ "k8s-gateway.nginx.org/nginx-gateway/my-gateway/broken" ,
177+ "nginx-gateway" ,
178+ true ,
179+ }
180+ tester (t )
158181 }) // should fail with too many path elements
159182
160183 It ("should fail with too few path elements" , func () {
161- err := mockFlags .Set (gatewayCtlrName , "nginx-gateway/my-gateway" )
162- Expect (err ).ToNot (HaveOccurred ())
163-
164- v := GatewayControllerParam (domain , "nginx-gateway" )
165- Expect (v .V ).ToNot (BeNil ())
166-
167- err = v .V (mockFlags )
168- Expect (err ).To (HaveOccurred ())
169-
170- err = mockFlags .Set (gatewayCtlrName , "my-gateway" )
171- Expect (err ).ToNot (HaveOccurred ())
172-
173- v = GatewayControllerParam (domain , "nginx-gateway" )
174- Expect (v .V ).ToNot (BeNil ())
184+ table := []testCase {
185+ {
186+ Param : "nginx-gateway/my-gateway" ,
187+ Domain : "nginx-gateway" ,
188+ ExpError : true ,
189+ },
190+ {
191+ Param : "my-gateway" ,
192+ Domain : "nginx-gateway" ,
193+ ExpError : true ,
194+ },
195+ }
175196
176- err = v .V (mockFlags )
177- Expect (err ).To (HaveOccurred ())
197+ runner (table )
178198 }) // should fail with too few path elements
179199
180200 It ("should verify constraints" , func () {
181- // bad domain
182- err := mockFlags .Set (gatewayCtlrName , "invalid-domain/nginx-gateway/my-gateway" )
183- Expect (err ).ToNot (HaveOccurred ())
184-
185- v := GatewayControllerParam (domain , "nginx-gateway" )
186- Expect (v .V ).ToNot (BeNil ())
187-
188- err = v .V (mockFlags )
189- Expect (err ).To (HaveOccurred ())
190-
191- // bad domain
192- err = mockFlags .Set (gatewayCtlrName , "/default/my-gateway" )
193- Expect (err ).ToNot (HaveOccurred ())
194-
195- v = GatewayControllerParam (domain , "nginx-gateway" )
196- Expect (v .V ).ToNot (BeNil ())
197-
198- err = v .V (mockFlags )
199- Expect (err ).To (HaveOccurred ())
200-
201- // bad namespace
202- err = mockFlags .Set (gatewayCtlrName , "k8s-gateway.nginx.org/default/my-gateway" )
203- Expect (err ).ToNot (HaveOccurred ())
204-
205- v = GatewayControllerParam (domain , "nginx-gateway" )
206- Expect (v .V ).ToNot (BeNil ())
207-
208- err = v .V (mockFlags )
209- Expect (err ).To (HaveOccurred ())
210-
211- // bad namespace
212- err = mockFlags .Set (gatewayCtlrName , "k8s-gateway.nginx.org//my-gateway" )
213- Expect (err ).ToNot (HaveOccurred ())
214-
215- v = GatewayControllerParam (domain , "nginx-gateway" )
216- Expect (v .V ).ToNot (BeNil ())
217-
218- err = v .V (mockFlags )
219- Expect (err ).To (HaveOccurred ())
220-
221- // bad name
222- err = mockFlags .Set (gatewayCtlrName , "k8s-gateway.nginx.org/default/" )
223- Expect (err ).ToNot (HaveOccurred ())
224-
225- v = GatewayControllerParam (domain , "nginx-gateway" )
226- Expect (v .V ).ToNot (BeNil ())
201+ table := []testCase {
202+ {
203+ // bad domain
204+ Param : "invalid-domain/nginx-gateway/my-gateway" ,
205+ Domain : "nginx-gateway" ,
206+ ExpError : true ,
207+ },
208+ {
209+ // bad domain
210+ Param : "/default/my-gateway" ,
211+ Domain : "nginx-gateway" ,
212+ ExpError : true ,
213+ },
214+ {
215+ // bad namespace
216+ Param : "k8s-gateway.nginx.org/default/my-gateway" ,
217+ Domain : "nginx-gateway" ,
218+ ExpError : true ,
219+ },
220+ {
221+ // bad namespace
222+ Param : "k8s-gateway.nginx.org//my-gateway" ,
223+ Domain : "nginx-gateway" ,
224+ ExpError : true ,
225+ },
226+ {
227+ // bad name
228+ Param : "k8s-gateway.nginx.org/default/" ,
229+ Domain : "nginx-gateway" ,
230+ ExpError : true ,
231+ },
232+ }
227233
228- err = v .V (mockFlags )
229- Expect (err ).To (HaveOccurred ())
234+ runner (table )
230235 }) // should verify constraints
231236 }) // CLI argument validation
232237}) // end Main
0 commit comments