2
2
// under the Apache License Version 2.0.
3
3
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4
4
// Copyright 2016 Datadog, Inc.
5
- package valkey_test
5
+ package valkey
6
6
7
7
import (
8
8
"context"
@@ -14,9 +14,10 @@ import (
14
14
"github.com/stretchr/testify/assert"
15
15
"github.com/stretchr/testify/require"
16
16
"github.com/valkey-io/valkey-go"
17
- valkeytrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/valkey-go "
17
+ "gopkg.in/DataDog/dd-trace-go.v1/ddtrace "
18
18
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
19
19
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer"
20
+ "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
20
21
)
21
22
22
23
var (
@@ -35,11 +36,89 @@ func TestMain(m *testing.M) {
35
36
os .Exit (m .Run ())
36
37
}
37
38
39
+ func TestPeerTags (t * testing.T ) {
40
+ tests := []struct {
41
+ initAddress string
42
+ expectedTags map [string ]interface {}
43
+ }{
44
+ {
45
+ initAddress : "127.0.0.1:6379" ,
46
+ expectedTags : map [string ]interface {}{
47
+ ext .PeerService : "valkey" ,
48
+ ext .PeerHostIPV4 : "127.0.0.1" ,
49
+ ext .PeerPort : 6379 ,
50
+ },
51
+ },
52
+ {
53
+ initAddress : "[::1]:6379" ,
54
+ expectedTags : map [string ]interface {}{
55
+ ext .PeerService : "valkey" ,
56
+ ext .PeerHostIPV6 : "::1" ,
57
+ ext .PeerPort : 6379 ,
58
+ },
59
+ },
60
+ {
61
+ initAddress : "[2001:db8::2]:6379" ,
62
+ expectedTags : map [string ]interface {}{
63
+ ext .PeerService : "valkey" ,
64
+ ext .PeerHostIPV6 : "2001:db8::2" ,
65
+ ext .PeerPort : 6379 ,
66
+ },
67
+ },
68
+ {
69
+ initAddress : "[2001:db8::2%lo]:6379" ,
70
+ expectedTags : map [string ]interface {}{
71
+ ext .PeerService : "valkey" ,
72
+ ext .PeerHostname : "2001:db8::2%lo" ,
73
+ ext .PeerPort : 6379 ,
74
+ },
75
+ },
76
+ {
77
+ initAddress : "::1:7777" ,
78
+ expectedTags : map [string ]interface {}{
79
+ ext .PeerService : "valkey" ,
80
+ ext .PeerHostname : "" ,
81
+ ext .PeerPort : 0 ,
82
+ },
83
+ },
84
+ {
85
+ initAddress : ":::7777" ,
86
+ expectedTags : map [string ]interface {}{
87
+ ext .PeerService : "valkey" ,
88
+ ext .PeerHostname : "" ,
89
+ ext .PeerPort : 0 ,
90
+ },
91
+ },
92
+ {
93
+ initAddress : "localhost:7777" ,
94
+ expectedTags : map [string ]interface {}{
95
+ ext .PeerService : "valkey" ,
96
+ ext .PeerHostname : "localhost" ,
97
+ ext .PeerPort : 7777 ,
98
+ },
99
+ },
100
+ }
101
+ for _ , tt := range tests {
102
+ t .Run (tt .initAddress , func (t * testing.T ) {
103
+ host , port := splitHostPort (tt .initAddress )
104
+ client := coreClient {
105
+ host : host ,
106
+ port : port ,
107
+ }
108
+ var startSpanConfig ddtrace.StartSpanConfig
109
+ for _ , tag := range client .peerTags () {
110
+ tag (& startSpanConfig )
111
+ }
112
+ require .Equal (t , tt .expectedTags , startSpanConfig .Tags )
113
+ })
114
+ }
115
+ }
116
+
38
117
func TestNewClient (t * testing.T ) {
39
118
tests := []struct {
40
119
name string
41
120
valkeyClientOptions valkey.ClientOption
42
- valkeytraceClientOptions []valkeytrace. ClientOption
121
+ valkeytraceClientOptions []ClientOption
43
122
valkeytraceClientEnvVars map [string ]string
44
123
createSpans func (* testing.T , context.Context , valkey.Client )
45
124
assertNewClientError func (* testing.T , error )
@@ -74,19 +153,15 @@ func TestNewClient(t *testing.T) {
74
153
Username : valkeyUsername ,
75
154
Password : valkeyPassword ,
76
155
},
77
- valkeytraceClientOptions : []valkeytrace.ClientOption {
78
- valkeytrace .WithServiceName ("my-valkey-client" ),
79
- valkeytrace .WithAnalytics (true ),
80
- valkeytrace .WithSkipRawCommand (true ),
156
+ valkeytraceClientOptions : []ClientOption {
157
+ WithAnalytics (true ),
158
+ WithSkipRawCommand (true ),
81
159
},
82
160
createSpans : func (t * testing.T , ctx context.Context , client valkey.Client ) {
83
161
assert .NoError (t , client .Do (ctx , client .B ().Set ().Key ("test_key" ).Value ("test_value" ).Build ()).Error ())
84
162
},
85
163
assertSpans : []func (t * testing.T , span mocktracer.Span ){
86
164
func (t * testing.T , span mocktracer.Span ) {
87
- assert .Equal (t , "my-valkey-client" , span .Tag (ext .ServiceName ))
88
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
89
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
90
165
assert .Equal (t , "SET" , span .Tag (ext .DBStatement ))
91
166
assert .Equal (t , "SET" , span .Tag (ext .ResourceName ))
92
167
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
@@ -119,9 +194,6 @@ func TestNewClient(t *testing.T) {
119
194
},
120
195
assertSpans : []func (t * testing.T , span mocktracer.Span ){
121
196
func (t * testing.T , span mocktracer.Span ) {
122
- assert .Equal (t , "valkey.client" , span .Tag (ext .ServiceName ))
123
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
124
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
125
197
assert .Equal (t , "SET\n test_key\n test_value\n GET\n test_key" , span .Tag (ext .DBStatement ))
126
198
assert .Equal (t , "SET\n test_key\n test_value\n GET\n test_key" , span .Tag (ext .ResourceName ))
127
199
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
@@ -155,9 +227,6 @@ func TestNewClient(t *testing.T) {
155
227
},
156
228
assertSpans : []func (t * testing.T , span mocktracer.Span ){
157
229
func (t * testing.T , span mocktracer.Span ) {
158
- assert .Equal (t , "valkey.client" , span .Tag (ext .ServiceName ))
159
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
160
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
161
230
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
162
231
assert .Equal (t , "HMGET\n mk\n 1\n 2" , span .Tag (ext .DBStatement ))
163
232
assert .Equal (t , "HMGET\n mk\n 1\n 2" , span .Tag (ext .ResourceName ))
@@ -175,9 +244,6 @@ func TestNewClient(t *testing.T) {
175
244
assert .Nil (t , span .Tag (ext .Error ))
176
245
},
177
246
func (t * testing.T , span mocktracer.Span ) {
178
- assert .Equal (t , "valkey.client" , span .Tag (ext .ServiceName ))
179
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
180
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
181
247
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
182
248
assert .Equal (t , "HMGET\n mk\n 1\n 2" , span .Tag (ext .DBStatement ))
183
249
assert .Equal (t , "HMGET\n mk\n 1\n 2" , span .Tag (ext .ResourceName ))
@@ -204,7 +270,6 @@ func TestNewClient(t *testing.T) {
204
270
Password : valkeyPassword ,
205
271
},
206
272
valkeytraceClientEnvVars : map [string ]string {
207
- "DD_TRACE_VALKEY_SERVICE_NAME" : "my-valkey-client" ,
208
273
"DD_TRACE_VALKEY_ANALYTICS_ENABLED" : "true" ,
209
274
"DD_TRACE_VALKEY_SKIP_RAW_COMMAND" : "true" ,
210
275
},
@@ -214,9 +279,6 @@ func TestNewClient(t *testing.T) {
214
279
},
215
280
assertSpans : []func (t * testing.T , span mocktracer.Span ){
216
281
func (t * testing.T , span mocktracer.Span ) {
217
- assert .Equal (t , "my-valkey-client" , span .Tag (ext .ServiceName ))
218
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
219
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
220
282
assert .Equal (t , "GET" , span .Tag (ext .DBStatement ))
221
283
assert .Equal (t , "GET" , span .Tag (ext .ResourceName ))
222
284
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
@@ -252,9 +314,6 @@ func TestNewClient(t *testing.T) {
252
314
},
253
315
assertSpans : []func (t * testing.T , span mocktracer.Span ){
254
316
func (t * testing.T , span mocktracer.Span ) {
255
- assert .Equal (t , "valkey.client" , span .Tag (ext .ServiceName ))
256
- assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
257
- assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
258
317
assert .Greater (t , span .Tag ("db.stmt_size" ), 0 )
259
318
assert .Equal (t , "SUBSCRIBE\n test_channel" , span .Tag (ext .DBStatement ))
260
319
assert .Equal (t , "SUBSCRIBE\n test_channel" , span .Tag (ext .ResourceName ))
@@ -276,25 +335,40 @@ func TestNewClient(t *testing.T) {
276
335
}
277
336
for _ , tt := range tests {
278
337
t .Run (tt .name , func (t * testing.T ) {
279
- ctx := context .Background ()
280
338
mt := mocktracer .Start ()
281
339
defer mt .Stop ()
282
340
for k , v := range tt .valkeytraceClientEnvVars {
283
341
t .Setenv (k , v )
284
342
}
285
- client , err := valkeytrace .NewClient (tt .valkeyClientOptions , tt .valkeytraceClientOptions ... )
343
+ span , ctx := tracer .StartSpanFromContext (context .Background (), "test.root" , tracer .ServiceName ("test-service" ))
344
+ client , err := NewClient (tt .valkeyClientOptions , tt .valkeytraceClientOptions ... )
286
345
if tt .assertNewClientError == nil {
287
346
require .NoErrorf (t , err , tt .name )
288
347
} else {
289
348
tt .assertNewClientError (t , err )
349
+ span .Finish ()
290
350
return
291
351
}
292
352
tt .createSpans (t , ctx , client )
353
+ span .Finish () // test.root exists in the last span.
293
354
spans := mt .FinishedSpans ()
294
- require .Len (t , spans , len (tt .assertSpans ))
355
+ require .Len (t , spans , len (tt .assertSpans )+ 1 ) // +1 for test.root
295
356
for i , span := range spans {
357
+ if span .OperationName () == "test.root" {
358
+ continue
359
+ }
296
360
tt .assertSpans [i ](t , span )
297
- // Following assertions are common to all spans
361
+ t .Log ("Following assertions are common to all spans" )
362
+ assert .Equalf (t ,
363
+ "test-service" ,
364
+ span .Tag (ext .ServiceName ),
365
+ "service name should not be overwritten as per DD_APM_PEER_TAGS_AGGREGATION in trace-agent" ,
366
+ )
367
+ assert .Equal (t , "valkey" , span .Tag (ext .PeerService ))
368
+ assert .Equal (t , "127.0.0.1" , span .Tag (ext .PeerHostIPV4 ))
369
+ assert .Equal (t , "127.0.0.1" , span .Tag (ext .TargetHost ))
370
+ assert .Equal (t , valkeyPort , span .Tag (ext .PeerPort ))
371
+ assert .Equal (t , valkeyPort , span .Tag (ext .TargetPort ))
298
372
assert .NotNil (t , span )
299
373
assert .True (t , span .Tag (ext .ValkeyClientCommandWithPassword ).(bool ))
300
374
assert .Equal (t , tt .valkeyClientOptions .Username , span .Tag (ext .DBUser ))
@@ -304,6 +378,7 @@ func TestNewClient(t *testing.T) {
304
378
assert .Equal (t , "valkey-go/valkey" , span .Tag (ext .Component ))
305
379
assert .Equal (t , "valkey" , span .Tag (ext .DBType ))
306
380
assert .Equal (t , "valkey" , span .Tag (ext .DBSystem ))
381
+ assert .Equal (t , "valkey" , span .Tag (ext .DBInstance ))
307
382
}
308
383
})
309
384
}
0 commit comments