Skip to content

Commit 371565d

Browse files
committed
adding tests
1 parent 3e8108e commit 371565d

File tree

2 files changed

+251
-0
lines changed

2 files changed

+251
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package datadog.trace.core.baggage
2+
3+
import datadog.context.Context
4+
import datadog.trace.api.Config
5+
import datadog.trace.api.metrics.BaggageMetrics
6+
import datadog.trace.api.telemetry.CoreMetricCollector
7+
import spock.lang.Specification
8+
9+
class BaggagePropagatorTelemetryTest extends Specification {
10+
11+
def "should directly increment baggage metrics"() {
12+
given:
13+
def baggageMetrics = BaggageMetrics.getInstance()
14+
def collector = CoreMetricCollector.getInstance()
15+
16+
when:
17+
baggageMetrics.onBaggageInjected()
18+
collector.prepareMetrics()
19+
def metrics = collector.drain()
20+
21+
then:
22+
def baggageMetric = metrics.find { it.metricName == "context_header_style.injected" }
23+
baggageMetric != null
24+
baggageMetric.value >= 1
25+
baggageMetric.tags.contains("header_style:baggage")
26+
}
27+
28+
def "should increment telemetry counter when baggage is successfully extracted"() {
29+
given:
30+
def config = Mock(Config) {
31+
isBaggageExtract() >> true
32+
isBaggageInject() >> true
33+
getBaggageMaxItems() >> 64
34+
getBaggageMaxBytes() >> 8192
35+
}
36+
def propagator = new BaggagePropagator(config)
37+
def context = Context.root()
38+
def carrier = ["baggage": "key1=value1,key2=value2"]
39+
def visitor = { map, consumer ->
40+
map.each { k, v -> consumer.accept(k, v) }
41+
}
42+
def collector = CoreMetricCollector.getInstance()
43+
44+
when:
45+
propagator.extract(context, carrier, visitor)
46+
collector.prepareMetrics()
47+
def metrics = collector.drain()
48+
49+
then:
50+
def baggageMetric = metrics.find { it.metricName == "context_header_style.extracted" }
51+
baggageMetric != null
52+
baggageMetric.value >= 1
53+
baggageMetric.tags.contains("header_style:baggage")
54+
}
55+
56+
def "should directly increment all baggage metrics"() {
57+
given:
58+
def baggageMetrics = BaggageMetrics.getInstance()
59+
def collector = CoreMetricCollector.getInstance()
60+
61+
when:
62+
baggageMetrics.onBaggageInjected()
63+
baggageMetrics.onBaggageMalformed()
64+
baggageMetrics.onBaggageTruncatedByByteLimit()
65+
baggageMetrics.onBaggageTruncatedByItemLimit()
66+
collector.prepareMetrics()
67+
def metrics = collector.drain()
68+
69+
then:
70+
def injectedMetric = metrics.find { it.metricName == "context_header_style.injected" }
71+
injectedMetric != null
72+
injectedMetric.value == 1
73+
injectedMetric.tags.contains("header_style:baggage")
74+
75+
def malformedMetric = metrics.find { it.metricName == "context_header_style.malformed" }
76+
malformedMetric != null
77+
malformedMetric.value == 1
78+
malformedMetric.tags.contains("header_style:baggage")
79+
80+
def bytesTruncatedMetric = metrics.find {
81+
it.metricName == "context_header_style.truncated" &&
82+
it.tags.contains("truncation_reason:baggage_byte_count_exceeded")
83+
}
84+
bytesTruncatedMetric != null
85+
bytesTruncatedMetric.value == 1
86+
87+
def itemsTruncatedMetric = metrics.find {
88+
it.metricName == "context_header_style.truncated" &&
89+
it.tags.contains("truncation_reason:baggage_item_count_exceeded")
90+
}
91+
itemsTruncatedMetric != null
92+
itemsTruncatedMetric.value == 1
93+
}
94+
95+
def "should not increment telemetry counter when baggage extraction fails"() {
96+
given:
97+
def config = Mock(Config) {
98+
isBaggageExtract() >> true
99+
isBaggageInject() >> true
100+
getBaggageMaxItems() >> 64
101+
getBaggageMaxBytes() >> 8192
102+
}
103+
def propagator = new BaggagePropagator(config)
104+
def context = Context.root()
105+
def carrier = [:] // No baggage header
106+
def visitor = { map, consumer ->
107+
map.each { k, v -> consumer.accept(k, v) }
108+
}
109+
def collector = CoreMetricCollector.getInstance()
110+
111+
when:
112+
propagator.extract(context, carrier, visitor)
113+
collector.prepareMetrics()
114+
def metrics = collector.drain()
115+
116+
then:
117+
def foundMetrics = metrics.findAll { it.metricName.startsWith("context_header_style.") }
118+
foundMetrics.isEmpty() // No extraction occurred, so no metrics should be created
119+
}
120+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package datadog.trace.api.telemetry
2+
3+
import datadog.trace.api.metrics.BaggageMetrics
4+
import spock.lang.Specification
5+
6+
class CoreMetricCollectorBaggageTest extends Specification {
7+
8+
def "should collect baggage extraction metrics with header_style tag"() {
9+
given:
10+
def collector = CoreMetricCollector.getInstance()
11+
def baggageMetrics = BaggageMetrics.getInstance()
12+
13+
when:
14+
baggageMetrics.onBaggageExtracted()
15+
baggageMetrics.onBaggageExtracted()
16+
collector.prepareMetrics()
17+
def metrics = collector.drain()
18+
19+
then:
20+
def baggageMetric = metrics.find { it.metricName == "context_header_style.extracted" }
21+
baggageMetric != null
22+
baggageMetric.namespace == "tracers"
23+
baggageMetric.type == "count"
24+
baggageMetric.value == 2
25+
baggageMetric.tags.contains("header_style:baggage")
26+
baggageMetric.common == true
27+
}
28+
29+
def "should collect baggage injection metrics with header_style tag"() {
30+
given:
31+
def collector = CoreMetricCollector.getInstance()
32+
def baggageMetrics = BaggageMetrics.getInstance()
33+
34+
when:
35+
baggageMetrics.onBaggageInjected()
36+
collector.prepareMetrics()
37+
def metrics = collector.drain()
38+
39+
then:
40+
def baggageMetric = metrics.find { it.metricName == "context_header_style.injected" }
41+
baggageMetric != null
42+
baggageMetric.tags.contains("header_style:baggage")
43+
baggageMetric.value == 1
44+
}
45+
46+
def "should collect baggage malformed metrics with header_style tag"() {
47+
given:
48+
def collector = CoreMetricCollector.getInstance()
49+
def baggageMetrics = BaggageMetrics.getInstance()
50+
51+
when:
52+
baggageMetrics.onBaggageMalformed()
53+
collector.prepareMetrics()
54+
def metrics = collector.drain()
55+
56+
then:
57+
def baggageMetric = metrics.find { it.metricName == "context_header_style.malformed" }
58+
baggageMetric != null
59+
baggageMetric.tags.contains("header_style:baggage")
60+
baggageMetric.value == 1
61+
}
62+
63+
def "should collect baggage truncated metrics with byte count truncation_reason tag"() {
64+
given:
65+
def collector = CoreMetricCollector.getInstance()
66+
def baggageMetrics = BaggageMetrics.getInstance()
67+
68+
when:
69+
baggageMetrics.onBaggageTruncatedByByteLimit()
70+
collector.prepareMetrics()
71+
def metrics = collector.drain()
72+
73+
then:
74+
def baggageMetric = metrics.find {
75+
it.metricName == "context_header_style.truncated" &&
76+
it.tags.contains("truncation_reason:baggage_byte_count_exceeded")
77+
}
78+
baggageMetric != null
79+
baggageMetric.value == 1
80+
}
81+
82+
def "should collect baggage truncated metrics with item count truncation_reason tag"() {
83+
given:
84+
def collector = CoreMetricCollector.getInstance()
85+
def baggageMetrics = BaggageMetrics.getInstance()
86+
87+
when:
88+
baggageMetrics.onBaggageTruncatedByItemLimit()
89+
collector.prepareMetrics()
90+
def metrics = collector.drain()
91+
92+
then:
93+
def baggageMetric = metrics.find {
94+
it.metricName == "context_header_style.truncated" &&
95+
it.tags.contains("truncation_reason:baggage_item_count_exceeded")
96+
}
97+
baggageMetric != null
98+
baggageMetric.value == 1
99+
}
100+
101+
def "should not create baggage metrics when no events occurred"() {
102+
given:
103+
def collector = CoreMetricCollector.getInstance()
104+
105+
when:
106+
collector.prepareMetrics()
107+
def metrics = collector.drain()
108+
109+
then:
110+
def foundMetrics = metrics.findAll { it.metricName.startsWith("context_header_style.") }
111+
foundMetrics.isEmpty()
112+
}
113+
114+
def "should reset baggage counters after prepareMetrics"() {
115+
given:
116+
def collector = CoreMetricCollector.getInstance()
117+
def baggageMetrics = BaggageMetrics.getInstance()
118+
119+
when:
120+
baggageMetrics.onBaggageExtracted()
121+
baggageMetrics.onBaggageInjected()
122+
collector.prepareMetrics()
123+
collector.drain()
124+
collector.prepareMetrics()
125+
def metrics = collector.drain()
126+
127+
then:
128+
def foundMetrics = metrics.findAll { it.metricName.startsWith("context_header_style.") }
129+
foundMetrics.isEmpty()
130+
}
131+
}

0 commit comments

Comments
 (0)