kuma
166 строк · 4.4 Кб
1package meshcircuitbreaker2
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/meshcircuitbreaker/api/v1alpha1"11. "github.com/kumahq/kuma/test/framework"12"github.com/kumahq/kuma/test/framework/envs/kubernetes"13)
14
15func API() {16meshName := "meshcircuitbreaker-api"17
18BeforeAll(func() {19err := NewClusterSetup().20Install(MeshKubernetes(meshName)).21Setup(kubernetes.Cluster)22Expect(err).ToNot(HaveOccurred())23
24// Delete the default meshcricuitbreaker policy25Expect(DeleteMeshPolicyOrError(26kubernetes.Cluster,27v1alpha1.MeshCircuitBreakerResourceTypeDescriptor,28fmt.Sprintf("mesh-circuit-breaker-all-%s", meshName),29)).To(Succeed())30})31
32E2EAfterEach(func() {33Expect(DeleteMeshResources(kubernetes.Cluster, meshName, v1alpha1.MeshCircuitBreakerResourceTypeDescriptor)).To(Succeed())34})35
36E2EAfterAll(func() {37Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())38})39
40It("should create MeshCircuitBreaker policy", func() {41// given no MeshCircuitBreakers42mcb, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshcircuitbreakers", meshName)43Expect(err).ToNot(HaveOccurred())44Expect(mcb).To(BeEmpty())45
46// when47Expect(YamlK8s(fmt.Sprintf(`48apiVersion: kuma.io/v1alpha1
49kind: MeshCircuitBreaker
50metadata:
51name: mcb-api-1
52namespace: %s
53labels:
54kuma.io/mesh: meshcircuitbreaker-api
55spec:
56targetRef:
57kind: MeshService
58name: backend
59from:
60- targetRef:
61kind: Mesh
62default:
63connectionLimits:
64maxConnectionPools: 5
65maxConnections: 10
66maxPendingRequests: 2
67maxRetries: 1
68maxRequests: 32
69to:
70- targetRef:
71kind: MeshService
72name: frontend
73default:
74outlierDetection:
75disabled: false
76interval: 5s
77baseEjectionTime: 30s
78maxEjectionPercent: 20
79splitExternalAndLocalErrors: true
80detectors:
81totalFailures:
82consecutive: 10
83gatewayFailures:
84consecutive: 10
85localOriginFailures:
86consecutive: 10
87successRate:
88minimumHosts: 5
89requestVolume: 10
90standardDeviationFactor: 1900
91failurePercentage:
92requestVolume: 10
93minimumHosts: 5
94threshold: 85
95`, Config.KumaNamespace))(kubernetes.Cluster)).To(Succeed())96
97// then98mcb, err = kubernetes.Cluster.GetKumactlOptions().KumactlList("meshcircuitbreakers", meshName)99Expect(err).ToNot(HaveOccurred())100Expect(mcb).To(HaveLen(1))101Expect(mcb[0]).To(Equal(fmt.Sprintf("mcb-api-1.%s", Config.KumaNamespace)))102})103
104It("should deny creating policy in the non-system namespace", func() {105// given no MeshCircuitBreakers106mcb, err := kubernetes.Cluster.GetKumactlOptions().KumactlList("meshcircuitbreakers", meshName)107Expect(err).ToNot(HaveOccurred())108Expect(mcb).To(BeEmpty())109
110// when111err = k8s.KubectlApplyFromStringE(112kubernetes.Cluster.GetTesting(),113kubernetes.Cluster.GetKubectlOptions(), `114apiVersion: kuma.io/v1alpha1
115kind: MeshCircuitBreaker
116metadata:
117name: mcb-api-invalid
118namespace: default
119labels:
120kuma.io/mesh: meshcircuitbreaker-api
121spec:
122targetRef:
123kind: MeshService
124name: backend
125from:
126- targetRef:
127kind: Mesh
128default:
129connectionLimits:
130maxConnectionPools: 5
131maxConnections: 10
132maxPendingRequests: 2
133maxRetries: 1
134maxRequests: 32
135to:
136- targetRef:
137kind: MeshService
138name: frontend
139default:
140outlierDetection:
141disabled: false
142interval: 5s
143baseEjectionTime: 30s
144maxEjectionPercent: 20
145splitExternalAndLocalErrors: true
146detectors:
147totalFailures:
148consecutive: 10
149gatewayFailures:
150consecutive: 10
151localOriginFailures:
152consecutive: 10
153successRate:
154minimumHosts: 5
155requestVolume: 10
156standardDeviationFactor: 1900
157failurePercentage:
158requestVolume: 10
159minimumHosts: 5
160threshold: 85
161`)162
163Expect(err).To(HaveOccurred())164Expect(err.Error()).To(ContainSubstring(fmt.Sprintf("policy can only be created in the system namespace:%s", Config.KumaNamespace)))165})166}
167