Skip to content

Commit d4e4b27

Browse files
author
Ryan Fitzpatrick
committed
testutils: add Collector.WillFail(), connect Args, and specify config dynamically
1 parent b361a31 commit d4e4b27

File tree

4 files changed

+58
-9
lines changed

4 files changed

+58
-9
lines changed

tests/testutils/collector.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type Collector interface {
2424
WithEnv(env map[string]string) Collector
2525
WithLogger(logger *zap.Logger) Collector
2626
WithLogLevel(level string) Collector
27+
WillFail(fail bool) Collector
2728
Build() (Collector, error)
2829
Start() error
2930
Shutdown() error

tests/testutils/collector_container.go

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"io"
2323
"os"
24+
"strings"
2425

2526
"github.com/testcontainers/testcontainers-go"
2627
"go.uber.org/zap"
@@ -35,6 +36,7 @@ type CollectorContainer struct {
3536
Args []string
3637
Logger *zap.Logger
3738
LogLevel string
39+
Fail bool
3840
Container Container
3941
contextArchive io.Reader
4042
logConsumer collectorLogConsumer
@@ -57,7 +59,7 @@ func (collector CollectorContainer) WithConfigPath(path string) Collector {
5759
return &collector
5860
}
5961

60-
// []string{} by default, but currently a noop
62+
// []string{} by default
6163
func (collector CollectorContainer) WithArgs(args ...string) Collector {
6264
collector.Args = args
6365
return &collector
@@ -81,6 +83,11 @@ func (collector CollectorContainer) WithLogLevel(level string) Collector {
8183
return &collector
8284
}
8385

86+
func (collector CollectorContainer) WillFail(fail bool) Collector {
87+
collector.Fail = fail
88+
return &collector
89+
}
90+
8491
func (collector CollectorContainer) Build() (Collector, error) {
8592
if collector.Image == "" {
8693
collector.Image = "quay.io/signalfx/splunk-otel-collector:latest"
@@ -101,7 +108,18 @@ func (collector CollectorContainer) Build() (Collector, error) {
101108
}
102109
collector.Container = collector.Container.WithContextArchive(
103110
collector.contextArchive,
104-
).WithNetworkMode("host").WillWaitForLogs("Everything is ready. Begin running and processing data.")
111+
).WithNetworkMode("host")
112+
113+
if collector.Fail {
114+
collector.Container = collector.Container.WillWaitForLogs("")
115+
} else {
116+
collector.Container = collector.Container.WillWaitForLogs("Everything is ready. Begin running and processing data.")
117+
}
118+
119+
if len(collector.Args) > 0 {
120+
collector.Container = collector.Container.WithCmd(collector.Args...)
121+
}
122+
105123
collector.Container = *(collector.Container.Build())
106124

107125
return &collector, nil
@@ -128,7 +146,7 @@ func (collector *CollectorContainer) Shutdown() error {
128146
return collector.Container.Terminate(context.Background())
129147
}
130148

131-
func (collector CollectorContainer) buildContextArchive() (io.Reader, error) {
149+
func (collector *CollectorContainer) buildContextArchive() (io.Reader, error) {
132150
var buf bytes.Buffer
133151
tarWriter := tar.NewWriter(&buf)
134152

@@ -152,13 +170,26 @@ func (collector CollectorContainer) buildContextArchive() (io.Reader, error) {
152170
return nil, err
153171
}
154172

155-
dockerfile += `
156-
COPY config.yaml /etc/config.yaml
157-
ENV SPLUNK_CONFIG=/etc/config.yaml
173+
dockerfile += "COPY config.yaml /etc/config.yaml\n"
158174

159-
ENV SPLUNK_ACCESS_TOKEN=12345
160-
ENV SPLUNK_REALM=us0
161-
`
175+
// We need to tell the Collector to use the provided config
176+
// but only if not already done so in the test
177+
var configSetByArgs bool
178+
for _, c := range collector.Args {
179+
if strings.Contains(c, "--config") {
180+
configSetByArgs = true
181+
}
182+
}
183+
_, configSetByEnvVar := collector.Container.Env["SPLUNK_CONFIG"]
184+
if !configSetByArgs && !configSetByEnvVar {
185+
// only specify w/ args if none are used in the test
186+
if len(collector.Args) == 0 {
187+
collector.Args = append(collector.Args, "--config", "/etc/config.yaml")
188+
} else {
189+
// fallback to env var
190+
collector.Container.Env["SPLUNK_CONFIG"] = "/etc/config.yaml"
191+
}
192+
}
162193
}
163194

164195
header := tar.Header{

tests/testutils/collector_container_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,16 @@ func TestCollectorContainerBuilders(t *testing.T) {
4343
assert.Equal(t, []string{"arg_one", "arg_two", "arg_three"}, withArgs.Args)
4444
assert.Empty(t, builder.Args)
4545

46+
willFail, ok := builder.WillFail(true).(*CollectorContainer)
47+
require.True(t, ok)
48+
assert.True(t, willFail.Fail)
49+
assert.False(t, builder.Fail)
50+
51+
wontFail, ok := willFail.WillFail(false).(*CollectorContainer)
52+
require.True(t, ok)
53+
assert.False(t, wontFail.Fail)
54+
assert.True(t, willFail.Fail)
55+
4656
logger := zap.NewNop()
4757
withLogger, ok := builder.WithLogger(logger).(*CollectorContainer)
4858
require.True(t, ok)

tests/testutils/collector_process.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ type CollectorProcess struct {
3636
Env map[string]string
3737
Logger *zap.Logger
3838
LogLevel string
39+
Fail bool
3940
Process *subprocess.Subprocess
4041
subprocessConfig *subprocess.Config
4142
}
@@ -81,6 +82,12 @@ func (collector CollectorProcess) WithLogLevel(level string) Collector {
8182
return &collector
8283
}
8384

85+
// noop at this time
86+
func (collector CollectorProcess) WillFail(fail bool) Collector {
87+
collector.Fail = fail
88+
return &collector
89+
}
90+
8491
func (collector CollectorProcess) Build() (Collector, error) {
8592
if collector.ConfigPath == "" && collector.Args == nil {
8693
return nil, fmt.Errorf("you must specify a ConfigPath for your CollectorProcess before building")

0 commit comments

Comments
 (0)