@@ -7,6 +7,7 @@ package tracer
7
7
8
8
import (
9
9
"fmt"
10
+ "reflect"
10
11
"testing"
11
12
12
13
"gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig"
@@ -17,10 +18,28 @@ import (
17
18
"github.com/stretchr/testify/assert"
18
19
)
19
20
21
+ func mockGlobalClient (client telemetry.Client ) func () {
22
+ orig := telemetry .GlobalClient ()
23
+ telemetry .SwapClient (client )
24
+ return func () {
25
+ telemetry .SwapClient (orig )
26
+ }
27
+ }
28
+
29
+ func checkConfig (t * testing.T , cfgs []telemetry.Configuration , key string , value any ) {
30
+ for _ , c := range cfgs {
31
+ if c .Name == key && reflect .DeepEqual (c .Value , value ) {
32
+ return
33
+ }
34
+ }
35
+
36
+ t .Fatalf ("could not find configuration key %s with value %v" , key , value )
37
+ }
38
+
20
39
func TestTelemetryEnabled (t * testing.T ) {
21
40
t .Run ("tracer start" , func (t * testing.T ) {
22
41
telemetryClient := new (telemetrytest.MockClient )
23
- defer telemetry . MockGlobalClient (telemetryClient )()
42
+ defer mockGlobalClient (telemetryClient )()
24
43
25
44
Start (
26
45
WithDebugMode (true ),
@@ -43,30 +62,23 @@ func TestTelemetryEnabled(t *testing.T) {
43
62
44
63
assert .True (t , telemetryClient .Started )
45
64
telemetryClient .AssertNumberOfCalls (t , "ApplyOps" , 1 )
46
- telemetry . Check (t , telemetryClient .Configuration , "trace_debug_enabled" , true )
47
- telemetry . Check (t , telemetryClient .Configuration , "service" , "test-serv" )
48
- telemetry . Check (t , telemetryClient .Configuration , "env" , "test-env" )
49
- telemetry . Check (t , telemetryClient .Configuration , "runtime_metrics_enabled" , true )
50
- telemetry . Check (t , telemetryClient .Configuration , "stats_computation_enabled" , false )
51
- telemetry . Check (t , telemetryClient .Configuration , "trace_enabled" , true )
52
- telemetry . Check (t , telemetryClient .Configuration , "trace_span_attribute_schema" , 0 )
53
- telemetry . Check (t , telemetryClient .Configuration , "trace_peer_service_defaults_enabled" , true )
54
- telemetry . Check (t , telemetryClient .Configuration , "trace_peer_service_mapping" , "key:val" )
55
- telemetry . Check (t , telemetryClient .Configuration , "debug_stack_enabled" , false )
56
- telemetry . Check (t , telemetryClient .Configuration , "orchestrion_enabled" , false )
57
- telemetry . Check (t , telemetryClient .Configuration , "trace_sample_rate" , nil ) // default value is NaN which is sanitized to nil
58
- telemetry . Check (t , telemetryClient .Configuration , "trace_header_tags" , "key:val,key2:val2" )
59
- telemetry . Check (t , telemetryClient .Configuration , "trace_sample_rules" ,
65
+ checkConfig (t , telemetryClient .Configuration , "trace_debug_enabled" , true )
66
+ checkConfig (t , telemetryClient .Configuration , "service" , "test-serv" )
67
+ checkConfig (t , telemetryClient .Configuration , "env" , "test-env" )
68
+ checkConfig (t , telemetryClient .Configuration , "runtime_metrics_enabled" , true )
69
+ checkConfig (t , telemetryClient .Configuration , "stats_computation_enabled" , false )
70
+ checkConfig (t , telemetryClient .Configuration , "trace_enabled" , true )
71
+ checkConfig (t , telemetryClient .Configuration , "trace_span_attribute_schema" , 0 )
72
+ checkConfig (t , telemetryClient .Configuration , "trace_peer_service_defaults_enabled" , true )
73
+ checkConfig (t , telemetryClient .Configuration , "trace_peer_service_mapping" , "key:val" )
74
+ checkConfig (t , telemetryClient .Configuration , "debug_stack_enabled" , false )
75
+ checkConfig (t , telemetryClient .Configuration , "orchestrion_enabled" , false )
76
+ checkConfig (t , telemetryClient .Configuration , "trace_sample_rate" , nil ) // default value is NaN which is sanitized to nil
77
+ checkConfig (t , telemetryClient .Configuration , "trace_header_tags" , "key:val,key2:val2" )
78
+ checkConfig (t , telemetryClient .Configuration , "trace_sample_rules" ,
60
79
`[{"service":"test-serv","name":"op-name","resource":"resource-*","sample_rate":0.1,"tags":{"tag-a":"tv-a??"}}]` )
61
- telemetry .Check (t , telemetryClient .Configuration , "span_sample_rules" , "[]" )
62
- if metrics , ok := telemetryClient .Metrics [telemetry .NamespaceGeneral ]; ok {
63
- if initTime , ok := metrics ["init_time" ]; ok {
64
- assert .True (t , initTime > 0 )
65
- return
66
- }
67
- t .Fatalf ("could not find general init time in telemetry client metrics" )
68
- }
69
- t .Fatalf ("could not find tracer namespace in telemetry client metrics" )
80
+ checkConfig (t , telemetryClient .Configuration , "span_sample_rules" , "[]" )
81
+ assert .NotZero (t , telemetryClient .Distribution (telemetry .NamespaceTracers , "init_time" , nil ).Get ())
70
82
})
71
83
72
84
t .Run ("telemetry customer or dynamic rules" , func (t * testing.T ) {
@@ -79,15 +91,15 @@ func TestTelemetryEnabled(t *testing.T) {
79
91
rule .Provenance = prov
80
92
81
93
telemetryClient := new (telemetrytest.MockClient )
82
- defer telemetry . MockGlobalClient (telemetryClient )()
94
+ defer mockGlobalClient (telemetryClient )()
83
95
Start (WithService ("test-serv" ),
84
96
WithSamplingRules ([]SamplingRule {rule }),
85
97
)
86
98
defer globalconfig .SetServiceName ("" )
87
99
defer Stop ()
88
100
89
101
assert .True (t , telemetryClient .Started )
90
- telemetry . Check (t , telemetryClient .Configuration , "trace_sample_rules" ,
102
+ checkConfig (t , telemetryClient .Configuration , "trace_sample_rules" ,
91
103
fmt .Sprintf (`[{"service":"test-serv","name":"op-name","resource":"resource-*","sample_rate":0.1,"tags":{"tag-a":"tv-a??"},"provenance":"%s"}]` , prov .String ()))
92
104
}
93
105
})
@@ -104,23 +116,23 @@ func TestTelemetryEnabled(t *testing.T) {
104
116
}
105
117
106
118
telemetryClient := new (telemetrytest.MockClient )
107
- defer telemetry . MockGlobalClient (telemetryClient )()
119
+ defer mockGlobalClient (telemetryClient )()
108
120
Start (WithService ("test-serv" ),
109
121
WithSamplingRules (rules ),
110
122
)
111
123
defer globalconfig .SetServiceName ("" )
112
124
defer Stop ()
113
125
114
126
assert .True (t , telemetryClient .Started )
115
- telemetry . Check (t , telemetryClient .Configuration , "trace_sample_rules" ,
127
+ checkConfig (t , telemetryClient .Configuration , "trace_sample_rules" ,
116
128
`[{"service":"test-serv","name":"op-name","resource":"resource-*","sample_rate":0.1,"tags":{"tag-a":"tv-a??"}}]` )
117
- telemetry . Check (t , telemetryClient .Configuration , "span_sample_rules" ,
129
+ checkConfig (t , telemetryClient .Configuration , "span_sample_rules" ,
118
130
`[{"service":"test-serv","name":"op-name","sample_rate":0.1}]` )
119
131
})
120
132
121
133
t .Run ("tracer start with empty rules" , func (t * testing.T ) {
122
134
telemetryClient := new (telemetrytest.MockClient )
123
- defer telemetry . MockGlobalClient (telemetryClient )()
135
+ defer mockGlobalClient (telemetryClient )()
124
136
125
137
t .Setenv ("DD_TRACE_SAMPLING_RULES" , "" )
126
138
t .Setenv ("DD_SPAN_SAMPLING_RULES" , "" )
@@ -131,34 +143,35 @@ func TestTelemetryEnabled(t *testing.T) {
131
143
assert .True (t , telemetryClient .Started )
132
144
var cfgs []telemetry.Configuration
133
145
for _ , c := range telemetryClient .Configuration {
134
- cfgs = append (cfgs , telemetry .Sanitize (c ))
146
+ c .Value = telemetry .SanitizeConfigValue (c .Value )
147
+ cfgs = append (cfgs )
135
148
}
136
- telemetry . Check (t , cfgs , "trace_sample_rules" , "[]" )
137
- telemetry . Check (t , cfgs , "span_sample_rules" , "[]" )
149
+ checkConfig (t , cfgs , "trace_sample_rules" , "[]" )
150
+ checkConfig (t , cfgs , "span_sample_rules" , "[]" )
138
151
})
139
152
140
153
t .Run ("profiler start, tracer start" , func (t * testing.T ) {
141
154
telemetryClient := new (telemetrytest.MockClient )
142
- defer telemetry . MockGlobalClient (telemetryClient )()
155
+ defer mockGlobalClient (telemetryClient )()
143
156
profiler .Start ()
144
157
defer profiler .Stop ()
145
158
Start (
146
159
WithService ("test-serv" ),
147
160
)
148
161
defer globalconfig .SetServiceName ("" )
149
162
defer Stop ()
150
- telemetry . Check (t , telemetryClient .Configuration , "service" , "test-serv" )
163
+ checkConfig (t , telemetryClient .Configuration , "service" , "test-serv" )
151
164
telemetryClient .AssertNumberOfCalls (t , "ApplyOps" , 2 )
152
165
})
153
166
t .Run ("orchestrion telemetry" , func (t * testing.T ) {
154
167
telemetryClient := new (telemetrytest.MockClient )
155
- defer telemetry . MockGlobalClient (telemetryClient )()
168
+ defer mockGlobalClient (telemetryClient )()
156
169
157
170
Start (WithOrchestrion (map [string ]string {"k1" : "v1" , "k2" : "v2" }))
158
171
defer Stop ()
159
172
160
- telemetry . Check (t , telemetryClient .Configuration , "orchestrion_enabled" , true )
161
- telemetry . Check (t , telemetryClient .Configuration , "orchestrion_k1" , "v1" )
162
- telemetry . Check (t , telemetryClient .Configuration , "orchestrion_k2" , "v2" )
173
+ checkConfig (t , telemetryClient .Configuration , "orchestrion_enabled" , true )
174
+ checkConfig (t , telemetryClient .Configuration , "orchestrion_k1" , "v1" )
175
+ checkConfig (t , telemetryClient .Configuration , "orchestrion_k2" , "v2" )
163
176
})
164
177
}
0 commit comments