@@ -38,6 +38,9 @@ import (
3838 "go.opentelemetry.io/otel/attribute"
3939 "go.opentelemetry.io/otel/sdk/metric/metricdata"
4040 "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest"
41+ "go.uber.org/zap"
42+ "go.uber.org/zap/zapcore"
43+ "go.uber.org/zap/zaptest/observer"
4144)
4245
4346var (
@@ -123,6 +126,7 @@ func TestGetCountFunc_Profiles(t *testing.T) {
123126}
124127
125128func TestConsume_Logs (t * testing.T ) {
129+
126130 rateLimiter := newTestLocalRateLimiter (t , & Config {
127131 Type : LocalRateLimiter ,
128132 RateLimitSettings : RateLimitSettings {
@@ -134,6 +138,7 @@ func TestConsume_Logs(t *testing.T) {
134138 err := rateLimiter .Start (context .Background (), componenttest .NewNopHost ())
135139 require .NoError (t , err )
136140
141+ observedZapCore , observedLogs := observer .New (zapcore .ErrorLevel )
137142 tt := componenttest .NewTelemetry ()
138143 telemetryBuilder , err := metadata .NewTelemetryBuilder (tt .NewTelemetrySettings ())
139144 require .NoError (t , err )
@@ -142,6 +147,7 @@ func TestConsume_Logs(t *testing.T) {
142147 rl := rateLimiterProcessor {
143148 rl : rateLimiter ,
144149 telemetryBuilder : telemetryBuilder ,
150+ logger : zap .New (observedZapCore ),
145151 inflight : & inflight ,
146152 metadataKeys : []string {"x-tenant-id" },
147153 }
@@ -166,6 +172,7 @@ func TestConsume_Logs(t *testing.T) {
166172 assert .False (t , consumed )
167173 assert .EqualError (t , err , "rpc error: code = ResourceExhausted desc = too many requests" )
168174
175+ testRatelimitLogMetadata (t , observedLogs .TakeAll ())
169176 testRateLimitTelemetry (t , tt )
170177}
171178
@@ -181,6 +188,7 @@ func TestConsume_Metrics(t *testing.T) {
181188 err := rateLimiter .Start (context .Background (), componenttest .NewNopHost ())
182189 require .NoError (t , err )
183190
191+ observedZapCore , observedLogs := observer .New (zapcore .ErrorLevel )
184192 tt := componenttest .NewTelemetry ()
185193 telemetryBuilder , err := metadata .NewTelemetryBuilder (tt .NewTelemetrySettings ())
186194 require .NoError (t , err )
@@ -189,6 +197,7 @@ func TestConsume_Metrics(t *testing.T) {
189197 rl := rateLimiterProcessor {
190198 rl : rateLimiter ,
191199 telemetryBuilder : telemetryBuilder ,
200+ logger : zap .New (observedZapCore ),
192201 inflight : & inflight ,
193202 metadataKeys : []string {"x-tenant-id" },
194203 }
@@ -213,6 +222,7 @@ func TestConsume_Metrics(t *testing.T) {
213222 assert .False (t , consumed )
214223 assert .EqualError (t , err , "rpc error: code = ResourceExhausted desc = too many requests" )
215224
225+ testRatelimitLogMetadata (t , observedLogs .TakeAll ())
216226 testRateLimitTelemetry (t , tt )
217227}
218228
@@ -228,6 +238,7 @@ func TestConsume_Traces(t *testing.T) {
228238 err := rateLimiter .Start (context .Background (), componenttest .NewNopHost ())
229239 require .NoError (t , err )
230240
241+ observedZapCore , observedLogs := observer .New (zapcore .ErrorLevel )
231242 tt := componenttest .NewTelemetry ()
232243 telemetryBuilder , err := metadata .NewTelemetryBuilder (tt .NewTelemetrySettings ())
233244 require .NoError (t , err )
@@ -236,6 +247,7 @@ func TestConsume_Traces(t *testing.T) {
236247 rl := rateLimiterProcessor {
237248 rl : rateLimiter ,
238249 telemetryBuilder : telemetryBuilder ,
250+ logger : zap .New (observedZapCore ),
239251 inflight : & inflight ,
240252 metadataKeys : []string {"x-tenant-id" },
241253 }
@@ -260,6 +272,7 @@ func TestConsume_Traces(t *testing.T) {
260272 assert .False (t , consumed )
261273 assert .EqualError (t , err , "rpc error: code = ResourceExhausted desc = too many requests" )
262274
275+ testRatelimitLogMetadata (t , observedLogs .TakeAll ())
263276 testRateLimitTelemetry (t , tt )
264277}
265278
@@ -275,6 +288,7 @@ func TestConsume_Profiles(t *testing.T) {
275288 err := rateLimiter .Start (context .Background (), componenttest .NewNopHost ())
276289 require .NoError (t , err )
277290
291+ observedZapCore , observedLogs := observer .New (zapcore .ErrorLevel )
278292 tt := componenttest .NewTelemetry ()
279293 telemetryBuilder , err := metadata .NewTelemetryBuilder (tt .NewTelemetrySettings ())
280294 require .NoError (t , err )
@@ -284,6 +298,7 @@ func TestConsume_Profiles(t *testing.T) {
284298 rl := rateLimiterProcessor {
285299 rl : rateLimiter ,
286300 telemetryBuilder : telemetryBuilder ,
301+ logger : zap .New (observedZapCore ),
287302 inflight : & inflight ,
288303 metadataKeys : []string {"x-tenant-id" },
289304 }
@@ -308,6 +323,7 @@ func TestConsume_Profiles(t *testing.T) {
308323 assert .False (t , consumed )
309324 assert .EqualError (t , err , "rpc error: code = ResourceExhausted desc = too many requests" )
310325
326+ testRatelimitLogMetadata (t , observedLogs .TakeAll ())
311327 testRateLimitTelemetry (t , tt )
312328}
313329
@@ -420,3 +436,22 @@ func testRateLimitTelemetry(t *testing.T, tel *componenttest.Telemetry) {
420436 },
421437 }, metricdatatest .IgnoreValue (), metricdatatest .IgnoreTimestamp ())
422438}
439+
440+ func testRatelimitLogMetadata (t * testing.T , logEntries []observer.LoggedEntry ) {
441+ require .Len (t , logEntries , 1 , "Expected exactly one error log entry" )
442+ logEntry := logEntries [0 ]
443+ assert .Equal (t , zapcore .ErrorLevel , logEntry .Level )
444+
445+ fields := make (map [string ]interface {})
446+ for _ , field := range logEntry .Context {
447+ switch field .Type {
448+ case zapcore .StringType :
449+ fields [field .Key ] = field .String
450+ case zapcore .Int64Type :
451+ fields [field .Key ] = field .Integer
452+ }
453+ }
454+
455+ assert .Equal (t , "TestProjectID" , fields ["x-tenant-id" ])
456+ assert .Equal (t , int64 (1 ), fields ["hits" ])
457+ }
0 commit comments