kuma

Форк
0
131 строка · 3.8 Кб
1
package meshproxypatch
2

3
import (
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

16
func MeshProxyPatch() {
17
	const meshName = "mesh-proxy-patch"
18
	const namespace = "mesh-proxy-patch"
19

20
	BeforeAll(func() {
21
		err := NewClusterSetup().
22
			Install(MeshKubernetes(meshName)).
23
			Install(NamespaceWithSidecarInjection(namespace)).
24
			Install(testserver.Install(
25
				testserver.WithName("test-client"),
26
				testserver.WithMesh(meshName),
27
				testserver.WithNamespace(namespace),
28
			)).
29
			Install(testserver.Install(
30
				testserver.WithName("test-server"),
31
				testserver.WithMesh(meshName),
32
				testserver.WithNamespace(namespace),
33
			)).
34
			Setup(kubernetes.Cluster)
35
		Expect(err).ToNot(HaveOccurred())
36
	})
37

38
	E2EAfterEach(func() {
39
		Expect(DeleteMeshResources(kubernetes.Cluster, meshName, v1alpha1.MeshProxyPatchResourceTypeDescriptor)).To(Succeed())
40
	})
41

42
	E2EAfterAll(func() {
43
		Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespace)).To(Succeed())
44
		Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
45
	})
46

47
	It("should add a header using Lua filter", func() {
48
		// given
49
		meshProxyPatch := fmt.Sprintf(`
50
apiVersion: kuma.io/v1alpha1 
51
kind: MeshProxyPatch
52
metadata:
53
  name: backend-lua-filter
54
  namespace: %s
55
  labels:
56
    kuma.io/mesh: %s
57
spec:
58
  targetRef:
59
    kind: MeshService
60
    name: test-client_mesh-proxy-patch_svc_80
61
  default:
62
    appendModifications:
63
      - httpFilter:
64
          operation: AddBefore
65
          match:
66
            name: envoy.filters.http.router
67
            origin: outbound
68
          value: |
69
            name: envoy.filters.http.lua
70
            typedConfig:
71
              '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
72
              inline_code: |
73
                function envoy_on_request(request_handle)
74
                  request_handle:headers():add("X-Header", "test")
75
                end
76
`, Config.KumaNamespace, meshName)
77

78
		// when
79
		err := kubernetes.Cluster.Install(YamlK8s(meshProxyPatch))
80

81
		// then
82
		Expect(err).ToNot(HaveOccurred())
83
		Eventually(func(g Gomega) {
84
			responses, err := client.CollectResponses(kubernetes.Cluster, "test-client", "test-server_mesh-proxy-patch_svc_80.mesh", client.FromKubernetesPod(namespace, "test-client"))
85
			g.Expect(err).ToNot(HaveOccurred())
86
			g.Expect(responses[0].Received.Headers["X-Header"]).To(ContainElements("test"))
87
		}, "30s", "1s").Should(Succeed())
88
	})
89

90
	It("should add a header using json patch", func() {
91
		// given
92
		meshProxyPatch := fmt.Sprintf(`
93
apiVersion: kuma.io/v1alpha1 
94
kind: MeshProxyPatch
95
metadata:
96
  name: json-patch
97
  namespace: %s
98
  labels:
99
    kuma.io/mesh: %s
100
spec:
101
  targetRef:
102
    kind: MeshService
103
    name: test-client_mesh-proxy-patch_svc_80
104
  default:
105
    appendModifications:
106
      - networkFilter:
107
          operation: Patch
108
          match:
109
            name: envoy.filters.network.http_connection_manager
110
            origin: outbound
111
          jsonPatches:
112
            - op: add
113
              path: /routeConfig/requestHeadersToAdd/-
114
              value:
115
                header:
116
                  key: X-Header
117
                  value: test
118
`, Config.KumaNamespace, meshName)
119

120
		// when
121
		err := kubernetes.Cluster.Install(YamlK8s(meshProxyPatch))
122

123
		// then
124
		Expect(err).ToNot(HaveOccurred())
125
		Eventually(func(g Gomega) {
126
			responses, err := client.CollectResponses(kubernetes.Cluster, "test-client", "test-server_mesh-proxy-patch_svc_80.mesh", client.FromKubernetesPod(namespace, "test-client"))
127
			g.Expect(err).ToNot(HaveOccurred())
128
			g.Expect(responses[0].Received.Headers["X-Header"]).To(ContainElements("test"))
129
		}, "30s", "1s").Should(Succeed())
130
	})
131
}
132

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.