1
1
package suite
2
2
3
3
import (
4
- "context"
5
4
"fmt"
6
- "os/exec"
7
5
"strings"
8
- "time"
9
6
10
7
. "github.com/onsi/ginkgo/v2"
11
8
. "github.com/onsi/gomega"
12
9
core "k8s.io/api/core/v1"
13
- apierrors "k8s.io/apimachinery/pkg/api/errors"
14
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
- crClient "sigs.k8s.io/controller-runtime/pkg/client"
16
- )
17
10
18
- const (
19
- collectorNamespace = "collector"
20
- collectorChartReleaseName = "otel-collector"
21
- // FIXME(pleshakov): Find a automated way to keep the version updated here similar to dependabot.
22
- // https://github.com/nginxinc/nginx-gateway-fabric/issues/1665
23
- collectorChartVersion = "0.73.1"
11
+ "github.com/nginxinc/nginx-gateway-fabric/tests/framework"
24
12
)
25
13
26
14
var _ = Describe ("Telemetry test with OTel collector" , Label ("telemetry" ), func () {
27
15
BeforeEach (func () {
28
16
// Because NGF reports telemetry on start, we need to install the collector first.
29
17
30
18
// Install collector
31
- output , err := installCollector ()
19
+ output , err := framework . InstallCollector ()
32
20
Expect (err ).ToNot (HaveOccurred (), string (output ))
33
21
34
22
// Install NGF
@@ -41,22 +29,13 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func(
41
29
})
42
30
43
31
AfterEach (func () {
44
- output , err := uninstallCollector ( )
32
+ output , err := framework . UninstallCollector ( resourceManager )
45
33
Expect (err ).ToNot (HaveOccurred (), string (output ))
46
34
})
47
35
48
36
It ("sends telemetry" , func () {
49
- names , err := resourceManager .GetPodNames (
50
- collectorNamespace ,
51
- crClient.MatchingLabels {
52
- "app.kubernetes.io/name" : "opentelemetry-collector" ,
53
- },
54
- )
55
-
37
+ name , err := framework .GetCollectorPodName (resourceManager )
56
38
Expect (err ).ToNot (HaveOccurred ())
57
- Expect (names ).To (HaveLen (1 ))
58
-
59
- name := names [0 ]
60
39
61
40
// We assert that all data points were sent
62
41
// For some data points, as a sanity check, we assert on sent values.
@@ -68,15 +47,15 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func(
68
47
Expect (err ).ToNot (HaveOccurred ())
69
48
70
49
matchFirstExpectedLine := func () bool {
71
- logs , err := resourceManager .GetPodLogs (collectorNamespace , name , & core.PodLogOptions {})
50
+ logs , err := resourceManager .GetPodLogs (framework . CollectorNamespace , name , & core.PodLogOptions {})
72
51
Expect (err ).ToNot (HaveOccurred ())
73
52
return strings .Contains (logs , "dataType: Str(ngf-product-telemetry)" )
74
53
}
75
54
76
55
// Wait until the collector has received the telemetry data
77
56
Eventually (matchFirstExpectedLine , "30s" , "5s" ).Should (BeTrue ())
78
57
79
- logs , err := resourceManager .GetPodLogs (collectorNamespace , name , & core.PodLogOptions {})
58
+ logs , err := resourceManager .GetPodLogs (framework . CollectorNamespace , name , & core.PodLogOptions {})
80
59
Expect (err ).ToNot (HaveOccurred ())
81
60
82
61
assertConsecutiveLinesInLogs (
@@ -107,54 +86,6 @@ var _ = Describe("Telemetry test with OTel collector", Label("telemetry"), func(
107
86
})
108
87
})
109
88
110
- func installCollector () ([]byte , error ) {
111
- repoAddArgs := []string {
112
- "repo" ,
113
- "add" ,
114
- "open-telemetry" ,
115
- "https://open-telemetry.github.io/opentelemetry-helm-charts" ,
116
- }
117
-
118
- if output , err := exec .Command ("helm" , repoAddArgs ... ).CombinedOutput (); err != nil {
119
- return output , err
120
- }
121
-
122
- args := []string {
123
- "install" ,
124
- collectorChartReleaseName ,
125
- "open-telemetry/opentelemetry-collector" ,
126
- "--create-namespace" ,
127
- "--namespace" , collectorNamespace ,
128
- "--version" , collectorChartVersion ,
129
- "-f" , "manifests/telemetry/collector-values.yaml" ,
130
- "--wait" ,
131
- }
132
-
133
- return exec .Command ("helm" , args ... ).CombinedOutput ()
134
- }
135
-
136
- func uninstallCollector () ([]byte , error ) {
137
- args := []string {
138
- "uninstall" , collectorChartReleaseName ,
139
- "--namespace" , collectorNamespace ,
140
- }
141
-
142
- output , err := exec .Command ("helm" , args ... ).CombinedOutput ()
143
- if err != nil {
144
- return output , err
145
- }
146
-
147
- ctx , cancel := context .WithTimeout (context .Background (), 5 * time .Minute )
148
- defer cancel ()
149
-
150
- err = k8sClient .Delete (ctx , & core.Namespace {ObjectMeta : metav1.ObjectMeta {Name : collectorNamespace }})
151
- if err != nil && ! apierrors .IsNotFound (err ) {
152
- return nil , err
153
- }
154
-
155
- return nil , resourceManager .DeleteNamespace (collectorNamespace )
156
- }
157
-
158
89
func assertConsecutiveLinesInLogs (logs string , expectedLines []string ) {
159
90
lines := strings .Split (logs , "\n " )
160
91
0 commit comments