kuma

Форк
0
153 строки · 3.8 Кб
1
package meshratelimit
2

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

15
func API() {
16
	meshName := "meshratelimit-api"
17

18
	BeforeAll(func() {
19
		err := NewClusterSetup().
20
			Install(MeshKubernetes(meshName)).
21
			Setup(kubernetes.Cluster)
22
		Expect(err).ToNot(HaveOccurred())
23
	})
24

25
	E2EAfterEach(func() {
26
		Expect(DeleteMeshResources(kubernetes.Cluster, meshName, v1alpha1.MeshRateLimitResourceTypeDescriptor)).To(Succeed())
27
	})
28

29
	E2EAfterAll(func() {
30
		Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())
31
	})
32

33
	It("should create MeshRateLimit policy", func() {
34
		// given no MeshRateLimit
35
		mrls, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
36
		Expect(err).ToNot(HaveOccurred())
37
		Expect(mrls).To(BeEmpty())
38

39
		// when
40
		Expect(YamlK8s(fmt.Sprintf(`
41
apiVersion: kuma.io/v1alpha1
42
kind: MeshRateLimit
43
metadata:
44
  name: mesh-rate-limit
45
  namespace: %s
46
  labels:
47
    kuma.io/mesh: %s
48
spec:
49
  targetRef:
50
    kind: MeshService
51
    name: backend
52
  from:
53
    - targetRef:
54
        kind: Mesh
55
      default:
56
        local:
57
          http:
58
            requestRate:
59
              num: 1
60
              interval: 10s
61
            onRateLimit:
62
              status: 429
63
              headers:
64
                add:
65
                - name: "x-kuma-rate-limited"
66
                  value: "true"
67
    - targetRef:
68
        kind: Mesh
69
      default:
70
        local:
71
          http:
72
            requestRate:
73
              num: 1
74
              interval: 10s
75
            onRateLimit:
76
              status: 429
77
              headers:
78
                add:
79
                - name: "x-kuma-rate-limited"
80
                  value: "true"
81
          tcp:
82
            connectionRate:
83
              num: 100
84
              interval: 10s
85
`, Config.KumaNamespace, meshName))(kubernetes.Cluster)).To(Succeed())
86

87
		// then
88
		mrls, err = kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
89
		Expect(err).ToNot(HaveOccurred())
90
		Expect(mrls).To(HaveLen(1))
91
		Expect(mrls[0]).To(Equal(fmt.Sprintf("mesh-rate-limit.%s", Config.KumaNamespace)))
92
	})
93

94
	It("should deny creating policy in the non-system namespace", func() {
95
		// given no MeshRateLimit
96
		mrls, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshratelimits", meshName)
97
		Expect(err).ToNot(HaveOccurred())
98
		Expect(mrls).To(BeEmpty())
99

100
		// when
101
		err = k8s.KubectlApplyFromStringE(
102
			kubernetes.Cluster.GetTesting(),
103
			kubernetes.Cluster.GetKubectlOptions(), fmt.Sprintf(`
104
apiVersion: kuma.io/v1alpha1
105
kind: MeshRateLimit
106
metadata:
107
  name: mesh-rate-limit
108
  namespace: default
109
  labels:
110
    kuma.io/mesh: %s
111
spec:
112
  targetRef:
113
    kind: MeshService
114
    name: backend
115
  from:
116
    - targetRef:
117
        kind: Mesh
118
      default:
119
        local:
120
          http:
121
            requestRate:
122
              num: 1
123
              interval: 10s
124
            onRateLimit:
125
              status: 429
126
              headers:
127
                add:
128
                - name: "x-kuma-rate-limited"
129
                  value: "true"
130
    - targetRef:
131
        kind: Mesh
132
      default:
133
        local:
134
          http:
135
            requestRate:
136
              num: 1
137
              interval: 10s
138
            onRateLimit:
139
              status: 429
140
              headers:
141
                add:
142
                - name: "x-kuma-rate-limited"
143
                  value: "true"
144
          tcp:
145
            connectionRate:
146
              num: 100
147
              interval: 10s
148
`, meshName))
149

150
		Expect(err).To(HaveOccurred())
151
		Expect(err.Error()).To(ContainSubstring(fmt.Sprintf("policy can only be created in the system namespace:%s", Config.KumaNamespace)))
152
	})
153
}
154

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

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

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

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