kuma
98 строк · 2.8 Кб
1package observability
2
3import (
4"fmt"
5
6. "github.com/onsi/ginkgo/v2"
7. "github.com/onsi/gomega"
8
9. "github.com/kumahq/kuma/test/framework"
10"github.com/kumahq/kuma/test/framework/client"
11"github.com/kumahq/kuma/test/framework/deployments/democlient"
12obs "github.com/kumahq/kuma/test/framework/deployments/observability"
13"github.com/kumahq/kuma/test/framework/deployments/testserver"
14"github.com/kumahq/kuma/test/framework/envs/kubernetes"
15)
16
17func meshWithTracing(name, zipkinURL string) string {
18return fmt.Sprintf(`
19apiVersion: kuma.io/v1alpha1
20kind: Mesh
21metadata:
22name: %s
23spec:
24tracing:
25defaultBackend: zipkin
26backends:
27- name: zipkin
28type: zipkin
29conf:
30url: %s
31`, name, zipkinURL)
32}
33
34func trafficTrace(mesh, namespace string) string {
35return fmt.Sprintf(`
36apiVersion: kuma.io/v1alpha1
37kind: TrafficTrace
38mesh: %s
39metadata:
40namespace: %s
41name: trace-all
42spec:
43selectors:
44- match:
45kuma.io/service: '*'
46`, mesh, namespace)
47}
48
49func Tracing() {
50ns := "tracing"
51obsNs := "obs-tracing"
52obsDeployment := "obs-tracing-deployment"
53mesh := "tracing"
54
55var obsClient obs.Observability
56BeforeAll(func() {
57err := NewClusterSetup().
58Install(NamespaceWithSidecarInjection(ns)).
59Install(MeshKubernetes(mesh)).
60Install(democlient.Install(democlient.WithNamespace(ns), democlient.WithMesh(mesh))).
61Install(testserver.Install(testserver.WithMesh(mesh), testserver.WithNamespace(ns))).
62Install(obs.Install(obsDeployment, obs.WithNamespace(obsNs), obs.WithComponents(obs.JaegerComponent))).
63Install(TrafficRouteKubernetes(mesh)).
64Install(TrafficPermissionKubernetes(mesh)).
65Setup(kubernetes.Cluster)
66Expect(err).ToNot(HaveOccurred())
67obsClient = obs.From(obsDeployment, kubernetes.Cluster)
68})
69E2EAfterAll(func() {
70Expect(kubernetes.Cluster.TriggerDeleteNamespace(ns)).To(Succeed())
71Expect(kubernetes.Cluster.DeleteMesh(mesh)).To(Succeed())
72Expect(kubernetes.Cluster.DeleteDeployment(obsDeployment)).To(Succeed())
73})
74
75It("should emit traces to jaeger", func() {
76// given TrafficTrace and mesh with tracing backend
77err := YamlK8s(meshWithTracing(mesh, obsClient.ZipkinCollectorURL()))(kubernetes.Cluster)
78Expect(err).ToNot(HaveOccurred())
79err = YamlK8s(trafficTrace(mesh, ns))(kubernetes.Cluster)
80Expect(err).ToNot(HaveOccurred())
81
82Eventually(func(g Gomega) {
83_, err := client.CollectEchoResponse(
84kubernetes.Cluster, "demo-client", "test-server",
85client.FromKubernetesPod(ns, "demo-client"),
86)
87g.Expect(err).ToNot(HaveOccurred())
88// then traces are published
89srvs, err := obsClient.TracedServices()
90g.Expect(err).ToNot(HaveOccurred())
91g.Expect(srvs).To(Equal([]string{
92fmt.Sprintf("demo-client_%s_svc", ns),
93"jaeger-query",
94fmt.Sprintf("test-server_%s_svc_80", ns),
95}))
96}, "30s", "1s").Should(Succeed())
97})
98}
99