@@ -5,11 +5,13 @@ import (
5
5
"fmt"
6
6
"testing"
7
7
8
+ "github.com/stretchr/testify/assert"
8
9
"github.com/stretchr/testify/require"
9
10
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10
11
"k8s.io/apimachinery/pkg/types"
11
12
"sigs.k8s.io/controller-runtime/pkg/client"
12
13
fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
14
+ "sigs.k8s.io/controller-runtime/pkg/reconcile"
13
15
gwapiv1b1 "sigs.k8s.io/gateway-api/apis/v1beta1"
14
16
15
17
"github.com/envoyproxy/gateway/api/config/v1alpha1"
@@ -110,12 +112,234 @@ func TestGatewayHasMatchingController(t *testing.T) {
110
112
tc := tc
111
113
t .Run (tc .name , func (t * testing.T ) {
112
114
r .client = fakeclient .NewClientBuilder ().WithScheme (envoygateway .GetScheme ()).WithObjects (match , nonMatch , tc .obj ).Build ()
113
- actual := r .hasMatchingController (tc .obj )
115
+ actual := r .gatewayHasMatchingController (tc .obj )
114
116
require .Equal (t , tc .expect , actual )
115
117
})
116
118
}
117
119
}
118
120
121
+ func TestClassHasMatchingController (t * testing.T ) {
122
+ testCases := []struct {
123
+ name string
124
+ obj client.Object
125
+ gateways []gwapiv1b1.Gateway
126
+ expect bool
127
+ }{
128
+ {
129
+ name : "matching object type, controller name, and managed gateway" ,
130
+ obj : & gwapiv1b1.GatewayClass {
131
+ ObjectMeta : metav1.ObjectMeta {
132
+ Name : "gc1" ,
133
+ Namespace : "test" ,
134
+ },
135
+ Spec : gwapiv1b1.GatewayClassSpec {
136
+ ControllerName : v1alpha1 .GatewayControllerName ,
137
+ },
138
+ },
139
+ gateways : []gwapiv1b1.Gateway {
140
+ {
141
+ TypeMeta : metav1.TypeMeta {
142
+ Kind : "Gateway" ,
143
+ APIVersion : fmt .Sprintf ("%s/%s" , gwapiv1b1 .GroupName , gwapiv1b1 .GroupVersion .Version ),
144
+ },
145
+ ObjectMeta : metav1.ObjectMeta {
146
+ Name : "test" ,
147
+ Namespace : "test" ,
148
+ },
149
+ Spec : gwapiv1b1.GatewaySpec {
150
+ GatewayClassName : gwapiv1b1 .ObjectName ("gc1" ),
151
+ },
152
+ },
153
+ },
154
+ expect : true ,
155
+ },
156
+ {
157
+ name : "matching object type and controller name, but no managed gateways" ,
158
+ obj : & gwapiv1b1.GatewayClass {
159
+ ObjectMeta : metav1.ObjectMeta {
160
+ Name : "gc1" ,
161
+ Namespace : "test" ,
162
+ },
163
+ Spec : gwapiv1b1.GatewayClassSpec {
164
+ ControllerName : v1alpha1 .GatewayControllerName ,
165
+ },
166
+ },
167
+ gateways : []gwapiv1b1.Gateway {
168
+ {
169
+ TypeMeta : metav1.TypeMeta {
170
+ Kind : "Gateway" ,
171
+ APIVersion : fmt .Sprintf ("%s/%s" , gwapiv1b1 .GroupName , gwapiv1b1 .GroupVersion .Version ),
172
+ },
173
+ ObjectMeta : metav1.ObjectMeta {
174
+ Name : "test" ,
175
+ Namespace : "test" ,
176
+ },
177
+ Spec : gwapiv1b1.GatewaySpec {
178
+ GatewayClassName : gwapiv1b1 .ObjectName ("unmanaged-gc" ),
179
+ },
180
+ },
181
+ },
182
+ expect : false ,
183
+ },
184
+ {
185
+ name : "matching object type and gatewayclass but not controller name" ,
186
+ obj : & gwapiv1b1.GatewayClass {
187
+ ObjectMeta : metav1.ObjectMeta {
188
+ Name : "gc1" ,
189
+ Namespace : "test" ,
190
+ },
191
+ Spec : gwapiv1b1.GatewayClassSpec {
192
+ ControllerName : "not.envoy.gateway.controller" ,
193
+ },
194
+ },
195
+ expect : false ,
196
+ },
197
+ {
198
+ name : "not gatewayclass object type" ,
199
+ obj : & gwapiv1b1.Gateway {
200
+ ObjectMeta : metav1.ObjectMeta {
201
+ Name : "gw1" ,
202
+ Namespace : "test" ,
203
+ },
204
+ },
205
+ expect : false ,
206
+ },
207
+ }
208
+
209
+ // Create the reconciler.
210
+ logger , err := log .NewLogger ()
211
+ require .NoError (t , err )
212
+ r := gatewayReconciler {
213
+ classController : v1alpha1 .GatewayControllerName ,
214
+ log : logger ,
215
+ }
216
+
217
+ for _ , tc := range testCases {
218
+ tc := tc
219
+ t .Run (tc .name , func (t * testing.T ) {
220
+ var objs []client.Object
221
+ for i := range tc .gateways {
222
+ objs = append (objs , & tc .gateways [i ])
223
+ }
224
+ r .client = fakeclient .NewClientBuilder ().WithScheme (envoygateway .GetScheme ()).WithObjects (objs ... ).Build ()
225
+ actual := r .classHasMatchingController (tc .obj )
226
+ require .Equal (t , tc .expect , actual )
227
+ })
228
+ }
229
+ }
230
+
231
+ func TestGetGatewaysForClass (t * testing.T ) {
232
+ testCases := []struct {
233
+ name string
234
+ obj client.Object
235
+ gateways []gwapiv1b1.Gateway
236
+ expect []reconcile.Request
237
+ }{
238
+ {
239
+ name : "one gateway matches gatewayclass" ,
240
+ obj : & gwapiv1b1.GatewayClass {
241
+ ObjectMeta : metav1.ObjectMeta {
242
+ Namespace : "test" ,
243
+ Name : "gc1" ,
244
+ },
245
+ Spec : gwapiv1b1.GatewayClassSpec {
246
+ ControllerName : "test.controller" ,
247
+ },
248
+ },
249
+ gateways : []gwapiv1b1.Gateway {
250
+ {
251
+ ObjectMeta : metav1.ObjectMeta {
252
+ Namespace : "test" ,
253
+ Name : "gw1" ,
254
+ },
255
+ Spec : gwapiv1b1.GatewaySpec {
256
+ GatewayClassName : gwapiv1b1 .ObjectName ("gc1" ),
257
+ },
258
+ },
259
+ },
260
+ expect : []reconcile.Request {
261
+ {
262
+ NamespacedName : types.NamespacedName {
263
+ Namespace : "test" ,
264
+ Name : "gw1" ,
265
+ },
266
+ },
267
+ },
268
+ },
269
+ {
270
+ name : "one of two gateways match gatewayclass" ,
271
+ obj : & gwapiv1b1.GatewayClass {
272
+ ObjectMeta : metav1.ObjectMeta {
273
+ Namespace : "test" ,
274
+ Name : "gc1" ,
275
+ },
276
+ Spec : gwapiv1b1.GatewayClassSpec {
277
+ ControllerName : "test.controller" ,
278
+ },
279
+ },
280
+ gateways : []gwapiv1b1.Gateway {
281
+ {
282
+ ObjectMeta : metav1.ObjectMeta {
283
+ Namespace : "test" ,
284
+ Name : "gw1" ,
285
+ },
286
+ Spec : gwapiv1b1.GatewaySpec {
287
+ GatewayClassName : gwapiv1b1 .ObjectName ("gc1" ),
288
+ },
289
+ },
290
+ {
291
+ ObjectMeta : metav1.ObjectMeta {
292
+ Namespace : "test" ,
293
+ Name : "gw2" ,
294
+ },
295
+ Spec : gwapiv1b1.GatewaySpec {
296
+ GatewayClassName : gwapiv1b1 .ObjectName ("gc2" ),
297
+ },
298
+ },
299
+ },
300
+ expect : []reconcile.Request {
301
+ {
302
+ NamespacedName : types.NamespacedName {
303
+ Namespace : "test" ,
304
+ Name : "gw1" ,
305
+ },
306
+ },
307
+ },
308
+ },
309
+ {
310
+ name : "not a gatewayclass object" ,
311
+ obj : & gwapiv1b1.Gateway {
312
+ ObjectMeta : metav1.ObjectMeta {
313
+ Namespace : "test" ,
314
+ Name : "gw1" ,
315
+ },
316
+ },
317
+ expect : []reconcile.Request {},
318
+ },
319
+ }
320
+
321
+ // Create the reconciler.
322
+ logger , err := log .NewLogger ()
323
+ require .NoError (t , err )
324
+ r := & gatewayReconciler {
325
+ log : logger ,
326
+ classController : gwapiv1b1 .GatewayController (v1alpha1 .GatewayControllerName ),
327
+ }
328
+
329
+ for i := range testCases {
330
+ tc := testCases [i ]
331
+ t .Run (tc .name , func (t * testing.T ) {
332
+ objs := []client.Object {tc .obj }
333
+ for i := range tc .gateways {
334
+ objs = append (objs , & tc .gateways [i ])
335
+ }
336
+ r .client = fakeclient .NewClientBuilder ().WithScheme (envoygateway .GetScheme ()).WithObjects (objs ... ).Build ()
337
+ reqs := r .getGatewaysForClass (tc .obj )
338
+ assert .Equal (t , tc .expect , reqs )
339
+ })
340
+ }
341
+ }
342
+
119
343
func TestIsAccepted (t * testing.T ) {
120
344
testCases := []struct {
121
345
name string
0 commit comments