From db21d04ebd38ef1c4c23d0fc5711d1ce37690097 Mon Sep 17 00:00:00 2001 From: Melisa Griffin Date: Wed, 2 Aug 2023 11:37:56 -0400 Subject: [PATCH] adds basic check for port conflicts, needs details ironed out --- control-plane/api-gateway/binding/validation.go | 7 +++++++ control-plane/api-gateway/binding/validation_test.go | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/control-plane/api-gateway/binding/validation.go b/control-plane/api-gateway/binding/validation.go index a57cf598a4..2007758876 100644 --- a/control-plane/api-gateway/binding/validation.go +++ b/control-plane/api-gateway/binding/validation.go @@ -235,10 +235,17 @@ func validateListeners(gateway gwv1beta1.Gateway, listeners []gwv1beta1.Listener listener: listener, }) } + seenListenerPorts := map[int]struct{}{} for i, listener := range listeners { var result listenerValidationResult + if _, seen := seenListenerPorts[common.ToContainerPort(listener.Port)]; seen { + result.acceptedErr = errListenerPortUnavailable + //result.conflictedErr = err + } + seenListenerPorts[common.ToContainerPort(listener.Port)] = struct{}{} + err, refErr := validateTLS(gateway, listener.TLS, resources) result.refErr = refErr if err != nil { diff --git a/control-plane/api-gateway/binding/validation_test.go b/control-plane/api-gateway/binding/validation_test.go index da0ed83f95..3ac49f893d 100644 --- a/control-plane/api-gateway/binding/validation_test.go +++ b/control-plane/api-gateway/binding/validation_test.go @@ -532,6 +532,7 @@ func TestValidateListeners(t *testing.T) { for name, tt := range map[string]struct { listeners []gwv1beta1.Listener expectedAcceptedErr error + listenerIndexToTest int }{ "valid protocol HTTP": { listeners: []gwv1beta1.Listener{ @@ -563,9 +564,17 @@ func TestValidateListeners(t *testing.T) { }, expectedAcceptedErr: errListenerPortUnavailable, }, + "conflicted port": { + listeners: []gwv1beta1.Listener{ + {Protocol: gwv1beta1.TCPProtocolType, Port: 80}, + {Protocol: gwv1beta1.TCPProtocolType, Port: 2080}, + }, + expectedAcceptedErr: errListenerPortUnavailable, + listenerIndexToTest: 1, + }, } { t.Run(name, func(t *testing.T) { - require.Equal(t, tt.expectedAcceptedErr, validateListeners(gatewayWithFinalizer(gwv1beta1.GatewaySpec{}), tt.listeners, nil)[0].acceptedErr) + require.Equal(t, tt.expectedAcceptedErr, validateListeners(gatewayWithFinalizer(gwv1beta1.GatewaySpec{}), tt.listeners, nil)[tt.listenerIndexToTest].acceptedErr) }) } }