kuma
153 строки · 3.8 Кб
1package meshratelimit
2
3import (
4"fmt"
5
6"github.com/gruntwork-io/terratest/modules/k8s"
7. "github.com/onsi/ginkgo/v2"
8. "github.com/onsi/gomega"
9
10"github.com/kumahq/kuma/pkg/plugins/policies/meshratelimit/api/v1alpha1"
11. "github.com/kumahq/kuma/test/framework"
12"github.com/kumahq/kuma/test/framework/envs/kubernetes"
13)
14
15func API() {
16meshName := "meshratelimit-api"
17
18BeforeAll(func() {
19err := NewClusterSetup().
20Install(MeshKubernetes(meshName)).
21Setup(kubernetes.Cluster)
22Expect(err).ToNot(HaveOccurred())
23})
24
25E2EAfterEach(func() {
26Expect(DeleteMeshResources(kubernetes.Cluster, meshName, v1alpha1.MeshRateLimitResourceTypeDescriptor)).To(Succeed())
27})
28
29E2EAfterAll(func() {
30Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
31})
32
33It("should create MeshRateLimit policy", func() {
34// given no MeshRateLimit
35mrls, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
36Expect(err).ToNot(HaveOccurred())
37Expect(mrls).To(BeEmpty())
38
39// when
40Expect(YamlK8s(fmt.Sprintf(`
41apiVersion: kuma.io/v1alpha1
42kind: MeshRateLimit
43metadata:
44name: mesh-rate-limit
45namespace: %s
46labels:
47kuma.io/mesh: %s
48spec:
49targetRef:
50kind: MeshService
51name: backend
52from:
53- targetRef:
54kind: Mesh
55default:
56local:
57http:
58requestRate:
59num: 1
60interval: 10s
61onRateLimit:
62status: 429
63headers:
64add:
65- name: "x-kuma-rate-limited"
66value: "true"
67- targetRef:
68kind: Mesh
69default:
70local:
71http:
72requestRate:
73num: 1
74interval: 10s
75onRateLimit:
76status: 429
77headers:
78add:
79- name: "x-kuma-rate-limited"
80value: "true"
81tcp:
82connectionRate:
83num: 100
84interval: 10s
85`, Config.KumaNamespace, meshName))(kubernetes.Cluster)).To(Succeed())
86
87// then
88mrls, err = kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
89Expect(err).ToNot(HaveOccurred())
90Expect(mrls).To(HaveLen(1))
91Expect(mrls[0]).To(Equal(fmt.Sprintf("mesh-rate-limit.%s", Config.KumaNamespace)))
92})
93
94It("should deny creating policy in the non-system namespace", func() {
95// given no MeshRateLimit
96mrls, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
97Expect(err).ToNot(HaveOccurred())
98Expect(mrls).To(BeEmpty())
99
100// when
101err = k8s.KubectlApplyFromStringE(
102kubernetes.Cluster.GetTesting(),
103kubernetes.Cluster.GetKubectlOptions(), fmt.Sprintf(`
104apiVersion: kuma.io/v1alpha1
105kind: MeshRateLimit
106metadata:
107name: mesh-rate-limit
108namespace: default
109labels:
110kuma.io/mesh: %s
111spec:
112targetRef:
113kind: MeshService
114name: backend
115from:
116- targetRef:
117kind: Mesh
118default:
119local:
120http:
121requestRate:
122num: 1
123interval: 10s
124onRateLimit:
125status: 429
126headers:
127add:
128- name: "x-kuma-rate-limited"
129value: "true"
130- targetRef:
131kind: Mesh
132default:
133local:
134http:
135requestRate:
136num: 1
137interval: 10s
138onRateLimit:
139status: 429
140headers:
141add:
142- name: "x-kuma-rate-limited"
143value: "true"
144tcp:
145connectionRate:
146num: 100
147interval: 10s
148`, meshName))
149
150Expect(err).To(HaveOccurred())
151Expect(err.Error()).To(ContainSubstring(fmt.Sprintf("policy can only be created in the system namespace:%s", Config.KumaNamespace)))
152})
153}
154