@@ -3,12 +3,13 @@ package routeutils
33import (
44 "context"
55 "fmt"
6+ "testing"
7+
68 "github.com/go-logr/logr"
79 "github.com/stretchr/testify/assert"
810 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
911 "k8s.io/apimachinery/pkg/types"
1012 gwv1 "sigs.k8s.io/gateway-api/apis/v1"
11- "testing"
1213)
1314
1415type mockListenerAttachmentHelper struct {
@@ -299,6 +300,42 @@ func Test_mapGatewayAndRoutes(t *testing.T) {
299300 name : "no output" ,
300301 expected : make (map [int ][]preLoadRouteDescriptor ),
301302 },
303+ {
304+ name : "route attaches to multiple listeners on same port - verify deduplication" ,
305+ gw : gwv1.Gateway {
306+ ObjectMeta : metav1.ObjectMeta {
307+ Name : "gw1" ,
308+ Namespace : "ns-gw" ,
309+ },
310+ Spec : gwv1.GatewaySpec {
311+ Listeners : []gwv1.Listener {
312+ {
313+ Name : "listener1-port80" ,
314+ Port : gwv1 .PortNumber (80 ),
315+ },
316+ {
317+ Name : "listener2-port80" ,
318+ Port : gwv1 .PortNumber (80 ),
319+ },
320+ },
321+ },
322+ },
323+ routes : []preLoadRouteDescriptor {route1 },
324+ listenerAttachmentMap : map [string ]bool {
325+ "listener1-port80-80-route1-ns1" : true ,
326+ "listener2-port80-80-route1-ns1" : true ,
327+ },
328+ routeListenerMap : map [string ]bool {
329+ "listener1-port80-80-route1-ns1" : true ,
330+ "listener2-port80-80-route1-ns1" : true ,
331+ },
332+ routeGatewayMap : map [string ]bool {
333+ makeRouteGatewayMapKey (gateway , route1 ): true ,
334+ },
335+ expected : map [int ][]preLoadRouteDescriptor {
336+ 80 : {route1 }, // Only one route1, not duplicated
337+ },
338+ },
302339 }
303340
304341 for _ , tc := range testCases {
0 commit comments