kuma
131 строка · 3.8 Кб
1package meshproxypatch
2
3import (
4"fmt"
5
6. "github.com/onsi/ginkgo/v2"
7. "github.com/onsi/gomega"
8
9"github.com/kumahq/kuma/pkg/plugins/policies/meshproxypatch/api/v1alpha1"
10. "github.com/kumahq/kuma/test/framework"
11"github.com/kumahq/kuma/test/framework/client"
12"github.com/kumahq/kuma/test/framework/deployments/testserver"
13"github.com/kumahq/kuma/test/framework/envs/kubernetes"
14)
15
16func MeshProxyPatch() {
17const meshName = "mesh-proxy-patch"
18const namespace = "mesh-proxy-patch"
19
20BeforeAll(func() {
21err := NewClusterSetup().
22Install(MeshKubernetes(meshName)).
23Install(NamespaceWithSidecarInjection(namespace)).
24Install(testserver.Install(
25testserver.WithName("test-client"),
26testserver.WithMesh(meshName),
27testserver.WithNamespace(namespace),
28)).
29Install(testserver.Install(
30testserver.WithName("test-server"),
31testserver.WithMesh(meshName),
32testserver.WithNamespace(namespace),
33)).
34Setup(kubernetes.Cluster)
35Expect(err).ToNot(HaveOccurred())
36})
37
38E2EAfterEach(func() {
39Expect(DeleteMeshResources(kubernetes.Cluster, meshName, v1alpha1.MeshProxyPatchResourceTypeDescriptor)).To(Succeed())
40})
41
42E2EAfterAll(func() {
43Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespace)).To(Succeed())
44Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
45})
46
47It("should add a header using Lua filter", func() {
48// given
49meshProxyPatch := fmt.Sprintf(`
50apiVersion: kuma.io/v1alpha1
51kind: MeshProxyPatch
52metadata:
53name: backend-lua-filter
54namespace: %s
55labels:
56kuma.io/mesh: %s
57spec:
58targetRef:
59kind: MeshService
60name: test-client_mesh-proxy-patch_svc_80
61default:
62appendModifications:
63- httpFilter:
64operation: AddBefore
65match:
66name: envoy.filters.http.router
67origin: outbound
68value: |
69name: envoy.filters.http.lua
70typedConfig:
71'@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
72inline_code: |
73function envoy_on_request(request_handle)
74request_handle:headers():add("X-Header", "test")
75end
76`, Config.KumaNamespace, meshName)
77
78// when
79err := kubernetes.Cluster.Install(YamlK8s(meshProxyPatch))
80
81// then
82Expect(err).ToNot(HaveOccurred())
83Eventually(func(g Gomega) {
84responses, err := client.CollectResponses(kubernetes.Cluster, "test-client", "test-server_mesh-proxy-patch_svc_80.mesh", client.FromKubernetesPod(namespace, "test-client"))
85g.Expect(err).ToNot(HaveOccurred())
86g.Expect(responses[0].Received.Headers["X-Header"]).To(ContainElements("test"))
87}, "30s", "1s").Should(Succeed())
88})
89
90It("should add a header using json patch", func() {
91// given
92meshProxyPatch := fmt.Sprintf(`
93apiVersion: kuma.io/v1alpha1
94kind: MeshProxyPatch
95metadata:
96name: json-patch
97namespace: %s
98labels:
99kuma.io/mesh: %s
100spec:
101targetRef:
102kind: MeshService
103name: test-client_mesh-proxy-patch_svc_80
104default:
105appendModifications:
106- networkFilter:
107operation: Patch
108match:
109name: envoy.filters.network.http_connection_manager
110origin: outbound
111jsonPatches:
112- op: add
113path: /routeConfig/requestHeadersToAdd/-
114value:
115header:
116key: X-Header
117value: test
118`, Config.KumaNamespace, meshName)
119
120// when
121err := kubernetes.Cluster.Install(YamlK8s(meshProxyPatch))
122
123// then
124Expect(err).ToNot(HaveOccurred())
125Eventually(func(g Gomega) {
126responses, err := client.CollectResponses(kubernetes.Cluster, "test-client", "test-server_mesh-proxy-patch_svc_80.mesh", client.FromKubernetesPod(namespace, "test-client"))
127g.Expect(err).ToNot(HaveOccurred())
128g.Expect(responses[0].Received.Headers["X-Header"]).To(ContainElements("test"))
129}, "30s", "1s").Should(Succeed())
130})
131}
132