@@ -276,6 +276,67 @@ func TestGatewayAPIRouter_Routes(t *testing.T) {
276
276
assert .Len (t , hr .Spec .Rules , 1 )
277
277
assert .Len (t , hr .Spec .Rules [0 ].Filters , 0 )
278
278
})
279
+
280
+ t .Run ("custom backend filters" , func (t * testing.T ) {
281
+ canary := mocks .canary .DeepCopy ()
282
+ primaryHostName := v1 .PreciseHostname ("primary.example.com" )
283
+ canary .Spec .Service .Primary = & flaggerv1.CustomBackend {
284
+ Backend : & flaggerv1.HTTPBackendRefTemplate {
285
+ Filters : []v1.HTTPRouteFilter {
286
+ {
287
+ Type : v1 .HTTPRouteFilterURLRewrite ,
288
+ URLRewrite : & v1.HTTPURLRewriteFilter {
289
+ Hostname : & primaryHostName ,
290
+ },
291
+ },
292
+ },
293
+ },
294
+ }
295
+
296
+ name := v1 .ObjectName ("canary" )
297
+ unmanagedSvcNamespace := "kube-system"
298
+ namespace := v1 .Namespace (unmanagedSvcNamespace )
299
+ port := v1 .PortNumber (30080 )
300
+ objRef := v1.BackendObjectReference {
301
+ Name : name ,
302
+ Namespace : & namespace ,
303
+ Port : & port ,
304
+ }
305
+
306
+ canary .Spec .Service .Canary = & flaggerv1.CustomBackend {
307
+ Backend : & flaggerv1.HTTPBackendRefTemplate {
308
+ BackendObjectReference : & objRef ,
309
+ },
310
+ }
311
+ err = router .SetRoutes (canary , 50 , 50 , false )
312
+ require .NoError (t , err )
313
+
314
+ httpRoute , err := router .gatewayAPIClient .GatewayapiV1 ().HTTPRoutes ("default" ).Get (context .TODO (), "podinfo" , metav1.GetOptions {})
315
+ require .NoError (t , err )
316
+
317
+ primary := httpRoute .Spec .Rules [0 ].BackendRefs [0 ]
318
+ assert .Equal (t , int32 (50 ), * primary .Weight )
319
+
320
+ canaryBackend := httpRoute .Spec .Rules [0 ].BackendRefs [1 ]
321
+ assert .Equal (t , canaryBackend .Name , name )
322
+ assert .Equal (t , canaryBackend .Namespace , & namespace )
323
+ assert .Equal (t , canaryBackend .Port , & port )
324
+
325
+ primaryBackend := httpRoute .Spec .Rules [0 ].BackendRefs [0 ].Filters [0 ].URLRewrite
326
+ assert .Equal (t , primaryBackend .Hostname , & primaryHostName )
327
+
328
+ err = router .Reconcile (canary )
329
+ require .NoError (t , err )
330
+
331
+ referenceGrant , err := router .gatewayAPIClient .GatewayapiV1beta1 ().ReferenceGrants (unmanagedSvcNamespace ).Get (context .TODO (), canary .Name , metav1.GetOptions {})
332
+ require .NoError (t , err )
333
+ assert .Equal (t , unmanagedSvcNamespace , string (referenceGrant .Namespace ))
334
+ assert .Equal (t , "HTTPRoute" , string (referenceGrant .Spec .From [0 ].Kind ))
335
+ assert .Equal (t , canary .Namespace , string (referenceGrant .Spec .From [0 ].Namespace ))
336
+ assert .Equal (t , "Service" , string (referenceGrant .Spec .To [0 ].Kind ))
337
+ assert .Equal (t , "" , string (referenceGrant .Spec .To [0 ].Group ))
338
+ assert .Equal (t , string (name ), string (* referenceGrant .Spec .To [0 ].Name ))
339
+ })
279
340
}
280
341
281
342
func TestGatewayAPIRouter_getSessionAffinityRouteRules (t * testing.T ) {
0 commit comments