|
1 | 1 | import unittest |
| 2 | + |
2 | 3 | try: |
3 | 4 | from unittest.mock import MagicMock, patch |
4 | 5 | except ImportError: |
5 | 6 | from mock import MagicMock, patch |
6 | 7 |
|
7 | 8 | from ddtrace.helpers import get_correlation_ids |
8 | | -from datadog_lambda.constants import ( |
9 | | - SamplingPriority, |
10 | | - TraceHeader, |
11 | | - XraySubsegment, |
12 | | -) |
| 9 | +from ddtrace import tracer |
| 10 | + |
| 11 | +from datadog_lambda.constants import SamplingPriority, TraceHeader, XraySubsegment |
13 | 12 | from datadog_lambda.tracing import ( |
14 | 13 | extract_dd_trace_context, |
15 | 14 | get_dd_trace_context, |
16 | 15 | set_correlation_ids, |
17 | 16 | _convert_xray_trace_id, |
18 | 17 | _convert_xray_entity_id, |
19 | 18 | _convert_xray_sampling, |
| 19 | + dd_native_tracing_enabled, |
20 | 20 | ) |
21 | 21 |
|
22 | 22 |
|
23 | 23 | class TestExtractAndGetDDTraceContext(unittest.TestCase): |
24 | | - |
25 | 24 | def setUp(self): |
26 | | - patcher = patch('datadog_lambda.tracing.xray_recorder') |
| 25 | + global dd_native_tracing_enabled |
| 26 | + dd_native_tracing_enabled = False |
| 27 | + patcher = patch("datadog_lambda.tracing.xray_recorder") |
27 | 28 | self.mock_xray_recorder = patcher.start() |
28 | 29 | self.mock_xray_recorder.get_trace_entity.return_value = MagicMock( |
29 | | - id='ffff', |
30 | | - trace_id='1111', |
31 | | - sampled=True, |
| 30 | + id="ffff", trace_id="1111", sampled=True |
32 | 31 | ) |
33 | 32 | self.mock_current_subsegment = MagicMock() |
34 | | - self.mock_xray_recorder.current_subsegment.return_value = \ |
| 33 | + self.mock_xray_recorder.current_subsegment.return_value = ( |
35 | 34 | self.mock_current_subsegment |
| 35 | + ) |
36 | 36 | self.addCleanup(patcher.stop) |
37 | 37 |
|
38 | | - patcher = patch('datadog_lambda.tracing.is_lambda_context') |
| 38 | + patcher = patch("datadog_lambda.tracing.is_lambda_context") |
39 | 39 | self.mock_is_lambda_context = patcher.start() |
40 | 40 | self.mock_is_lambda_context.return_value = True |
41 | 41 | self.addCleanup(patcher.stop) |
42 | 42 |
|
| 43 | + def tearDown(self): |
| 44 | + global dd_native_tracing_enabled |
| 45 | + dd_native_tracing_enabled = False |
| 46 | + |
43 | 47 | def test_without_datadog_trace_headers(self): |
44 | | - extract_dd_trace_context({}) |
| 48 | + ctx = extract_dd_trace_context({}) |
| 49 | + self.assertDictEqual( |
| 50 | + ctx, |
| 51 | + { |
| 52 | + "trace-id": "4369", |
| 53 | + "parent-id": "65535", |
| 54 | + "sampling-priority": "2", |
| 55 | + "source": "xray", |
| 56 | + }, |
| 57 | + ) |
45 | 58 | self.assertDictEqual( |
46 | 59 | get_dd_trace_context(), |
47 | 60 | { |
48 | | - TraceHeader.TRACE_ID: '4369', |
49 | | - TraceHeader.PARENT_ID: '65535', |
50 | | - TraceHeader.SAMPLING_PRIORITY: '2', |
51 | | - } |
| 61 | + TraceHeader.TRACE_ID: "4369", |
| 62 | + TraceHeader.PARENT_ID: "65535", |
| 63 | + TraceHeader.SAMPLING_PRIORITY: "2", |
| 64 | + }, |
52 | 65 | ) |
53 | 66 |
|
54 | 67 | def test_with_incomplete_datadog_trace_headers(self): |
55 | | - extract_dd_trace_context({ |
56 | | - 'headers': { |
57 | | - TraceHeader.TRACE_ID: '123', |
58 | | - TraceHeader.PARENT_ID: '321', |
59 | | - } |
60 | | - }) |
| 68 | + ctx = extract_dd_trace_context( |
| 69 | + {"headers": {TraceHeader.TRACE_ID: "123", TraceHeader.PARENT_ID: "321"}} |
| 70 | + ) |
| 71 | + self.assertDictEqual( |
| 72 | + ctx, |
| 73 | + { |
| 74 | + "trace-id": "4369", |
| 75 | + "parent-id": "65535", |
| 76 | + "sampling-priority": "2", |
| 77 | + "source": "xray", |
| 78 | + }, |
| 79 | + ) |
61 | 80 | self.assertDictEqual( |
62 | 81 | get_dd_trace_context(), |
63 | 82 | { |
64 | | - TraceHeader.TRACE_ID: '4369', |
65 | | - TraceHeader.PARENT_ID: '65535', |
66 | | - TraceHeader.SAMPLING_PRIORITY: '2', |
67 | | - } |
| 83 | + TraceHeader.TRACE_ID: "4369", |
| 84 | + TraceHeader.PARENT_ID: "65535", |
| 85 | + TraceHeader.SAMPLING_PRIORITY: "2", |
| 86 | + }, |
68 | 87 | ) |
69 | 88 |
|
70 | 89 | def test_with_complete_datadog_trace_headers(self): |
71 | | - extract_dd_trace_context({ |
72 | | - 'headers': { |
73 | | - TraceHeader.TRACE_ID: '123', |
74 | | - TraceHeader.PARENT_ID: '321', |
75 | | - TraceHeader.SAMPLING_PRIORITY: '1', |
| 90 | + ctx = extract_dd_trace_context( |
| 91 | + { |
| 92 | + "headers": { |
| 93 | + TraceHeader.TRACE_ID: "123", |
| 94 | + TraceHeader.PARENT_ID: "321", |
| 95 | + TraceHeader.SAMPLING_PRIORITY: "1", |
| 96 | + } |
76 | 97 | } |
77 | | - }) |
| 98 | + ) |
| 99 | + self.assertDictEqual( |
| 100 | + ctx, |
| 101 | + { |
| 102 | + "trace-id": "123", |
| 103 | + "parent-id": "321", |
| 104 | + "sampling-priority": "1", |
| 105 | + "source": "event", |
| 106 | + }, |
| 107 | + ) |
78 | 108 | self.assertDictEqual( |
79 | 109 | get_dd_trace_context(), |
80 | 110 | { |
81 | | - TraceHeader.TRACE_ID: '123', |
82 | | - TraceHeader.PARENT_ID: '65535', |
83 | | - TraceHeader.SAMPLING_PRIORITY: '1', |
84 | | - } |
| 111 | + TraceHeader.TRACE_ID: "123", |
| 112 | + TraceHeader.PARENT_ID: "65535", |
| 113 | + TraceHeader.SAMPLING_PRIORITY: "1", |
| 114 | + }, |
85 | 115 | ) |
86 | 116 | self.mock_xray_recorder.begin_subsegment.assert_called() |
87 | 117 | self.mock_xray_recorder.end_subsegment.assert_called() |
88 | 118 | self.mock_current_subsegment.put_metadata.assert_called_with( |
89 | 119 | XraySubsegment.KEY, |
90 | | - { |
91 | | - 'trace-id': '123', |
92 | | - 'parent-id': '321', |
93 | | - 'sampling-priority': '1', |
94 | | - }, |
95 | | - XraySubsegment.NAMESPACE |
| 120 | + {"trace-id": "123", "parent-id": "321", "sampling-priority": "1"}, |
| 121 | + XraySubsegment.NAMESPACE, |
96 | 122 | ) |
97 | 123 |
|
98 | 124 | def test_with_complete_datadog_trace_headers_with_mixed_casing(self): |
99 | | - extract_dd_trace_context({ |
100 | | - 'headers': { |
101 | | - 'X-Datadog-Trace-Id': '123', |
102 | | - 'X-Datadog-Parent-Id': '321', |
103 | | - 'X-Datadog-Sampling-Priority': '1', |
| 125 | + extract_dd_trace_context( |
| 126 | + { |
| 127 | + "headers": { |
| 128 | + "X-Datadog-Trace-Id": "123", |
| 129 | + "X-Datadog-Parent-Id": "321", |
| 130 | + "X-Datadog-Sampling-Priority": "1", |
| 131 | + } |
104 | 132 | } |
105 | | - }) |
| 133 | + ) |
106 | 134 | self.assertDictEqual( |
107 | 135 | get_dd_trace_context(), |
108 | 136 | { |
109 | | - TraceHeader.TRACE_ID: '123', |
110 | | - TraceHeader.PARENT_ID: '65535', |
111 | | - TraceHeader.SAMPLING_PRIORITY: '1', |
112 | | - } |
| 137 | + TraceHeader.TRACE_ID: "123", |
| 138 | + TraceHeader.PARENT_ID: "65535", |
| 139 | + TraceHeader.SAMPLING_PRIORITY: "1", |
| 140 | + }, |
113 | 141 | ) |
114 | 142 |
|
115 | 143 |
|
116 | 144 | class TestXRayContextConversion(unittest.TestCase): |
117 | | - |
118 | 145 | def test_convert_xray_trace_id(self): |
119 | 146 | self.assertEqual( |
120 | | - _convert_xray_trace_id('00000000e1be46a994272793'), |
121 | | - '7043144561403045779' |
| 147 | + _convert_xray_trace_id("00000000e1be46a994272793"), "7043144561403045779" |
122 | 148 | ) |
123 | 149 |
|
124 | 150 | self.assertEqual( |
125 | | - _convert_xray_trace_id('bd862e3fe1be46a994272793'), |
126 | | - '7043144561403045779' |
| 151 | + _convert_xray_trace_id("bd862e3fe1be46a994272793"), "7043144561403045779" |
127 | 152 | ) |
128 | 153 |
|
129 | 154 | self.assertEqual( |
130 | | - _convert_xray_trace_id('ffffffffffffffffffffffff'), |
131 | | - '9223372036854775807' # 0x7FFFFFFFFFFFFFFF |
| 155 | + _convert_xray_trace_id("ffffffffffffffffffffffff"), |
| 156 | + "9223372036854775807", # 0x7FFFFFFFFFFFFFFF |
132 | 157 | ) |
133 | 158 |
|
134 | 159 | def test_convert_xray_entity_id(self): |
135 | 160 | self.assertEqual( |
136 | | - _convert_xray_entity_id('53995c3f42cd8ad8'), |
137 | | - '6023947403358210776' |
| 161 | + _convert_xray_entity_id("53995c3f42cd8ad8"), "6023947403358210776" |
138 | 162 | ) |
139 | 163 |
|
140 | 164 | self.assertEqual( |
141 | | - _convert_xray_entity_id('1000000000000000'), |
142 | | - '1152921504606846976' |
| 165 | + _convert_xray_entity_id("1000000000000000"), "1152921504606846976" |
143 | 166 | ) |
144 | 167 |
|
145 | 168 | self.assertEqual( |
146 | | - _convert_xray_entity_id('ffffffffffffffff'), |
147 | | - '18446744073709551615' |
| 169 | + _convert_xray_entity_id("ffffffffffffffff"), "18446744073709551615" |
148 | 170 | ) |
149 | 171 |
|
150 | 172 | def test_convert_xray_sampling(self): |
151 | | - self.assertEqual( |
152 | | - _convert_xray_sampling(True), |
153 | | - str(SamplingPriority.USER_KEEP) |
154 | | - ) |
| 173 | + self.assertEqual(_convert_xray_sampling(True), str(SamplingPriority.USER_KEEP)) |
155 | 174 |
|
156 | 175 | self.assertEqual( |
157 | | - _convert_xray_sampling(False), |
158 | | - str(SamplingPriority.USER_REJECT) |
| 176 | + _convert_xray_sampling(False), str(SamplingPriority.USER_REJECT) |
159 | 177 | ) |
160 | 178 |
|
161 | 179 |
|
162 | 180 | class TestLogsInjection(unittest.TestCase): |
163 | | - |
164 | 181 | def setUp(self): |
165 | | - patcher = patch('datadog_lambda.tracing.get_dd_trace_context') |
| 182 | + |
| 183 | + patcher = patch("datadog_lambda.tracing.get_dd_trace_context") |
166 | 184 | self.mock_get_dd_trace_context = patcher.start() |
167 | 185 | self.mock_get_dd_trace_context.return_value = { |
168 | | - TraceHeader.TRACE_ID: '123', |
169 | | - TraceHeader.PARENT_ID: '456', |
| 186 | + TraceHeader.TRACE_ID: "123", |
| 187 | + TraceHeader.PARENT_ID: "456", |
170 | 188 | } |
171 | 189 | self.addCleanup(patcher.stop) |
172 | 190 |
|
173 | | - patcher = patch('datadog_lambda.tracing.is_lambda_context') |
| 191 | + patcher = patch("datadog_lambda.tracing.is_lambda_context") |
174 | 192 | self.mock_is_lambda_context = patcher.start() |
175 | 193 | self.mock_is_lambda_context.return_value = True |
176 | 194 | self.addCleanup(patcher.stop) |
177 | 195 |
|
178 | 196 | def test_set_correlation_ids(self): |
179 | 197 | set_correlation_ids() |
180 | 198 | trace_id, span_id = get_correlation_ids() |
181 | | - self.assertEqual(trace_id, '123') |
182 | | - self.assertEqual(span_id, '456') |
| 199 | + self.assertEqual(trace_id, "123") |
| 200 | + self.assertEqual(span_id, "456") |
| 201 | + |
0 commit comments