@@ -27,6 +27,7 @@ import (
27
27
conventions "go.opentelemetry.io/collector/semconv/v1.9.0"
28
28
29
29
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
30
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
30
31
)
31
32
32
33
func TestNewWithDefaultConfig (t * testing.T ) {
@@ -45,10 +46,31 @@ func TestConsumeMetricsNoServer(t *testing.T) {
45
46
exportertest .NewNopCreateSettings ())
46
47
require .NoError (t , err )
47
48
require .NoError (t , exp .Start (context .Background (), componenttest .NewNopHost ()))
48
- require .Error (t , exp .ConsumeMetrics (context .Background (), generateLargeBatch ()))
49
+ require .Error (t , exp .ConsumeMetrics (context .Background (), generateSmallBatch ()))
49
50
require .NoError (t , exp .Shutdown (context .Background ()))
50
51
}
51
52
53
+ func TestConsumeMetricsWithResourceToTelemetry (t * testing.T ) {
54
+ addr := testutil .GetAvailableLocalAddress (t )
55
+ cs := newCarbonServer (t , addr , "test_0;k0=v0;k1=v1;service.name=test_carbon 0" )
56
+ // Each metric point will generate one Carbon line, set up the wait
57
+ // for all of them.
58
+ cs .start (t , 1 )
59
+
60
+ exp , err := newCarbonExporter (
61
+ & Config {
62
+ TCPAddr : confignet.TCPAddr {Endpoint : addr },
63
+ TimeoutSettings : exporterhelper.TimeoutSettings {Timeout : 5 * time .Second },
64
+ ResourceToTelemetryConfig : resourcetotelemetry.Settings {Enabled : true },
65
+ },
66
+ exportertest .NewNopCreateSettings ())
67
+ require .NoError (t , err )
68
+ require .NoError (t , exp .Start (context .Background (), componenttest .NewNopHost ()))
69
+ require .NoError (t , exp .ConsumeMetrics (context .Background (), generateSmallBatch ()))
70
+ assert .NoError (t , exp .Shutdown (context .Background ()))
71
+ cs .shutdownAndVerify (t )
72
+ }
73
+
52
74
func TestConsumeMetrics (t * testing.T ) {
53
75
if runtime .GOOS == "windows" {
54
76
t .Skip ("skipping test on windows, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/10147" )
@@ -94,7 +116,7 @@ func TestConsumeMetrics(t *testing.T) {
94
116
for _ , tt := range tests {
95
117
t .Run (tt .name , func (t * testing.T ) {
96
118
addr := testutil .GetAvailableLocalAddress (t )
97
- cs := newCarbonServer (t , addr )
119
+ cs := newCarbonServer (t , addr , "" )
98
120
// Each metric point will generate one Carbon line, set up the wait
99
121
// for all of them.
100
122
cs .start (t , tt .numProducers * tt .writesPerProducer * tt .md .DataPointCount ())
@@ -133,25 +155,21 @@ func TestConsumeMetrics(t *testing.T) {
133
155
}
134
156
135
157
func generateSmallBatch () pmetric.Metrics {
136
- metrics := pmetric .NewMetrics ()
137
- m := metrics .ResourceMetrics ().AppendEmpty ().ScopeMetrics ().AppendEmpty ().Metrics ().AppendEmpty ()
138
- m .SetName ("test_gauge" )
139
- dp := m .SetEmptyGauge ().DataPoints ().AppendEmpty ()
140
- dp .Attributes ().PutStr ("k0" , "v0" )
141
- dp .Attributes ().PutStr ("k1" , "v1" )
142
- dp .SetTimestamp (pcommon .NewTimestampFromTime (time .Now ()))
143
- dp .SetDoubleValue (123 )
144
- return metrics
158
+ return generateMetricsBatch (1 )
145
159
}
146
160
147
161
func generateLargeBatch () pmetric.Metrics {
162
+ return generateMetricsBatch (1024 )
163
+ }
164
+
165
+ func generateMetricsBatch (size int ) pmetric.Metrics {
148
166
ts := time .Now ()
149
167
metrics := pmetric .NewMetrics ()
150
168
rm := metrics .ResourceMetrics ().AppendEmpty ()
151
169
rm .Resource ().Attributes ().PutStr (conventions .AttributeServiceName , "test_carbon" )
152
170
ms := rm .ScopeMetrics ().AppendEmpty ().Metrics ()
153
171
154
- for i := 0 ; i < 1028 ; i ++ {
172
+ for i := 0 ; i < size ; i ++ {
155
173
m := ms .AppendEmpty ()
156
174
m .SetName ("test_" + strconv .Itoa (i ))
157
175
dp := m .SetEmptyGauge ().DataPoints ().AppendEmpty ()
@@ -165,19 +183,21 @@ func generateLargeBatch() pmetric.Metrics {
165
183
}
166
184
167
185
type carbonServer struct {
168
- ln * net.TCPListener
169
- doneServer * atomic.Bool
170
- wg sync.WaitGroup
186
+ ln * net.TCPListener
187
+ doneServer * atomic.Bool
188
+ wg sync.WaitGroup
189
+ expectedContainsValue string
171
190
}
172
191
173
- func newCarbonServer (t * testing.T , addr string ) * carbonServer {
192
+ func newCarbonServer (t * testing.T , addr string , expectedContainsValue string ) * carbonServer {
174
193
laddr , err := net .ResolveTCPAddr ("tcp" , addr )
175
194
require .NoError (t , err )
176
195
ln , err := net .ListenTCP ("tcp" , laddr )
177
196
require .NoError (t , err )
178
197
return & carbonServer {
179
- ln : ln ,
180
- doneServer : & atomic.Bool {},
198
+ ln : ln ,
199
+ doneServer : & atomic.Bool {},
200
+ expectedContainsValue : expectedContainsValue ,
181
201
}
182
202
}
183
203
@@ -198,14 +218,16 @@ func (cs *carbonServer) start(t *testing.T, numExpectedReq int) {
198
218
199
219
reader := bufio .NewReader (conn )
200
220
for {
201
- // Actual metric validation is done by other tests, here it
202
- // is just flow.
203
- _ , err := reader .ReadBytes (byte ('\n' ))
221
+ buf , err := reader .ReadBytes (byte ('\n' ))
204
222
if errors .Is (err , io .EOF ) {
205
223
return
206
224
}
207
225
require .NoError (t , err )
208
226
227
+ if cs .expectedContainsValue != "" {
228
+ assert .Contains (t , string (buf ), cs .expectedContainsValue )
229
+ }
230
+
209
231
cs .wg .Done ()
210
232
}
211
233
}(conn )
0 commit comments