Skip to content

Commit 02ffe31

Browse files
authored
[chore] Simplify functional tests (#1721)
Remove redundant sync.Once
1 parent 15a1e1d commit 02ffe31

File tree

5 files changed

+114
-166
lines changed

5 files changed

+114
-166
lines changed

functional_tests/configuration_switching/configuration_switching_test.go

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"os"
1111
"path/filepath"
1212
"strings"
13-
"sync"
1413
"testing"
1514
"text/template"
1615
"time"
@@ -39,28 +38,12 @@ const (
3938

4039
var globalSinks *sinks
4140

42-
var setupRun = sync.Once{}
43-
4441
type sinks struct {
4542
logsConsumer *consumertest.LogsSink
4643
hecMetricsConsumer *consumertest.MetricsSink
4744
logsObjectsConsumer *consumertest.LogsSink
4845
}
4946

50-
func setupOnce(t *testing.T) *sinks {
51-
setupRun.Do(func() {
52-
globalSinks = &sinks{
53-
logsConsumer: internal.SetupHECLogsSink(t),
54-
hecMetricsConsumer: internal.SetupHECMetricsSink(t),
55-
logsObjectsConsumer: internal.SetupHECObjectsSink(t),
56-
}
57-
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
58-
teardown(t)
59-
}
60-
})
61-
return globalSinks
62-
}
63-
6447
func deployChartsAndApps(t *testing.T, valuesFileName string, repl map[string]interface{}) {
6548
testKubeConfig, setKubeConfig := os.LookupEnv("KUBECONFIG")
6649
require.True(t, setKubeConfig, "the environment variable KUBECONFIG must be set")
@@ -155,7 +138,15 @@ func waitForAllDeploymentsToStart(t *testing.T, client *kubernetes.Clientset) {
155138
}
156139

157140
func Test_Functions(t *testing.T) {
158-
_ = setupOnce(t)
141+
globalSinks = &sinks{
142+
logsConsumer: internal.SetupHECLogsSink(t),
143+
hecMetricsConsumer: internal.SetupHECMetricsSink(t),
144+
logsObjectsConsumer: internal.SetupHECObjectsSink(t),
145+
}
146+
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
147+
teardown(t)
148+
}
149+
159150
if os.Getenv("SKIP_TESTS") == "true" {
160151
t.Log("Skipping tests as SKIP_TESTS is set to true")
161152
return
@@ -174,8 +165,8 @@ func Test_Functions(t *testing.T) {
174165
func testAgentLogsAndMetrics(t *testing.T) {
175166

176167
valuesFileName := "values_logs_and_metrics_switching.yaml.tmpl"
177-
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
178-
agentLogsConsumer := setupOnce(t).logsConsumer
168+
hecMetricsConsumer := globalSinks.hecMetricsConsumer
169+
agentLogsConsumer := globalSinks.logsConsumer
179170

180171
t.Run("check logs and metrics received when both are enabled", func(t *testing.T) {
181172
internal.ResetLogsSink(t, agentLogsConsumer)
@@ -238,9 +229,9 @@ func testIndexSwitch(t *testing.T) {
238229
var nonDefaultSourcetype = "my-sourcetype"
239230

240231
valuesFileName := "values_indexes_switching.yaml.tmpl"
241-
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
232+
hecMetricsConsumer := globalSinks.hecMetricsConsumer
242233
internal.CheckNoMetricsReceived(t, hecMetricsConsumer)
243-
agentLogsConsumer := setupOnce(t).logsConsumer
234+
agentLogsConsumer := globalSinks.logsConsumer
244235
internal.CheckNoEventsReceived(t, agentLogsConsumer)
245236

246237
t.Run("check logs and metrics index switching", func(t *testing.T) {
@@ -306,7 +297,7 @@ func testIndexSwitch(t *testing.T) {
306297
func testClusterReceiverEnabledOrDisabled(t *testing.T) {
307298
valuesFileName := "values_cluster_receiver_switching.yaml.tmpl"
308299
namespace := "default"
309-
logsObjectsConsumer := setupOnce(t).logsObjectsConsumer
300+
logsObjectsConsumer := globalSinks.logsObjectsConsumer
310301
hostEp := internal.HostEndpoint(t)
311302
if len(hostEp) == 0 {
312303
require.Fail(t, "Host endpoint not found")
@@ -354,7 +345,7 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
354345

355346
t.Run("verify cluster receiver attributes", func(t *testing.T) {
356347
valuesFileName := "values_cluster_receiver_only.yaml.tmpl"
357-
logsObjectsConsumer := setupOnce(t).logsObjectsConsumer
348+
logsObjectsConsumer := globalSinks.logsObjectsConsumer
358349
logsObjectsHecEndpoint := fmt.Sprintf("http://%s:%d/services/collector", hostEp, internal.HECObjectsReceiverPort)
359350

360351
replacements := map[string]interface{}{
@@ -377,7 +368,7 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
377368

378369
t.Run("verify cluster receiver metrics attributes", func(t *testing.T) {
379370
valuesFileName := "values_cluster_receiver_only.yaml.tmpl"
380-
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
371+
hecMetricsConsumer := globalSinks.hecMetricsConsumer
381372
logsObjectsHecEndpoint := fmt.Sprintf("http://%s:%d/services/collector", hostEp, internal.HECObjectsReceiverPort)
382373

383374
replacements := map[string]interface{}{
@@ -400,7 +391,7 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
400391

401392
t.Run("verify agent logs attributes", func(t *testing.T) {
402393
valuesFileName := "values_logs_and_metrics_switching.yaml.tmpl"
403-
agentLogsConsumer := setupOnce(t).logsConsumer
394+
agentLogsConsumer := globalSinks.logsConsumer
404395

405396
replacements := map[string]interface{}{
406397
"MetricsEnabled": true,
@@ -421,7 +412,7 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
421412

422413
t.Run("verify metrics attributes", func(t *testing.T) {
423414
valuesFileName := "values_logs_and_metrics_switching.yaml.tmpl"
424-
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
415+
hecMetricsConsumer := globalSinks.hecMetricsConsumer
425416

426417
replacements := map[string]interface{}{
427418
"MetricsEnabled": true,

functional_tests/functional/functional_test.go

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"path/filepath"
1212
"regexp"
1313
"strings"
14-
"sync"
1514
"testing"
1615
"text/template"
1716
"time"
@@ -69,8 +68,6 @@ var archRe = regexp.MustCompile("-amd64$|-arm64$|-ppc64le$")
6968

7069
var globalSinks *sinks
7170

72-
var setupRun = sync.Once{}
73-
7471
var expectedValuesDir string
7572

7673
type sinks struct {
@@ -82,36 +79,20 @@ type sinks struct {
8279
tracesConsumer *consumertest.TracesSink
8380
}
8481

85-
func setupOnce(t *testing.T) *sinks {
86-
setupRun.Do(func() {
87-
// create an API server
88-
internal.SetupSignalFxApiServer(t)
89-
globalSinks = &sinks{
90-
logsConsumer: internal.SetupHECLogsSink(t),
91-
hecMetricsConsumer: internal.SetupHECMetricsSink(t),
92-
logsObjectsConsumer: internal.SetupHECObjectsSink(t),
93-
agentMetricsConsumer: internal.SetupSignalfxReceiver(t, signalFxReceiverPort),
94-
k8sclusterReceiverMetricsConsumer: internal.SetupSignalfxReceiver(t,
95-
signalFxReceiverK8sClusterReceiverPort),
96-
tracesConsumer: internal.SetupOTLPTracesSink(t),
97-
}
98-
99-
testKubeConfig, setKubeConfig := os.LookupEnv("KUBECONFIG")
100-
require.True(t, setKubeConfig, "the environment variable KUBECONFIG must be set")
101-
internal.AcquireLeaseForTest(t, testKubeConfig)
102-
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
103-
teardown(t, testKubeConfig)
104-
}
105-
// deploy the chart and applications.
106-
if os.Getenv("SKIP_SETUP") == "true" {
107-
t.Log("Skipping setup as SKIP_SETUP is set to true")
108-
return
109-
}
110-
deployChartsAndApps(t, testKubeConfig)
111-
})
112-
113-
return globalSinks
82+
func setupSinks(t *testing.T) {
83+
// create an API server
84+
internal.SetupSignalFxApiServer(t)
85+
globalSinks = &sinks{
86+
logsConsumer: internal.SetupHECLogsSink(t),
87+
hecMetricsConsumer: internal.SetupHECMetricsSink(t),
88+
logsObjectsConsumer: internal.SetupHECObjectsSink(t),
89+
agentMetricsConsumer: internal.SetupSignalfxReceiver(t, signalFxReceiverPort),
90+
k8sclusterReceiverMetricsConsumer: internal.SetupSignalfxReceiver(t,
91+
signalFxReceiverK8sClusterReceiverPort),
92+
tracesConsumer: internal.SetupOTLPTracesSink(t),
93+
}
11494
}
95+
11596
func deployChartsAndApps(t *testing.T, testKubeConfig string) {
11697
kubeTestEnv, setKubeTestEnv := os.LookupEnv("KUBE_TEST_ENV")
11798
require.True(t, setKubeTestEnv, "the environment variable KUBE_TEST_ENV must be set")
@@ -546,7 +527,23 @@ func teardown(t *testing.T, testKubeConfig string) {
546527
}
547528

548529
func Test_Functions(t *testing.T) {
549-
_ = setupOnce(t)
530+
setupSinks(t)
531+
532+
testKubeConfig, setKubeConfig := os.LookupEnv("KUBECONFIG")
533+
require.True(t, setKubeConfig, "the environment variable KUBECONFIG must be set")
534+
535+
internal.AcquireLeaseForTest(t, testKubeConfig)
536+
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
537+
teardown(t, testKubeConfig)
538+
}
539+
540+
// deploy the chart and applications.
541+
if os.Getenv("SKIP_SETUP") == "true" {
542+
t.Log("Skipping setup as SKIP_SETUP is set to true")
543+
} else {
544+
deployChartsAndApps(t, testKubeConfig)
545+
}
546+
550547
if os.Getenv("SKIP_TESTS") == "true" {
551548
t.Log("Skipping tests as SKIP_TESTS is set to true")
552549
return
@@ -577,7 +574,7 @@ func Test_Functions(t *testing.T) {
577574
}
578575

579576
func testNodeJSTraces(t *testing.T) {
580-
tracesConsumer := setupOnce(t).tracesConsumer
577+
tracesConsumer := globalSinks.tracesConsumer
581578

582579
var expectedTraces ptrace.Traces
583580
expectedTracesFile := filepath.Join(testDir, expectedValuesDir, "expected_nodejs_traces.yaml")
@@ -644,7 +641,7 @@ func testNodeJSTraces(t *testing.T) {
644641
}
645642

646643
func testPythonTraces(t *testing.T) {
647-
tracesConsumer := setupOnce(t).tracesConsumer
644+
tracesConsumer := globalSinks.tracesConsumer
648645

649646
var expectedTraces ptrace.Traces
650647
expectedTracesFile := filepath.Join(testDir, expectedValuesDir, "expected_python_traces.yaml")
@@ -713,7 +710,7 @@ func testPythonTraces(t *testing.T) {
713710
}
714711

715712
func testJavaTraces(t *testing.T) {
716-
tracesConsumer := setupOnce(t).tracesConsumer
713+
tracesConsumer := globalSinks.tracesConsumer
717714

718715
var expectedTraces ptrace.Traces
719716
expectedTracesFile := filepath.Join(testDir, expectedValuesDir, "expected_java_traces.yaml")
@@ -777,7 +774,7 @@ func testJavaTraces(t *testing.T) {
777774
}
778775

779776
func testDotNetTraces(t *testing.T) {
780-
tracesConsumer := setupOnce(t).tracesConsumer
777+
tracesConsumer := globalSinks.tracesConsumer
781778

782779
var expectedTraces ptrace.Traces
783780
expectedTracesFile := filepath.Join(testDir, expectedValuesDir, "expected_dotnet_traces.yaml")
@@ -887,7 +884,7 @@ func shortenNames(value string) string {
887884
}
888885

889886
func testK8sClusterReceiverMetrics(t *testing.T) {
890-
metricsConsumer := setupOnce(t).k8sclusterReceiverMetricsConsumer
887+
metricsConsumer := globalSinks.k8sclusterReceiverMetricsConsumer
891888
expectedMetricsFile := filepath.Join(testDir, expectedValuesDir, "expected_cluster_receiver.yaml")
892889
expectedMetrics, err := golden.ReadMetrics(expectedMetricsFile)
893890
require.NoError(t, err)
@@ -967,7 +964,7 @@ func testK8sClusterReceiverMetrics(t *testing.T) {
967964

968965
func testAgentLogs(t *testing.T) {
969966

970-
logsConsumer := setupOnce(t).logsConsumer
967+
logsConsumer := globalSinks.logsConsumer
971968
internal.WaitForLogs(t, 5, logsConsumer)
972969

973970
var helloWorldResource pcommon.Resource
@@ -1076,7 +1073,7 @@ func testAgentLogs(t *testing.T) {
10761073
}
10771074

10781075
func testK8sObjects(t *testing.T) {
1079-
logsObjectsConsumer := setupOnce(t).logsObjectsConsumer
1076+
logsObjectsConsumer := globalSinks.logsObjectsConsumer
10801077
internal.WaitForLogs(t, 5, logsObjectsConsumer)
10811078

10821079
var kinds []string
@@ -1125,7 +1122,7 @@ func testK8sObjects(t *testing.T) {
11251122
}
11261123

11271124
func testAgentMetrics(t *testing.T) {
1128-
agentMetricsConsumer := setupOnce(t).agentMetricsConsumer
1125+
agentMetricsConsumer := globalSinks.agentMetricsConsumer
11291126

11301127
metricNames := []string{
11311128
"container.filesystem.available",
@@ -1296,7 +1293,7 @@ func testAgentMetrics(t *testing.T) {
12961293
}
12971294

12981295
func testPrometheusAnnotationMetrics(t *testing.T) {
1299-
agentMetricsConsumer := setupOnce(t).agentMetricsConsumer
1296+
agentMetricsConsumer := globalSinks.agentMetricsConsumer
13001297

13011298
metricNames := []string{
13021299
"istio_agent_cert_expiry_seconds",
@@ -1358,7 +1355,7 @@ func selectMetricSet(expected pmetric.Metrics, metricName string, metricSink *co
13581355
}
13591356

13601357
func testHECMetrics(t *testing.T) {
1361-
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
1358+
hecMetricsConsumer := globalSinks.hecMetricsConsumer
13621359

13631360
metricNames := []string{
13641361
"container.cpu.time",

functional_tests/histogram/histogram_test.go

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os"
1010
"path/filepath"
1111
"strings"
12-
"sync"
1312
"testing"
1413
"text/template"
1514
"time"
@@ -18,7 +17,6 @@ import (
1817
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest/pmetrictest"
1918
"github.com/stretchr/testify/assert"
2019
"github.com/stretchr/testify/require"
21-
"go.opentelemetry.io/collector/consumer/consumertest"
2220
"go.opentelemetry.io/collector/pdata/pmetric"
2321
"gopkg.in/yaml.v3"
2422
"helm.sh/helm/v3/pkg/action"
@@ -33,28 +31,6 @@ const (
3331
valuesDir = "values"
3432
)
3533

36-
var setupRun = sync.Once{}
37-
38-
var histogramMetricsConsumer *consumertest.MetricsSink
39-
40-
func setupOnce(t *testing.T) *consumertest.MetricsSink {
41-
setupRun.Do(func() {
42-
histogramMetricsConsumer = internal.SetupSignalfxReceiver(t, otlpReceiverPort)
43-
44-
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
45-
teardown(t)
46-
}
47-
// deploy the chart and applications.
48-
if os.Getenv("SKIP_SETUP") == "true" {
49-
t.Log("Skipping setup as SKIP_SETUP is set to true")
50-
return
51-
}
52-
deployChartsAndApps(t)
53-
})
54-
55-
return histogramMetricsConsumer
56-
}
57-
5834
func deployChartsAndApps(t *testing.T) {
5935
testKubeConfig, setKubeConfig := os.LookupEnv("KUBECONFIG")
6036
require.True(t, setKubeConfig, "the environment variable KUBECONFIG must be set")
@@ -120,22 +96,28 @@ func teardown(t *testing.T) {
12096
}
12197

12298
func Test_Histograms(t *testing.T) {
123-
_ = setupOnce(t)
99+
otlpMetricsSink := internal.SetupSignalfxReceiver(t, otlpReceiverPort)
100+
101+
if os.Getenv("TEARDOWN_BEFORE_SETUP") == "true" {
102+
teardown(t)
103+
}
104+
// deploy the chart and applications.
105+
if os.Getenv("SKIP_SETUP") == "true" {
106+
t.Log("Skipping setup as SKIP_SETUP is set to true")
107+
} else {
108+
deployChartsAndApps(t)
109+
}
110+
124111
if os.Getenv("SKIP_TESTS") == "true" {
125112
t.Log("Skipping tests as SKIP_TESTS is set to true")
126113
return
127114
}
128115

129-
t.Run("histogram metrics captured", testHistogramMetrics)
130-
}
131-
132-
func testHistogramMetrics(t *testing.T) {
133116
k8sVersion := os.Getenv("K8S_VERSION")
134117
majorMinor := k8sVersion[0:strings.LastIndex(k8sVersion, ".")]
135118

136119
testDir := filepath.Join("testdata", "expected", majorMinor)
137120

138-
otlpMetricsSink := setupOnce(t)
139121
internal.WaitForMetrics(t, 5, otlpMetricsSink)
140122

141123
expectedKubeSchedulerMetricsFile := filepath.Join(testDir, "scheduler_metrics.yaml")

0 commit comments

Comments
 (0)