Skip to content

Commit 3a32a4a

Browse files
authored
[chore] Move functional test to separate directories (#1694)
Move functional test to separate directories instead of using build tags
1 parent ce4a945 commit 3a32a4a

File tree

113 files changed

+162
-167
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+162
-167
lines changed

.github/workflows/functional_test_v2.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272
env:
7373
K8S_VERSION: ${{ matrix.k8s-version }}
7474
run: |
75-
TEARDOWN_BEFORE_SETUP=true UPDATE_EXPECTED_RESULTS=${{ env.UPLOAD_UPDATED_EXPECTED_RESULTS }} TAGS=${{ matrix.test-job }} make functionaltest
75+
TEARDOWN_BEFORE_SETUP=true UPDATE_EXPECTED_RESULTS=${{ env.UPLOAD_UPDATED_EXPECTED_RESULTS }} SUITE=${{ matrix.test-job }} make functionaltest
7676
- name: Collect Kubernetes Cluster debug info on failure
7777
if: always() && (steps.run-functional-tests.outcome == 'failure' || env.UPLOAD_KUBERNETES_DEBUG_INFO == 'true')
7878
id: collect-debug-info
@@ -129,7 +129,7 @@ jobs:
129129
env:
130130
HOST_ENDPOINT: 0.0.0.0
131131
run: |
132-
TEARDOWN_BEFORE_SETUP=true TAGS=functional make functionaltest
132+
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
133133
134134
eks-upgrade-test:
135135
name: Test helm upgrade in EKS - credentials needed
@@ -188,7 +188,7 @@ jobs:
188188
env:
189189
HOST_ENDPOINT: 0.0.0.0
190190
run: |
191-
TAGS=functional make functionaltest
191+
SUITE=functional make functionaltest
192192
193193
eks-upgrade-from-release-test:
194194
name: Test helm upgrade from release in EKS - credentials needed
@@ -243,7 +243,7 @@ jobs:
243243
env:
244244
HOST_ENDPOINT: 0.0.0.0
245245
run: |
246-
TAGS=functional make functionaltest
246+
SUITE=functional make functionaltest
247247
248248
gke-autopilot-test:
249249
name: Test helm install in GKE/Autopilot - credentials needed
@@ -281,7 +281,7 @@ jobs:
281281
env:
282282
HOST_ENDPOINT: 0.0.0.0
283283
run: |
284-
TEARDOWN_BEFORE_SETUP=true TAGS=functional make functionaltest
284+
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
285285
286286
gke-autopilot-upgrade-test:
287287
name: Test helm upgrade in GKE/Autopilot - credentials needed
@@ -340,7 +340,7 @@ jobs:
340340
env:
341341
HOST_ENDPOINT: 0.0.0.0
342342
run: |
343-
TAGS=functional make functionaltest
343+
SUITE=functional make functionaltest
344344
345345
aks-windows-test:
346346
name: Test helm install in AKS - credentials needed
@@ -379,7 +379,7 @@ jobs:
379379
env:
380380
HOST_ENDPOINT: 0.0.0.0
381381
run: |
382-
TEARDOWN_BEFORE_SETUP=true TAGS=functional make functionaltest
382+
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
383383
384384
gce-autopilot-test:
385385
name: Test helm install in GCE (kops) - credentials needed
@@ -410,4 +410,4 @@ jobs:
410410
HOST_ENDPOINT: 0.0.0.0
411411
KUBECONFIG: /tmp/kubeconfig
412412
run: |
413-
TEARDOWN_BEFORE_SETUP=true TAGS=functional make functionaltest
413+
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ unittest: ## Run unittests on the Helm chart
9494

9595
# Example Usage:
9696
# make functionaltest
97-
# make functionaltest SKIP_SETUP=true SKIP_TEARDOWN=true SKIP_TESTS=true TEARDOWN_BEFORE_SETUP=true TAGS="functional" UPDATE_EXPECTED_RESULTS=true KUBE_TEST_ENV="kind" KUBECONFIG="/path/to/kubeconfig"
97+
# make functionaltest SKIP_SETUP=true SKIP_TEARDOWN=true SKIP_TESTS=true TEARDOWN_BEFORE_SETUP=true SUITE="functional" UPDATE_EXPECTED_RESULTS=true KUBE_TEST_ENV="kind" KUBECONFIG="/path/to/kubeconfig"
9898
.PHONY: functionaltest
9999
functionaltest: ## Run functional tests for this Helm chart with optional tags and environment variables
100100
@echo "Running functional tests for this helm chart..."
101-
cd functional_tests && go test -v $(if $(TAGS),-tags $(TAGS)) || exit 1
101+
cd functional_tests && go test -v ./$(SUITE)/... || exit 1
102102

103103
##@ Changelog
104104
# Tasks related to changelog management

functional_tests/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ When running tests you can use the following env vars to help with local develop
2929
- `SKIP_TEARDOWN`: Skip cleanup (useful to keep apps for local dev).
3030
- `SKIP_TESTS`: Skip tests; only set up and tear down the cluster.
3131
- `TEARDOWN_BEFORE_SETUP`: Clean up deployments before setting up.
32-
- `TAGS`: Specify which tests to run (e.g., `TAGS="functional"`).
32+
- `SUITE`: Specify which test suite to run (e.g., `SUITE="functional"`).
3333
- `UPDATE_EXPECTED_RESULTS`: Generate new golden files for test results.
3434

3535
## Run

functional_tests/configuration_switching_test.go renamed to functional_tests/configuration_switching/configuration_switching_test.go

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
// Copyright Splunk Inc.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
//go:build configuration_switching
5-
6-
package functional_tests
4+
package configuration_switching
75

86
import (
97
"bytes"
@@ -28,7 +26,6 @@ import (
2826
"github.com/stretchr/testify/require"
2927
"go.opentelemetry.io/collector/consumer/consumertest"
3028
"helm.sh/helm/v3/pkg/action"
31-
"helm.sh/helm/v3/pkg/chart/loader"
3229
"helm.sh/helm/v3/pkg/kube"
3330
corev1 "k8s.io/api/core/v1"
3431
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -44,7 +41,7 @@ const (
4441
hecMetricsReceiverPort = 8091
4542
apiPort = 8881
4643
hecLogsObjectsReceiverPort = 8092
47-
testDir = "testdata_configuration_switching"
44+
testDir = "testdata"
4845
valuesDir = "values"
4946
)
5047

@@ -84,15 +81,13 @@ func deployChartsAndApps(t *testing.T, valuesFileName string, repl map[string]in
8481
client, err := kubernetes.NewForConfig(kubeConfig)
8582
require.NoError(t, err)
8683

87-
chartPath := filepath.Join("..", "helm-charts", "splunk-otel-collector")
88-
chart, err := loader.Load(chartPath)
89-
require.NoError(t, err)
84+
chart := internal.LoadCollectorChart(t)
9085

9186
var valuesBytes []byte
9287
valuesBytes, err = os.ReadFile(filepath.Join(testDir, valuesDir, valuesFileName))
9388
require.NoError(t, err)
9489

95-
hostEp := hostEndpoint(t)
90+
hostEp := internal.HostEndpoint(t)
9691
if len(hostEp) == 0 {
9792
require.Fail(t, "Host endpoint not found")
9893
}
@@ -195,55 +190,55 @@ func testAgentLogsAndMetrics(t *testing.T) {
195190
agentLogsConsumer := setupOnce(t).logsConsumer
196191

197192
t.Run("check logs and metrics received when both are enabled", func(t *testing.T) {
198-
resetLogsSink(t, agentLogsConsumer)
199-
resetMetricsSink(t, hecMetricsConsumer)
193+
internal.ResetLogsSink(t, agentLogsConsumer)
194+
internal.ResetMetricsSink(t, hecMetricsConsumer)
200195

201-
checkNoMetricsReceived(t, hecMetricsConsumer)
202-
checkNoEventsReceived(t, agentLogsConsumer)
196+
internal.CheckNoMetricsReceived(t, hecMetricsConsumer)
197+
internal.CheckNoEventsReceived(t, agentLogsConsumer)
203198

204199
replacements := map[string]interface{}{
205200
"MetricsEnabled": true,
206201
"LogsEnabled": true,
207202
}
208203
deployChartsAndApps(t, valuesFileName, replacements)
209204

210-
waitForMetrics(t, 5, hecMetricsConsumer)
211-
waitForLogs(t, 5, agentLogsConsumer)
205+
internal.WaitForMetrics(t, 5, hecMetricsConsumer)
206+
internal.WaitForLogs(t, 5, agentLogsConsumer)
212207
uninstallDeployment(t)
213208
})
214209

215210
t.Run("check metrics only enabled", func(t *testing.T) {
216-
resetLogsSink(t, agentLogsConsumer)
217-
resetMetricsSink(t, hecMetricsConsumer)
211+
internal.ResetLogsSink(t, agentLogsConsumer)
212+
internal.ResetMetricsSink(t, hecMetricsConsumer)
218213

219-
checkNoMetricsReceived(t, hecMetricsConsumer)
220-
checkNoEventsReceived(t, agentLogsConsumer)
214+
internal.CheckNoMetricsReceived(t, hecMetricsConsumer)
215+
internal.CheckNoEventsReceived(t, agentLogsConsumer)
221216

222217
replacements := map[string]interface{}{
223218
"MetricsEnabled": true,
224219
"LogsEnabled": false,
225220
}
226221
deployChartsAndApps(t, valuesFileName, replacements)
227222

228-
waitForMetrics(t, 5, hecMetricsConsumer)
229-
checkNoEventsReceived(t, agentLogsConsumer)
223+
internal.WaitForMetrics(t, 5, hecMetricsConsumer)
224+
internal.CheckNoEventsReceived(t, agentLogsConsumer)
230225
uninstallDeployment(t)
231226
})
232227

233228
t.Run("check logs only enabled", func(t *testing.T) {
234-
resetLogsSink(t, agentLogsConsumer)
235-
resetMetricsSink(t, hecMetricsConsumer)
229+
internal.ResetLogsSink(t, agentLogsConsumer)
230+
internal.ResetMetricsSink(t, hecMetricsConsumer)
236231

237232
replacements := map[string]interface{}{
238233
"MetricsEnabled": false,
239234
"LogsEnabled": true,
240235
}
241236
deployChartsAndApps(t, valuesFileName, replacements)
242237

243-
waitForLogs(t, 5, agentLogsConsumer)
238+
internal.WaitForLogs(t, 5, agentLogsConsumer)
244239
uninstallDeployment(t)
245-
resetLogsSink(t, agentLogsConsumer)
246-
resetMetricsSink(t, hecMetricsConsumer)
240+
internal.ResetLogsSink(t, agentLogsConsumer)
241+
internal.ResetMetricsSink(t, hecMetricsConsumer)
247242
})
248243
}
249244

@@ -256,9 +251,9 @@ func testIndexSwitch(t *testing.T) {
256251

257252
valuesFileName := "values_indexes_switching.yaml.tmpl"
258253
hecMetricsConsumer := setupOnce(t).hecMetricsConsumer
259-
checkNoMetricsReceived(t, hecMetricsConsumer)
254+
internal.CheckNoMetricsReceived(t, hecMetricsConsumer)
260255
agentLogsConsumer := setupOnce(t).logsConsumer
261-
checkNoEventsReceived(t, agentLogsConsumer)
256+
internal.CheckNoEventsReceived(t, agentLogsConsumer)
262257

263258
t.Run("check logs and metrics index switching", func(t *testing.T) {
264259
replacements := map[string]interface{}{
@@ -267,8 +262,8 @@ func testIndexSwitch(t *testing.T) {
267262
}
268263
deployChartsAndApps(t, valuesFileName, replacements)
269264

270-
waitForMetrics(t, 3, hecMetricsConsumer)
271-
waitForLogs(t, 3, agentLogsConsumer)
265+
internal.WaitForMetrics(t, 3, hecMetricsConsumer)
266+
internal.WaitForLogs(t, 3, agentLogsConsumer)
272267

273268
var sourcetypes []string
274269
var indices []string
@@ -291,11 +286,11 @@ func testIndexSwitch(t *testing.T) {
291286
"Sourcetype": nonDefaultSourcetype,
292287
}
293288
deployChartsAndApps(t, valuesFileName, replacements)
294-
resetLogsSink(t, agentLogsConsumer)
295-
resetMetricsSink(t, hecMetricsConsumer)
289+
internal.ResetLogsSink(t, agentLogsConsumer)
290+
internal.ResetMetricsSink(t, hecMetricsConsumer)
296291

297-
waitForMetrics(t, 3, hecMetricsConsumer)
298-
waitForLogs(t, 3, agentLogsConsumer)
292+
internal.WaitForMetrics(t, 3, hecMetricsConsumer)
293+
internal.WaitForLogs(t, 3, agentLogsConsumer)
299294
logs = agentLogsConsumer.AllLogs()
300295
sourcetypes, indices = getLogsIndexAndSourceType(logs)
301296
t.Logf("Indices: %v", indices)
@@ -308,15 +303,15 @@ func testIndexSwitch(t *testing.T) {
308303
assert.True(t, mIndices[0] == newMetricsIndex)
309304
})
310305
uninstallDeployment(t)
311-
resetLogsSink(t, agentLogsConsumer)
312-
resetMetricsSink(t, hecMetricsConsumer)
306+
internal.ResetLogsSink(t, agentLogsConsumer)
307+
internal.ResetMetricsSink(t, hecMetricsConsumer)
313308
}
314309

315310
func testClusterReceiverEnabledOrDisabled(t *testing.T) {
316311
valuesFileName := "values_cluster_receiver_switching.yaml.tmpl"
317312
namespace := "default"
318313
logsObjectsConsumer := setupOnce(t).logsObjectsConsumer
319-
hostEp := hostEndpoint(t)
314+
hostEp := internal.HostEndpoint(t)
320315
if len(hostEp) == 0 {
321316
require.Fail(t, "Host endpoint not found")
322317
}
@@ -332,30 +327,30 @@ func testClusterReceiverEnabledOrDisabled(t *testing.T) {
332327
pods = listPodsInNamespace(t, namespace)
333328
assert.True(t, len(pods.Items) == 1)
334329
assert.True(t, strings.HasPrefix(pods.Items[0].Name, "sock-splunk-otel-collector-agent"))
335-
checkNoEventsReceived(t, logsObjectsConsumer)
330+
internal.CheckNoEventsReceived(t, logsObjectsConsumer)
336331

337332
t.Log("cluster receiver enabled")
338333
replacements = map[string]interface{}{
339334
"ClusterReceiverEnabled": true,
340335
"LogObjectsHecEndpoint": logsObjectsHecEndpoint,
341336
}
342337
deployChartsAndApps(t, valuesFileName, replacements)
343-
resetLogsSink(t, logsObjectsConsumer)
338+
internal.ResetLogsSink(t, logsObjectsConsumer)
344339

345340
pods = listPodsInNamespace(t, namespace)
346341
assert.True(t, len(pods.Items) == 2)
347342
assert.True(t, checkPodExists(pods, "sock-splunk-otel-collector-agent"))
348343
assert.True(t, checkPodExists(pods, "sock-splunk-otel-collector-k8s-cluster-receiver"))
349-
waitForLogs(t, 5, logsObjectsConsumer)
344+
internal.WaitForLogs(t, 5, logsObjectsConsumer)
350345
})
351346
uninstallDeployment(t)
352-
resetLogsSink(t, logsObjectsConsumer)
347+
internal.ResetLogsSink(t, logsObjectsConsumer)
353348
}
354349

355350
func testVerifyLogsAndMetricsAttributes(t *testing.T) {
356351
attributesList := [4]string{"k8s.node.name", "k8s.pod.name", "k8s.pod.uid", "k8s.namespace.name"}
357352

358-
hostEp := hostEndpoint(t)
353+
hostEp := internal.HostEndpoint(t)
359354
if len(hostEp) == 0 {
360355
require.Fail(t, "Host endpoint not found")
361356
}
@@ -370,8 +365,8 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
370365
"LogObjectsHecEndpoint": logsObjectsHecEndpoint,
371366
}
372367
deployChartsAndApps(t, valuesFileName, replacements)
373-
resetLogsSink(t, logsObjectsConsumer)
374-
waitForLogs(t, 5, logsObjectsConsumer)
368+
internal.ResetLogsSink(t, logsObjectsConsumer)
369+
internal.WaitForLogs(t, 5, logsObjectsConsumer)
375370
t.Logf("===> >>>> Logs: %v", len(logsObjectsConsumer.AllLogs()))
376371

377372
for _, attr := range attributesList {
@@ -393,10 +388,10 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
393388
"LogObjectsHecEndpoint": logsObjectsHecEndpoint,
394389
}
395390
deployChartsAndApps(t, valuesFileName, replacements)
396-
resetMetricsSink(t, hecMetricsConsumer)
391+
internal.ResetMetricsSink(t, hecMetricsConsumer)
397392
t.Logf("===> >>>> Metrics: %d", len(hecMetricsConsumer.AllMetrics()))
398393

399-
waitForMetrics(t, 5, hecMetricsConsumer)
394+
internal.WaitForMetrics(t, 5, hecMetricsConsumer)
400395
for _, attr := range attributesList {
401396
t.Log("Checking attributes: ", attr)
402397
attrValues, notFoundCounter := getMetricsAttributes(hecMetricsConsumer.AllMetrics(), attr)
@@ -415,9 +410,9 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
415410
"LogsEnabled": true,
416411
}
417412
deployChartsAndApps(t, valuesFileName, replacements)
418-
resetLogsSink(t, agentLogsConsumer)
413+
internal.ResetLogsSink(t, agentLogsConsumer)
419414

420-
waitForLogs(t, 5, agentLogsConsumer)
415+
internal.WaitForLogs(t, 5, agentLogsConsumer)
421416
for _, attr := range attributesList {
422417
t.Log("Checking attribute: ", attr)
423418
attrValues, notFoundCounter := getLogsAttributes(agentLogsConsumer.AllLogs(), attr)
@@ -436,9 +431,9 @@ func testVerifyLogsAndMetricsAttributes(t *testing.T) {
436431
"LogsEnabled": true,
437432
}
438433
deployChartsAndApps(t, valuesFileName, replacements)
439-
resetMetricsSink(t, hecMetricsConsumer)
434+
internal.ResetMetricsSink(t, hecMetricsConsumer)
440435

441-
waitForMetrics(t, 5, hecMetricsConsumer)
436+
internal.WaitForMetrics(t, 5, hecMetricsConsumer)
442437
for _, attr := range attributesList {
443438
t.Log("Checking attribute: ", attr)
444439
attrValues, notFoundCounter := getMetricsAttributes(hecMetricsConsumer.AllMetrics(), attr)

0 commit comments

Comments
 (0)