diff --git a/tests/cel/clientsettingspolicy_test.go b/tests/cel/clientsettingspolicy_test.go index 00833b39aa..7e7ea5c4b1 100644 --- a/tests/cel/clientsettingspolicy_test.go +++ b/tests/cel/clientsettingspolicy_test.go @@ -10,14 +10,17 @@ import ( gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" ngfAPIv1alpha1 "github.com/nginx/nginx-gateway-fabric/v2/apis/v1alpha1" + "github.com/nginx/nginx-gateway-fabric/v2/internal/framework/helpers" "github.com/nginx/nginx-gateway-fabric/v2/tests/framework" ) func TestClientSettingsPoliciesTargetRefKind(t *testing.T) { t.Parallel() g := NewWithT(t) + k8sClient, err := getKubernetesClient(t) g.Expect(err).ToNot(HaveOccurred()) + tests := []struct { policySpec ngfAPIv1alpha1.ClientSettingsPolicySpec name string @@ -83,8 +86,10 @@ func TestClientSettingsPoliciesTargetRefKind(t *testing.T) { func TestClientSettingsPoliciesTargetRefGroup(t *testing.T) { t.Parallel() g := NewWithT(t) + k8sClient, err := getKubernetesClient(t) g.Expect(err).ToNot(HaveOccurred()) + tests := []struct { policySpec ngfAPIv1alpha1.ClientSettingsPolicySpec name string @@ -129,6 +134,68 @@ func TestClientSettingsPoliciesTargetRefGroup(t *testing.T) { } } +func TestClientSettingsPoliciesKeepAliveTimeout(t *testing.T) { + t.Parallel() + g := NewWithT(t) + + k8sClient, err := getKubernetesClient(t) + g.Expect(err).ToNot(HaveOccurred()) + + tests := []struct { + policySpec ngfAPIv1alpha1.ClientSettingsPolicySpec + name string + wantErrors []string + }{ + { + name: "Validate KeepAliveTimeout is not set", + policySpec: ngfAPIv1alpha1.ClientSettingsPolicySpec{ + TargetRef: gatewayv1alpha2.LocalPolicyTargetReference{ + Kind: gatewayKind, + Group: gatewayGroup, + }, + KeepAlive: nil, + }, + }, + { + name: "Validate KeepAlive is set", + policySpec: ngfAPIv1alpha1.ClientSettingsPolicySpec{ + TargetRef: gatewayv1alpha2.LocalPolicyTargetReference{ + Kind: gatewayKind, + Group: gatewayGroup, + }, + KeepAlive: &ngfAPIv1alpha1.ClientKeepAlive{ + Timeout: &ngfAPIv1alpha1.ClientKeepAliveTimeout{ + Server: helpers.GetPointer[ngfAPIv1alpha1.Duration]("5s"), + Header: helpers.GetPointer[ngfAPIv1alpha1.Duration]("2s"), + }, + }, + }, + }, + { + name: "Validate Header cannot be set without Server", + wantErrors: []string{expectedHeaderWithoutServerError}, + policySpec: ngfAPIv1alpha1.ClientSettingsPolicySpec{ + TargetRef: gatewayv1alpha2.LocalPolicyTargetReference{ + Kind: gatewayKind, + Group: gatewayGroup, + }, + KeepAlive: &ngfAPIv1alpha1.ClientKeepAlive{ + Timeout: &ngfAPIv1alpha1.ClientKeepAliveTimeout{ + Header: helpers.GetPointer[ngfAPIv1alpha1.Duration]("2s"), + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + validateClientSettingsPolicy(t, tt, g, k8sClient) + }) + } +} + func validateClientSettingsPolicy(t *testing.T, tt struct { policySpec ngfAPIv1alpha1.ClientSettingsPolicySpec name string diff --git a/tests/cel/common.go b/tests/cel/common.go index e7b969c3a6..2f25b1f7af 100644 --- a/tests/cel/common.go +++ b/tests/cel/common.go @@ -28,8 +28,9 @@ const ( ) const ( - expectedTargetRefKindError = `TargetRef Kind must be one of: Gateway, HTTPRoute, or GRPCRoute` - expectedTargetRefGroupError = `TargetRef Group must be gateway.networking.k8s.io.` + expectedTargetRefKindError = `TargetRef Kind must be one of: Gateway, HTTPRoute, or GRPCRoute` + expectedTargetRefGroupError = `TargetRef Group must be gateway.networking.k8s.io.` + expectedHeaderWithoutServerError = `header can only be specified if server is specified` ) const (