From 07584224027e21b93e39716256adf9f6a64a4a3a Mon Sep 17 00:00:00 2001 From: William P Date: Sat, 4 Jul 2026 12:20:55 -0400 Subject: [PATCH] add unit tests for gateway api --- unittests/helm/httproute/basic.yaml | 74 +++++++++++++++++++ .../helm/httproute/implicit-defaults.yaml | 19 +++++ .../helm/httproute/structured-paths.yaml | 56 ++++++++++++++ unittests/helm/values-conflicting-checks.yaml | 11 +++ 4 files changed, 160 insertions(+) create mode 100644 unittests/helm/httproute/basic.yaml create mode 100644 unittests/helm/httproute/implicit-defaults.yaml create mode 100644 unittests/helm/httproute/structured-paths.yaml diff --git a/unittests/helm/httproute/basic.yaml b/unittests/helm/httproute/basic.yaml new file mode 100644 index 0000000..9daddd4 --- /dev/null +++ b/unittests/helm/httproute/basic.yaml @@ -0,0 +1,74 @@ +suite: Test httproute.yaml +templates: + - templates/gitea/httproute.yaml +tests: + - it: should enable httproute when gateway.httpRoute.enabled is true + set: + gateway.httpRoute.enabled: true + gateway.httpRoute.annotations: + some-annotation: some-value + gateway.httpRoute.hostnames: + - example.com + gateway.httpRoute.parentRefs: + - name: traefik + sectionName: https + kind: Gateway + gateway.httpRoute.paths: + - path: / + asserts: + - hasDocuments: + count: 1 + - isKind: + of: HTTPRoute + - isAPIVersion: + of: gateway.networking.k8s.io/v1 + - equal: + path: metadata.name + value: RELEASE-NAME-gitea + - equal: + path: metadata.annotations["some-annotation"] + value: some-value + - equal: + path: spec.hostnames[0] + value: "example.com" + - equal: + path: spec.parentRefs[0].name + value: "traefik" + - equal: + path: spec.parentRefs[0].kind + value: "Gateway" + - equal: + path: spec.parentRefs[0].sectionName + value: "https" + - equal: + path: spec.rules[0].matches[0].path.type + value: "PathPrefix" + - equal: + path: spec.rules[0].matches[0].path.value + value: "/" + - equal: + path: spec.rules[0].backendRefs[0].name + value: "RELEASE-NAME-gitea-http" + - equal: + path: spec.rules[0].backendRefs[0].port + value: 3000 + + - it: should not create httproute when gateway.httpRoute.enabled is false + set: + gateway.httpRoute.enabled: false + asserts: + - hasDocuments: + count: 0 + + - it: hostname using TPL + set: + global.giteaHostName: "gitea.example.com" + gateway.httpRoute.enabled: true + gateway.httpRoute.hostnames: + - "{{ .Values.global.giteaHostName }}" + asserts: + - isKind: + of: HTTPRoute + - equal: + path: spec.hostnames[0] + value: "gitea.example.com" diff --git a/unittests/helm/httproute/implicit-defaults.yaml b/unittests/helm/httproute/implicit-defaults.yaml new file mode 100644 index 0000000..6bed4b6 --- /dev/null +++ b/unittests/helm/httproute/implicit-defaults.yaml @@ -0,0 +1,19 @@ +suite: Test httproute with implicit path defaults +templates: + - templates/gitea/httproute.yaml +tests: + - it: should use default path and pathType when no paths are specified + set: + gateway.httpRoute.enabled: true + gateway.httpRoute.paths: [] + asserts: + - hasDocuments: + count: 1 + - isKind: + of: HTTPRoute + - equal: + path: spec.rules[0].matches[0].path.type + value: "PathPrefix" + - equal: + path: spec.rules[0].matches[0].path.value + value: "/" diff --git a/unittests/helm/httproute/structured-paths.yaml b/unittests/helm/httproute/structured-paths.yaml new file mode 100644 index 0000000..9dbe600 --- /dev/null +++ b/unittests/helm/httproute/structured-paths.yaml @@ -0,0 +1,56 @@ +suite: Test httproute with structured paths +templates: + - templates/gitea/httproute.yaml +tests: + - it: should work with a plain string path + set: + gateway.httpRoute.enabled: true + gateway.httpRoute.paths: + - / + asserts: + - hasDocuments: + count: 1 + - isKind: + of: HTTPRoute + - equal: + path: spec.rules[0].matches[0].path.type + value: "PathPrefix" + - equal: + path: spec.rules[0].matches[0].path.value + value: "/" + + - it: should work with structured path definitions and per-path pathType + set: + gateway.httpRoute.enabled: true + gateway.httpRoute.paths: + - path: / + - path: /foo + pathType: Exact + asserts: + - hasDocuments: + count: 1 + - isKind: + of: HTTPRoute + - equal: + path: spec.rules[0].matches[0].path.type + value: "PathPrefix" + - equal: + path: spec.rules[0].matches[0].path.value + value: "/" + - equal: + path: spec.rules[1].matches[0].path.type + value: "Exact" + - equal: + path: spec.rules[1].matches[0].path.value + value: "/foo" + + - it: should allow overriding the default pathType + set: + gateway.httpRoute.enabled: true + gateway.httpRoute.pathType: Exact + gateway.httpRoute.paths: + - / + asserts: + - equal: + path: spec.rules[0].matches[0].path.type + value: "Exact" diff --git a/unittests/helm/values-conflicting-checks.yaml b/unittests/helm/values-conflicting-checks.yaml index a1ba969..a1dd94a 100644 --- a/unittests/helm/values-conflicting-checks.yaml +++ b/unittests/helm/values-conflicting-checks.yaml @@ -12,3 +12,14 @@ tests: asserts: - failedTemplate: errorMessage: valkey and valkey-cluster cannot be enabled at the same time. Please only choose one. + + - it: fails when trying to enable ingress and gateway httpRoute at the same time + set: + ingress: + enabled: true + gateway: + httpRoute: + enabled: true + asserts: + - failedTemplate: + errorMessage: You cannot enable both Ingress and HTTPRoute at the same time