Skip to content

Commit 5931ff6

Browse files
committed
test(gateway-api): add tests for custom backend filters
Signed-off-by: kahirokunn <[email protected]>
1 parent e9997a3 commit 5931ff6

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

pkg/router/gateway_api_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,67 @@ func TestGatewayAPIRouter_Routes(t *testing.T) {
276276
assert.Len(t, hr.Spec.Rules, 1)
277277
assert.Len(t, hr.Spec.Rules[0].Filters, 0)
278278
})
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+
})
279340
}
280341

281342
func TestGatewayAPIRouter_getSessionAffinityRouteRules(t *testing.T) {

0 commit comments

Comments
 (0)