From dc5ca10f91deebaddad4cef061301ae8f4b82ca6 Mon Sep 17 00:00:00 2001 From: Shashank Ram <21697719+shashankram@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:25:50 -0800 Subject: [PATCH] gateway2/delegation: add unit test for multi-level multi-parent config (#10423) --- changelog/v1.17.17/1.17-deleg.yaml | 7 + .../translator/gateway_translator_test.go | 2 + .../inputs/delegation/bug-10379.yaml | 127 ++++++++++++++++++ .../outputs/delegation/bug-10379.yaml | 51 +++++++ 4 files changed, 187 insertions(+) create mode 100644 changelog/v1.17.17/1.17-deleg.yaml create mode 100644 projects/gateway2/translator/testutils/inputs/delegation/bug-10379.yaml create mode 100644 projects/gateway2/translator/testutils/outputs/delegation/bug-10379.yaml diff --git a/changelog/v1.17.17/1.17-deleg.yaml b/changelog/v1.17.17/1.17-deleg.yaml new file mode 100644 index 00000000000..42d39b15d9f --- /dev/null +++ b/changelog/v1.17.17/1.17-deleg.yaml @@ -0,0 +1,7 @@ +changelog: + - type: NON_USER_FACING + issueLink: https://github.com/k8sgateway/k8sgateway/issues/10379 + resolvesIssue: false + description: | + Gateway: add unit test for multi-level and multi-parent delegation. + diff --git a/projects/gateway2/translator/gateway_translator_test.go b/projects/gateway2/translator/gateway_translator_test.go index 07d917fdd54..daced1e91b5 100644 --- a/projects/gateway2/translator/gateway_translator_test.go +++ b/projects/gateway2/translator/gateway_translator_test.go @@ -221,4 +221,6 @@ var _ = DescribeTable("Route Delegation translator", Entry("RouteOptions multi level inheritance with child override", "route_options_multi_level_inheritance_override_ok.yaml"), Entry("RouteOptions filter override merge", "route_options_filter_override_merge.yaml"), Entry("Child route matcher does not match parent", "bug-6621.yaml"), + // https://github.com/k8sgateway/k8sgateway/issues/10379 + Entry("Multi-level multiple parents delegation", "bug-10379.yaml"), ) diff --git a/projects/gateway2/translator/testutils/inputs/delegation/bug-10379.yaml b/projects/gateway2/translator/testutils/inputs/delegation/bug-10379.yaml new file mode 100644 index 00000000000..45e6b34f30c --- /dev/null +++ b/projects/gateway2/translator/testutils/inputs/delegation/bug-10379.yaml @@ -0,0 +1,127 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: example-gateway + namespace: infra +spec: + gatewayClassName: example-gateway-class + listeners: + - name: http + protocol: HTTP + port: 80 +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: api-example-com + namespace: infra + labels: + app: apis +spec: + parentRefs: + - name: example-gateway + hostnames: + - "api.example.com" + rules: + - matches: + - path: + type: PathPrefix + value: /api1 + backendRefs: + - group: gateway.networking.k8s.io + kind: HTTPRoute + name: apiproduct-1 + namespace: default + - matches: + - path: + type: PathPrefix + value: /api2 + backendRefs: + - group: gateway.networking.k8s.io + kind: HTTPRoute + name: apiproduct-2 + namespace: default +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: apiproduct-1 + namespace: default + labels: + app: apis + annotations: + delegation.gateway.solo.io/inherit-parent-matcher: "true" +spec: + rules: + - matches: + - path: + type: PathPrefix + value: / + filters: + - type: URLRewrite + urlRewrite: + path: + type: ReplacePrefixMatch + replacePrefixMatch: / + backendRefs: + - group: gateway.networking.k8s.io + kind: HTTPRoute + name: httpbin + namespace: default +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: apiproduct-2 + namespace: default + labels: + app: apis + annotations: + delegation.gateway.solo.io/inherit-parent-matcher: "true" +spec: + rules: + - matches: + - path: + type: PathPrefix + value: / + filters: + - type: URLRewrite + urlRewrite: + path: + type: ReplacePrefixMatch + replacePrefixMatch: / + backendRefs: + - group: gateway.networking.k8s.io + kind: HTTPRoute + name: httpbin + namespace: default +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: httpbin + namespace: default + labels: + app: apis + annotations: + delegation.gateway.solo.io/inherit-parent-matcher: "true" +spec: + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: httpbin + namespace: default + port: 8000 +--- +apiVersion: v1 +kind: Service +metadata: + name: httpbin + namespace: default +spec: + ports: + - protocol: TCP + port: 8000 \ No newline at end of file diff --git a/projects/gateway2/translator/testutils/outputs/delegation/bug-10379.yaml b/projects/gateway2/translator/testutils/outputs/delegation/bug-10379.yaml new file mode 100644 index 00000000000..5e862803d20 --- /dev/null +++ b/projects/gateway2/translator/testutils/outputs/delegation/bug-10379.yaml @@ -0,0 +1,51 @@ +--- +listeners: +- aggregateListener: + httpFilterChains: + - matcher: {} + virtualHostRefs: + - http~api_example_com + httpResources: + virtualHosts: + http~api_example_com: + domains: + - api.example.com + name: http~api_example_com + routes: + - matchers: + - prefix: /api1 + options: + regexRewrite: + pattern: + regex: ^/api1\/* + substitution: / + routeAction: + single: + kube: + port: 8000 + ref: + name: httpbin + namespace: default + - matchers: + - prefix: /api2 + options: + regexRewrite: + pattern: + regex: ^/api2\/* + substitution: / + routeAction: + single: + kube: + port: 8000 + ref: + name: httpbin + namespace: default + bindAddress: '::' + bindPort: 8080 + name: http +metadata: + labels: + created_by: gloo-kube-gateway-api + gateway_namespace: infra + name: infra-example-gateway + namespace: gloo-system \ No newline at end of file