@@ -10,8 +10,6 @@ import (
1010 . "github.com/nginxinc/nginx-kubernetes-gateway/cmd/gateway"
1111)
1212
13- var domain string
14-
1513func MockValidator (name string , called * int , succeed bool ) ValidatorContext {
1614 return ValidatorContext {
1715 name ,
@@ -122,22 +120,25 @@ var _ = Describe("Main", func() {
122120
123121 Describe ("CLI argument validation" , func () {
124122 type testCase struct {
125- Param string
126- Domain string
127- ExpError bool
123+ Flag string
124+ Value string
125+ ValidatorContext ValidatorContext
126+ ExpError bool
128127 }
129128
129+ const (
130+ expectError = true
131+ expectSuccess = false
132+ )
133+
130134 var mockFlags * flag.FlagSet
131- var gatewayCtlrName string
132135
133136 tester := func (t testCase ) {
134- err := mockFlags .Set (gatewayCtlrName , t .Param )
137+ err := mockFlags .Set (t . Flag , t .Value )
135138 Expect (err ).ToNot (HaveOccurred ())
136139
137- v := GatewayControllerParam (domain , t .Domain )
138- Expect (v .V ).ToNot (BeNil ())
140+ err = t .ValidatorContext .V (mockFlags )
139141
140- err = v .V (mockFlags )
141142 if t .ExpError {
142143 Expect (err ).To (HaveOccurred ())
143144 } else {
@@ -150,88 +151,122 @@ var _ = Describe("Main", func() {
150151 }
151152 }
152153
153- BeforeEach (func () {
154- domain = "k8s-gateway.nginx.org"
155- gatewayCtlrName = "gateway-ctlr-name"
156-
157- mockFlags = flag .NewFlagSet ("mock" , flag .PanicOnError )
158- _ = mockFlags .String ("gateway-ctlr-name" , "" , "mock gateway-ctlr-name" )
159- err := mockFlags .Parse ([]string {})
160- Expect (err ).ToNot (HaveOccurred ())
161- })
162- AfterEach (func () {
163- mockFlags = nil
164- })
165- It ("should parse full gateway-ctlr-name" , func () {
166- t := testCase {
167- "k8s-gateway.nginx.org/nginx-gateway/my-gateway" ,
168- "nginx-gateway" ,
169- false ,
170- }
171- tester (t )
172- }) // should parse full gateway-ctlr-name
173-
174- It ("should fail with too many path elements" , func () {
175- t := testCase {
176- "k8s-gateway.nginx.org/nginx-gateway/my-gateway/broken" ,
177- "nginx-gateway" ,
178- true ,
154+ Describe ("gateway-ctlr-name validation" , func () {
155+ prepareTestCase := func (value string , expError bool ) testCase {
156+ return testCase {
157+ Flag : "gateway-ctlr-name" ,
158+ Value : value ,
159+ ValidatorContext : GatewayControllerParam ("k8s-gateway.nginx.org" , "nginx-gateway" ),
160+ ExpError : expError ,
161+ }
179162 }
180- tester (t )
181- }) // should fail with too many path elements
182163
183- It ("should fail with too few path elements" , func () {
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- }
164+ BeforeEach (func () {
165+ mockFlags = flag .NewFlagSet ("mock" , flag .PanicOnError )
166+ _ = mockFlags .String ("gateway-ctlr-name" , "" , "mock gateway-ctlr-name" )
167+ err := mockFlags .Parse ([]string {})
168+ Expect (err ).ToNot (HaveOccurred ())
169+ })
170+ AfterEach (func () {
171+ mockFlags = nil
172+ })
196173
197- runner (table )
198- }) // should fail with too few path elements
174+ It ("should parse full gateway-ctlr-name" , func () {
175+ t := prepareTestCase (
176+ "k8s-gateway.nginx.org/nginx-gateway/my-gateway" ,
177+ expectSuccess ,
178+ )
179+ tester (t )
180+ }) // should parse full gateway-ctlr-name
199181
200- It ("should verify constraints" , func () {
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- },
182+ It ("should fail with too many path elements" , func () {
183+ t := prepareTestCase (
184+ "k8s-gateway.nginx.org/nginx-gateway/my-gateway" ,
185+ expectSuccess )
186+ tester (t )
187+ }) // should fail with too many path elements
188+
189+ It ("should fail with too few path elements" , func () {
190+ table := []testCase {
191+ prepareTestCase (
192+ "nginx-gateway/my-gateway" ,
193+ expectError ,
194+ ),
195+ prepareTestCase (
196+ "my-gateway" ,
197+ expectError ,
198+ ),
199+ }
200+
201+ runner (table )
202+ }) // should fail with too few path elements
203+
204+ It ("should verify constraints" , func () {
205+ table := []testCase {
206+ prepareTestCase (
207+ // bad domain
208+ "invalid-domain/nginx-gateway/my-gateway" ,
209+ expectError ,
210+ ),
211+ prepareTestCase (
212+ // bad domain
213+ "/default/my-gateway" ,
214+ expectError ,
215+ ),
216+ prepareTestCase (
217+ // bad namespace
218+ "k8s-gateway.nginx.org/default/my-gateway" ,
219+ expectError ),
220+ prepareTestCase (
221+ // bad namespace
222+ "k8s-gateway.nginx.org//my-gateway" ,
223+ expectError ,
224+ ),
225+ prepareTestCase (
226+ // bad name
227+ "k8s-gateway.nginx.org/default/" ,
228+ expectError ,
229+ ),
230+ }
231+
232+ runner (table )
233+ }) // should verify constraints
234+ }) // gateway-ctlr-name validation
235+
236+ Describe ("gatewayclass validation" , func () {
237+ prepareTestCase := func (value string , expError bool ) testCase {
238+ return testCase {
239+ Flag : "gatewayclass" ,
240+ Value : value ,
241+ ValidatorContext : GatewayClassParam (),
242+ ExpError : expError ,
243+ }
232244 }
233245
234- runner (table )
235- }) // should verify constraints
246+ BeforeEach (func () {
247+ mockFlags = flag .NewFlagSet ("mock" , flag .PanicOnError )
248+ _ = mockFlags .String ("gatewayclass" , "" , "mock gatewayclass" )
249+ err := mockFlags .Parse ([]string {})
250+ Expect (err ).ToNot (HaveOccurred ())
251+ })
252+ AfterEach (func () {
253+ mockFlags = nil
254+ })
255+
256+ It ("should succeed on valid name" , func () {
257+ t := prepareTestCase (
258+ "nginx" ,
259+ expectSuccess ,
260+ )
261+ tester (t )
262+ }) // should succeed on valid name
263+
264+ It ("should fail with invalid name" , func () {
265+ t := prepareTestCase (
266+ "$nginx" ,
267+ expectError )
268+ tester (t )
269+ }) // should fail with invalid name"
270+ }) // gatewayclass validation
236271 }) // CLI argument validation
237272}) // end Main
0 commit comments