@@ -21,6 +21,7 @@ import (
21
21
"fmt"
22
22
"io"
23
23
"os"
24
+ "strings"
24
25
25
26
"github.com/testcontainers/testcontainers-go"
26
27
"go.uber.org/zap"
@@ -35,6 +36,7 @@ type CollectorContainer struct {
35
36
Args []string
36
37
Logger * zap.Logger
37
38
LogLevel string
39
+ Fail bool
38
40
Container Container
39
41
contextArchive io.Reader
40
42
logConsumer collectorLogConsumer
@@ -57,7 +59,7 @@ func (collector CollectorContainer) WithConfigPath(path string) Collector {
57
59
return & collector
58
60
}
59
61
60
- // []string{} by default, but currently a noop
62
+ // []string{} by default
61
63
func (collector CollectorContainer ) WithArgs (args ... string ) Collector {
62
64
collector .Args = args
63
65
return & collector
@@ -81,6 +83,11 @@ func (collector CollectorContainer) WithLogLevel(level string) Collector {
81
83
return & collector
82
84
}
83
85
86
+ func (collector CollectorContainer ) WillFail (fail bool ) Collector {
87
+ collector .Fail = fail
88
+ return & collector
89
+ }
90
+
84
91
func (collector CollectorContainer ) Build () (Collector , error ) {
85
92
if collector .Image == "" {
86
93
collector .Image = "quay.io/signalfx/splunk-otel-collector:latest"
@@ -101,7 +108,18 @@ func (collector CollectorContainer) Build() (Collector, error) {
101
108
}
102
109
collector .Container = collector .Container .WithContextArchive (
103
110
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
+
105
123
collector .Container = * (collector .Container .Build ())
106
124
107
125
return & collector , nil
@@ -128,7 +146,7 @@ func (collector *CollectorContainer) Shutdown() error {
128
146
return collector .Container .Terminate (context .Background ())
129
147
}
130
148
131
- func (collector CollectorContainer ) buildContextArchive () (io.Reader , error ) {
149
+ func (collector * CollectorContainer ) buildContextArchive () (io.Reader , error ) {
132
150
var buf bytes.Buffer
133
151
tarWriter := tar .NewWriter (& buf )
134
152
@@ -152,13 +170,26 @@ func (collector CollectorContainer) buildContextArchive() (io.Reader, error) {
152
170
return nil , err
153
171
}
154
172
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 "
158
174
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
+ }
162
193
}
163
194
164
195
header := tar.Header {
0 commit comments