|
5 | 5 | from django.core.urlresolvers import reverse |
6 | 6 |
|
7 | 7 | # project |
| 8 | +from ddtrace.constants import SAMPLING_PRIORITY_KEY |
8 | 9 | from ddtrace.contrib.django.conf import settings |
9 | 10 | from ddtrace.contrib.django import TraceMiddleware |
10 | 11 |
|
11 | 12 | # testing |
12 | | -from .utils import DjangoTraceTestCase |
| 13 | +from .utils import DjangoTraceTestCase, override_ddtrace_settings |
13 | 14 |
|
14 | 15 |
|
15 | 16 | class DjangoMiddlewareTest(DjangoTraceTestCase): |
@@ -143,3 +144,50 @@ def test_middleware_without_user(self): |
143 | 144 | sp_database = spans[2] |
144 | 145 | eq_(sp_request.get_tag('http.status_code'), '200') |
145 | 146 | eq_(sp_request.get_tag('django.user.is_authenticated'), None) |
| 147 | + |
| 148 | + @override_ddtrace_settings(DISTRIBUTED_TRACING=True) |
| 149 | + def test_middleware_propagation(self): |
| 150 | + # ensures that we properly propagate http context |
| 151 | + url = reverse('users-list') |
| 152 | + headers = { |
| 153 | + 'x-datadog-trace-id': '100', |
| 154 | + 'x-datadog-parent-id': '42', |
| 155 | + 'x-datadog-sampling-priority': '2', |
| 156 | + } |
| 157 | + response = self.client.get(url, **headers) |
| 158 | + eq_(response.status_code, 200) |
| 159 | + |
| 160 | + # check for spans |
| 161 | + spans = self.tracer.writer.pop() |
| 162 | + eq_(len(spans), 3) |
| 163 | + sp_request = spans[0] |
| 164 | + sp_template = spans[1] |
| 165 | + sp_database = spans[2] |
| 166 | + |
| 167 | + # Check for proper propagated attributes |
| 168 | + eq_(sp_request.trace_id, 100) |
| 169 | + eq_(sp_request.parent_id, 42) |
| 170 | + eq_(sp_request.get_metric(SAMPLING_PRIORITY_KEY), 2) |
| 171 | + |
| 172 | + def test_middleware_no_propagation(self): |
| 173 | + # ensures that we properly propagate http context |
| 174 | + url = reverse('users-list') |
| 175 | + headers = { |
| 176 | + 'x-datadog-trace-id': '100', |
| 177 | + 'x-datadog-parent-id': '42', |
| 178 | + 'x-datadog-sampling-priority': '2', |
| 179 | + } |
| 180 | + response = self.client.get(url, **headers) |
| 181 | + eq_(response.status_code, 200) |
| 182 | + |
| 183 | + # check for spans |
| 184 | + spans = self.tracer.writer.pop() |
| 185 | + eq_(len(spans), 3) |
| 186 | + sp_request = spans[0] |
| 187 | + sp_template = spans[1] |
| 188 | + sp_database = spans[2] |
| 189 | + |
| 190 | + # Check that propagation didn't happen |
| 191 | + assert sp_request.trace_id != 100 |
| 192 | + assert sp_request.parent_id != 42 |
| 193 | + assert sp_request.get_metric(SAMPLING_PRIORITY_KEY) != 2 |
0 commit comments