-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathtest_headers_b3multi.py
More file actions
158 lines (133 loc) · 6.3 KB
/
test_headers_b3multi.py
File metadata and controls
158 lines (133 loc) · 6.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import pytest
from utils.docker_fixtures.spec.trace import SAMPLING_PRIORITY_KEY, ORIGIN
from utils.docker_fixtures.spec.trace import span_has_no_parent
from utils.docker_fixtures.spec.trace import find_only_span
from utils import scenarios, features
from utils.docker_fixtures import TestAgentAPI
from .conftest import APMLibrary
parametrize = pytest.mark.parametrize
def enable_b3multi() -> pytest.MarkDecorator:
env = {
"DD_TRACE_PROPAGATION_STYLE_EXTRACT": "b3multi",
"DD_TRACE_PROPAGATION_STYLE_INJECT": "b3multi",
}
return parametrize("library_env", [env])
def enable_b3multi_single_key() -> pytest.MarkDecorator:
env = {
"DD_TRACE_PROPAGATION_STYLE": "b3multi",
}
return parametrize("library_env", [env])
def enable_case_insensitive_b3multi() -> pytest.MarkDecorator:
env1 = {
"DD_TRACE_PROPAGATION_STYLE_EXTRACT": "B3MULTI",
"DD_TRACE_PROPAGATION_STYLE_INJECT": "b3multi",
}
env2 = {
"DD_TRACE_PROPAGATION_STYLE": "B3multi",
}
return parametrize("library_env", [env1, env2])
@features.b3multi_headers_propagation
@scenarios.parametric
class Test_Headers_B3multi:
@enable_b3multi()
def test_headers_b3multi_extract_valid(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
"""Ensure that b3multi distributed tracing headers are extracted
and activated properly.
"""
with test_library:
test_library.dd_make_child_span_and_get_headers(
[
("x-b3-traceid", "000000000000000000000000075bcd15"),
("x-b3-spanid", "000000003ade68b1"),
("x-b3-sampled", "1"),
],
)
span = find_only_span(test_agent.wait_for_num_traces(1))
assert span.get("trace_id") == 123456789
assert span.get("parent_id") == 987654321
assert span["metrics"].get(SAMPLING_PRIORITY_KEY) == 1
assert span["meta"].get(ORIGIN) is None
@enable_b3multi()
def test_headers_b3multi_extract_invalid(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
"""Ensure that invalid b3multi distributed tracing headers are not extracted."""
with test_library:
test_library.dd_make_child_span_and_get_headers(
[
("x-b3-traceid", "0"),
("x-b3-spanid", "0"),
("x-b3-sampled", "1"),
]
)
span = find_only_span(test_agent.wait_for_num_traces(1))
assert span.get("trace_id") != 0
assert span_has_no_parent(span)
assert span["meta"].get(ORIGIN) is None
@enable_b3multi()
def test_headers_b3multi_inject_valid(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
"""Ensure that b3multi distributed tracing headers are injected properly."""
with test_library:
headers = test_library.dd_make_child_span_and_get_headers([])
span = find_only_span(test_agent.wait_for_num_traces(1))
b3_trace_id = headers["x-b3-traceid"]
b3_span_id = headers["x-b3-spanid"]
b3_sampling = headers["x-b3-sampled"]
assert len(b3_trace_id) == 16 or len(b3_trace_id) == 32
assert int(b3_trace_id[-16:], base=16) == span.get("trace_id")
assert int(b3_span_id, base=16) == span.get("span_id")
assert len(b3_span_id) == 16
assert b3_sampling == "1" if span["metrics"].get(SAMPLING_PRIORITY_KEY) > 0 else "0"
assert span["meta"].get(ORIGIN) is None
@enable_b3multi()
def test_headers_b3multi_propagate_valid(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
"""Ensure that b3multi distributed tracing headers are extracted
and injected properly.
"""
with test_library:
headers = test_library.dd_make_child_span_and_get_headers(
[
("x-b3-traceid", "000000000000000000000000075bcd15"),
("x-b3-spanid", "000000003ade68b1"),
("x-b3-sampled", "1"),
],
)
span = find_only_span(test_agent.wait_for_num_traces(1))
assert "x-b3-traceid" in headers
b3_trace_id = headers["x-b3-traceid"]
b3_span_id = headers["x-b3-spanid"]
b3_sampling = headers["x-b3-sampled"]
assert len(b3_trace_id) == 16 or len(b3_trace_id) == 32
assert int(b3_trace_id, base=16) == span.get("trace_id")
assert int(b3_span_id, base=16) == span.get("span_id")
assert len(b3_span_id) == 16
assert b3_sampling == "1"
assert span["meta"].get(ORIGIN) is None
@enable_b3multi()
def test_headers_b3multi_propagate_invalid(self, test_agent: TestAgentAPI, test_library: APMLibrary) -> None:
"""Ensure that invalid b3multi distributed tracing headers are not extracted
and the new span context is injected properly.
"""
with test_library:
headers = test_library.dd_make_child_span_and_get_headers(
[("x-b3-traceid", "0"), ("x-b3-spanid", "0"), ("x-b3-sampled", "1")]
)
span = find_only_span(test_agent.wait_for_num_traces(1))
assert span.get("trace_id") != 0
assert span.get("span_id") != 0
b3_trace_id = headers["x-b3-traceid"]
b3_span_id = headers["x-b3-spanid"]
b3_sampling = headers["x-b3-sampled"]
assert len(b3_trace_id) == 16 or len(b3_trace_id) == 32
assert int(b3_trace_id[-16:], base=16) == span.get("trace_id")
assert int(b3_span_id, base=16) == span.get("span_id")
assert len(b3_span_id) == 16
assert b3_sampling == "1" if span["metrics"].get(SAMPLING_PRIORITY_KEY) > 0 else "0"
assert span["meta"].get(ORIGIN) is None
@enable_b3multi_single_key()
def test_headers_b3multi_single_key_propagate_valid(self, test_agent: TestAgentAPI, test_library: APMLibrary):
"""Ensure that b3multi distributed tracing headers are extracted
and injected properly.
"""
self.test_headers_b3multi_propagate_valid(test_agent, test_library)
@enable_case_insensitive_b3multi()
def test_headers_b3multi_case_insensitive_propagate_valid(self, test_agent: TestAgentAPI, test_library: APMLibrary):
self.test_headers_b3multi_propagate_valid(test_agent, test_library)