kuma
117 строк · 3.4 Кб
1package virtualoutbound2
3import (4. "github.com/onsi/ginkgo/v2"5. "github.com/onsi/gomega"6
7"github.com/kumahq/kuma/pkg/core/resources/apis/mesh"8. "github.com/kumahq/kuma/test/framework"9"github.com/kumahq/kuma/test/framework/client"10"github.com/kumahq/kuma/test/framework/deployments/democlient"11"github.com/kumahq/kuma/test/framework/deployments/testserver"12"github.com/kumahq/kuma/test/framework/envs/kubernetes"13)
14
15func VirtualOutbound() {16namespace := "virtual-outbounds"17meshName := "virtual-outbounds"18
19BeforeAll(func() {20err := NewClusterSetup().21Install(MeshKubernetes(meshName)).22Install(NamespaceWithSidecarInjection(namespace)).23Install(democlient.Install(democlient.WithNamespace(namespace), democlient.WithMesh(meshName))).24Install(testserver.Install(25testserver.WithMesh(meshName),26testserver.WithNamespace(namespace),27testserver.WithStatefulSet(true),28testserver.WithReplicas(2),29)).30Setup(kubernetes.Cluster)31Expect(err).ToNot(HaveOccurred())32})33
34E2EAfterAll(func() {35Expect(kubernetes.Cluster.TriggerDeleteNamespace(namespace)).To(Succeed())36Expect(kubernetes.Cluster.DeleteMesh(meshName)).To(Succeed())37})38
39BeforeEach(func() {40Expect(DeleteMeshResources(kubernetes.Cluster, meshName, mesh.VirtualOutboundResourceTypeDescriptor)).To(Succeed())41})42
43It("simple virtual outbound", func() {44virtualOutboundAll := `45apiVersion: kuma.io/v1alpha1
46kind: VirtualOutbound
47mesh: virtual-outbounds
48metadata:
49name: instance
50spec:
51selectors:
52- match:
53kuma.io/service: "*"
54conf:
55host: "{{.svc}}.foo"
56port: "8080"
57parameters:
58- name: "svc"
59tagKey: "kuma.io/service"
60`
61err := YamlK8s(virtualOutboundAll)(kubernetes.Cluster)62Expect(err).ToNot(HaveOccurred())63
64// Succeed with virtual-outbound65Eventually(func(g Gomega) {66response, err := client.CollectEchoResponse(67kubernetes.Cluster, "demo-client", "test-server_virtual-outbounds_svc_80.foo:8080",68client.FromKubernetesPod(namespace, "demo-client"),69)70g.Expect(err).ToNot(HaveOccurred())71g.Expect(response.Instance).To(ContainSubstring("test-server"))72}, "30s", "1s").Should(Succeed())73})74
75It("virtual outbounds on statefulSet", func() {76virtualOutboundAll := `77apiVersion: kuma.io/v1alpha1
78kind: VirtualOutbound
79mesh: virtual-outbounds
80metadata:
81name: instance
82spec:
83selectors:
84- match:
85kuma.io/service: "*"
86statefulset.kubernetes.io/pod-name: "*"
87conf:
88host: "{{.svc}}.{{.inst}}"
89port: "8080"
90parameters:
91- name: "svc"
92tagKey: "kuma.io/service"
93- name: "inst"
94tagKey: "statefulset.kubernetes.io/pod-name"
95`
96err := YamlK8s(virtualOutboundAll)(kubernetes.Cluster)97Expect(err).ToNot(HaveOccurred())98
99Eventually(func(g Gomega) {100response, err := client.CollectEchoResponse(101kubernetes.Cluster, "demo-client", "test-server_virtual-outbounds_svc_80.test-server-0:8080",102client.FromKubernetesPod(namespace, "demo-client"),103)104g.Expect(err).ToNot(HaveOccurred())105g.Expect(response.Instance).To(Equal("test-server-0"))106}, "30s", "1s").Should(Succeed())107
108Eventually(func(g Gomega) {109response, err := client.CollectEchoResponse(110kubernetes.Cluster, "demo-client", "test-server_virtual-outbounds_svc_80.test-server-1:8080",111client.FromKubernetesPod(namespace, "demo-client"),112)113g.Expect(err).ToNot(HaveOccurred())114g.Expect(response.Instance).To(ContainSubstring("test-server-1"))115}, "30s", "1s").Should(Succeed())116})117}
118