From 9d86bea809c54c2ee2ff4d1cb1203a5ed69dff40 Mon Sep 17 00:00:00 2001 From: Varsha GS Date: Tue, 20 Aug 2024 10:04:58 +0530 Subject: [PATCH] django: Adapt tests after refactor Signed-off-by: Varsha GS --- tests/apps/app_django.py | 35 +- tests/conftest.py | 1 - tests/frameworks/test_django.py | 602 ++++++++++++++++---------------- 3 files changed, 321 insertions(+), 317 deletions(-) diff --git a/tests/apps/app_django.py b/tests/apps/app_django.py index b8a3e58b0..796e8d63f 100755 --- a/tests/apps/app_django.py +++ b/tests/apps/app_django.py @@ -7,14 +7,16 @@ import os import sys import time -import opentracing -import opentracing.ext.tags as ext + try: from django.urls import re_path except ImportError: from django.conf.urls import url as re_path from django.http import HttpResponse, Http404 +from opentelemetry.semconv.trace import SpanAttributes + +from instana.singletons import tracer filepath, extension = os.path.splitext(__file__) os.environ['DJANGO_SETTINGS_MODULE'] = os.path.basename(filepath) @@ -103,23 +105,22 @@ def not_found(request): def complex(request): - with opentracing.tracer.start_active_span('asteroid') as pscope: - pscope.span.set_tag(ext.COMPONENT, "Python simple example app") - pscope.span.set_tag(ext.SPAN_KIND, ext.SPAN_KIND_RPC_SERVER) - pscope.span.set_tag(ext.PEER_HOSTNAME, "localhost") - pscope.span.set_tag(ext.HTTP_URL, "/python/simple/one") - pscope.span.set_tag(ext.HTTP_METHOD, "GET") - pscope.span.set_tag(ext.HTTP_STATUS_CODE, 200) - pscope.span.log_kv({"foo": "bar"}) + with tracer.start_as_current_span("asteroid") as pspan: + pspan.set_attribute("component", "Python simple example app") + pspan.set_attribute("span.kind", "client") + pspan.set_attribute("peer.hostname", "localhost") + pspan.set_attribute(SpanAttributes.HTTP_URL, "/python/simple/one") + pspan.set_attribute(SpanAttributes.HTTP_METHOD, "GET") + pspan.set_attribute(SpanAttributes.HTTP_STATUS_CODE, 200) + pspan.add_event(name="complex_request", attributes={"foo": "bar"}) time.sleep(.2) - with opentracing.tracer.start_active_span('spacedust', child_of=pscope.span) as cscope: - cscope.span.set_tag(ext.SPAN_KIND, ext.SPAN_KIND_RPC_CLIENT) - cscope.span.set_tag(ext.PEER_HOSTNAME, "localhost") - cscope.span.set_tag(ext.HTTP_URL, "/python/simple/two") - cscope.span.set_tag(ext.HTTP_METHOD, "POST") - cscope.span.set_tag(ext.HTTP_STATUS_CODE, 204) - cscope.span.set_baggage_item("someBaggage", "someValue") + with tracer.start_as_current_span("spacedust") as cspan: + cspan.set_attribute("span.kind", "client") + cspan.set_attribute("peer.hostname", "localhost") + cspan.set_attribute(SpanAttributes.HTTP_URL, "/python/simple/two") + cspan.set_attribute(SpanAttributes.HTTP_METHOD, "POST") + cspan.set_attribute(SpanAttributes.HTTP_STATUS_CODE, 204) time.sleep(.1) return HttpResponse('Stan wuz here!') diff --git a/tests/conftest.py b/tests/conftest.py index 0c2ede3e3..98416213e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -51,7 +51,6 @@ collect_ignore_glob.append("*frameworks/test_aiohttp*") collect_ignore_glob.append("*frameworks/test_asyncio*") collect_ignore_glob.append("*frameworks/test_celery*") -collect_ignore_glob.append("*frameworks/test_django*") collect_ignore_glob.append("*frameworks/test_fastapi*") collect_ignore_glob.append("*frameworks/test_gevent*") collect_ignore_glob.append("*frameworks/test_grpcio*") diff --git a/tests/frameworks/test_django.py b/tests/frameworks/test_django.py index 02778efc7..f31233726 100644 --- a/tests/frameworks/test_django.py +++ b/tests/frameworks/test_django.py @@ -4,109 +4,113 @@ import os import urllib3 +import pytest +from typing import Generator from django.apps import apps from django.contrib.staticfiles.testing import StaticLiveServerTestCase -from ..apps.app_django import INSTALLED_APPS +from tests.apps.app_django import INSTALLED_APPS from instana.singletons import agent, tracer -from ..helpers import fail_with_message_and_span_dump, get_first_span_by_filter, drop_log_spans_from_list +from tests.helpers import fail_with_message_and_span_dump, get_first_span_by_filter, drop_log_spans_from_list apps.populate(INSTALLED_APPS) class TestDjango(StaticLiveServerTestCase): - def setUp(self): + @pytest.fixture(autouse=True) + def _resource(self) -> Generator[None, None, None]: """ Clear all spans before a test run """ - self.recorder = tracer.recorder - self.recorder.clear_spans() self.http = urllib3.PoolManager() + self.recorder = tracer.span_processor + self.recorder.clear_spans() - def tearDown(self): + def tearDown(self) -> None: """ Clear the INSTANA_DISABLE_W3C_TRACE_CORRELATION environment variable """ os.environ["INSTANA_DISABLE_W3C_TRACE_CORRELATION"] = "" - def test_basic_request(self): - with tracer.start_active_span('test'): + def test_basic_request(self) -> None: + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/', fields={"test": 1}) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(3, len(spans)) + assert 3 == len(spans) test_span = spans[2] urllib3_span = spans[1] django_span = spans[0] - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' + assert 'Server-Timing' in response.headers server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert response.headers['Server-Timing'] == server_timing_value - self.assertEqual("test", test_span.data["sdk"]["name"]) - self.assertEqual("urllib3", urllib3_span.n) - self.assertEqual("django", django_span.n) + assert "test" == test_span.data["sdk"]["name"] + assert "urllib3" == urllib3_span.n + assert "django" == django_span.n - self.assertEqual(test_span.t, urllib3_span.t) - self.assertEqual(urllib3_span.t, django_span.t) + assert test_span.t == urllib3_span.t + assert urllib3_span.t == django_span.t - self.assertEqual(urllib3_span.p, test_span.s) - self.assertEqual(django_span.p, urllib3_span.s) + assert urllib3_span.p == test_span.s + assert django_span.p == urllib3_span.s - self.assertIsNone(django_span.sy) - self.assertIsNone(urllib3_span.sy) - self.assertIsNone(test_span.sy) + assert django_span.sy is None + assert urllib3_span.sy is None + assert test_span.sy is None - self.assertEqual(None, django_span.ec) - self.assertEqual('/', django_span.data["http"]["url"]) - self.assertEqual('GET', django_span.data["http"]["method"]) - self.assertEqual(200, django_span.data["http"]["status"]) - self.assertEqual('test=1', django_span.data["http"]["params"]) - self.assertEqual('^$', django_span.data["http"]["path_tpl"]) + assert None == django_span.ec + assert '/' == django_span.data["http"]["url"] + assert 'GET' == django_span.data["http"]["method"] + assert 200 == django_span.data["http"]["status"] + assert 'test=1' == django_span.data["http"]["params"] + assert '^$' == django_span.data["http"]["path_tpl"] - self.assertIsNone(django_span.stack) + assert django_span.stack is None - def test_synthetic_request(self): + @pytest.mark.skip("Synthetic is not yet handled") + def test_synthetic_request(self) -> None: headers = { 'X-INSTANA-SYNTHETIC': '1' } - with tracer.start_active_span('test'): + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/', headers=headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(3, len(spans)) + assert 3 == len(spans) test_span = spans[2] urllib3_span = spans[1] django_span = spans[0] - self.assertEqual('^$', django_span.data["http"]["path_tpl"]) + assert '^$' == django_span.data["http"]["path_tpl"] - self.assertTrue(django_span.sy) - self.assertIsNone(urllib3_span.sy) - self.assertIsNone(test_span.sy) + assert django_span.sy + assert urllib3_span.sy is None + assert test_span.sy is None - def test_request_with_error(self): - with tracer.start_active_span('test'): + def test_request_with_error(self) -> None: + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/cause_error') - self.assertTrue(response) - self.assertEqual(500, response.status) + assert response + assert 500 == response.status spans = self.recorder.queued_spans() spans = drop_log_spans_from_list(spans) @@ -118,56 +122,56 @@ def test_request_with_error(self): filter = lambda span: span.n == 'sdk' and span.data['sdk']['name'] == 'test' test_span = get_first_span_by_filter(spans, filter) - self.assertTrue(test_span) + assert test_span filter = lambda span: span.n == 'urllib3' urllib3_span = get_first_span_by_filter(spans, filter) - self.assertTrue(urllib3_span) + assert urllib3_span filter = lambda span: span.n == 'django' django_span = get_first_span_by_filter(spans, filter) - self.assertTrue(django_span) + assert django_span - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' + assert 'Server-Timing' in response.headers server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert response.headers['Server-Timing'] == server_timing_value - self.assertEqual("test", test_span.data["sdk"]["name"]) - self.assertEqual("urllib3", urllib3_span.n) - self.assertEqual("django", django_span.n) + assert "test" == test_span.data["sdk"]["name"] + assert "urllib3" == urllib3_span.n + assert "django" == django_span.n - self.assertEqual(test_span.t, urllib3_span.t) - self.assertEqual(urllib3_span.t, django_span.t) + assert test_span.t == urllib3_span.t + assert urllib3_span.t == django_span.t - self.assertEqual(urllib3_span.p, test_span.s) - self.assertEqual(django_span.p, urllib3_span.s) + assert urllib3_span.p == test_span.s + assert django_span.p == urllib3_span.s - self.assertEqual(1, django_span.ec) + assert 1 == django_span.ec - self.assertEqual('/cause_error', django_span.data["http"]["url"]) - self.assertEqual('GET', django_span.data["http"]["method"]) - self.assertEqual(500, django_span.data["http"]["status"]) - self.assertEqual('This is a fake error: /cause-error', django_span.data["http"]["error"]) - self.assertEqual('^cause_error$', django_span.data["http"]["path_tpl"]) - self.assertIsNone(django_span.stack) + assert '/cause_error' == django_span.data["http"]["url"] + assert 'GET' == django_span.data["http"]["method"] + assert 500 == django_span.data["http"]["status"] + assert 'This is a fake error: /cause-error' == django_span.data["http"]["error"] + assert '^cause_error$' == django_span.data["http"]["path_tpl"] + assert django_span.stack is None - def test_request_with_not_found(self): - with tracer.start_active_span('test'): + def test_request_with_not_found(self) -> None: + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/not_found') - self.assertTrue(response) - self.assertEqual(404, response.status) + assert response + assert 404 == response.status spans = self.recorder.queued_spans() spans = drop_log_spans_from_list(spans) @@ -179,17 +183,17 @@ def test_request_with_not_found(self): filter = lambda span: span.n == 'django' django_span = get_first_span_by_filter(spans, filter) - self.assertTrue(django_span) + assert django_span - self.assertIsNone(django_span.ec) - self.assertEqual(404, django_span.data["http"]["status"]) + assert django_span.ec is None + assert 404 == django_span.data["http"]["status"] - def test_request_with_not_found_no_route(self): - with tracer.start_active_span('test'): + def test_request_with_not_found_no_route(self) -> None: + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/no_route') - self.assertTrue(response) - self.assertEqual(404, response.status) + assert response + assert 404 == response.status spans = self.recorder.queued_spans() spans = drop_log_spans_from_list(spans) @@ -201,19 +205,19 @@ def test_request_with_not_found_no_route(self): filter = lambda span: span.n == 'django' django_span = get_first_span_by_filter(spans, filter) - self.assertTrue(django_span) - self.assertIsNone(django_span.data["http"]["path_tpl"]) - self.assertIsNone(django_span.ec) - self.assertEqual(404, django_span.data["http"]["status"]) + assert django_span + assert django_span.data["http"]["path_tpl"] is None + assert django_span.ec is None + assert 404 == django_span.data["http"]["status"] - def test_complex_request(self): - with tracer.start_active_span('test'): + def test_complex_request(self) -> None: + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/complex') - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(5, len(spans)) + assert 5 == len(spans) test_span = spans[4] urllib3_span = spans[3] @@ -221,46 +225,46 @@ def test_complex_request(self): ot_span1 = spans[1] ot_span2 = spans[0] - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' + assert 'Server-Timing' in response.headers server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) - - self.assertEqual("test", test_span.data["sdk"]["name"]) - self.assertEqual("urllib3", urllib3_span.n) - self.assertEqual("django", django_span.n) - self.assertEqual("sdk", ot_span1.n) - self.assertEqual("sdk", ot_span2.n) - - self.assertEqual(test_span.t, urllib3_span.t) - self.assertEqual(urllib3_span.t, django_span.t) - self.assertEqual(django_span.t, ot_span1.t) - self.assertEqual(ot_span1.t, ot_span2.t) - - self.assertEqual(urllib3_span.p, test_span.s) - self.assertEqual(django_span.p, urllib3_span.s) - self.assertEqual(ot_span1.p, django_span.s) - self.assertEqual(ot_span2.p, ot_span1.s) - - self.assertEqual(None, django_span.ec) - self.assertIsNone(django_span.stack) - - self.assertEqual('/complex', django_span.data["http"]["url"]) - self.assertEqual('GET', django_span.data["http"]["method"]) - self.assertEqual(200, django_span.data["http"]["status"]) - self.assertEqual('^complex$', django_span.data["http"]["path_tpl"]) - - def test_request_header_capture(self): + assert response.headers['Server-Timing'] == server_timing_value + + assert "test" == test_span.data["sdk"]["name"] + assert "urllib3" == urllib3_span.n + assert "django" == django_span.n + assert "sdk" == ot_span1.n + assert "sdk" == ot_span2.n + + assert test_span.t == urllib3_span.t + assert urllib3_span.t == django_span.t + assert django_span.t == ot_span1.t + assert ot_span1.t == ot_span2.t + + assert urllib3_span.p == test_span.s + assert django_span.p == urllib3_span.s + assert ot_span1.p == django_span.s + assert ot_span2.p == ot_span1.s + + assert None == django_span.ec + assert django_span.stack is None + + assert '/complex' == django_span.data["http"]["url"] + assert 'GET' == django_span.data["http"]["method"] + assert 200 == django_span.data["http"]["status"] + assert '^complex$' == django_span.data["http"]["path_tpl"] + + def test_request_header_capture(self) -> None: # Hack together a manual custom headers list original_extra_http_headers = agent.options.extra_http_headers agent.options.extra_http_headers = [u'X-Capture-This', u'X-Capture-That'] @@ -270,89 +274,90 @@ def test_request_header_capture(self): 'X-Capture-That': 'that' } - with tracer.start_active_span('test'): + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) # response = self.client.get('/') - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(3, len(spans)) + assert 3 == len(spans) test_span = spans[2] urllib3_span = spans[1] django_span = spans[0] - self.assertEqual("test", test_span.data["sdk"]["name"]) - self.assertEqual("urllib3", urllib3_span.n) - self.assertEqual("django", django_span.n) + assert "test" == test_span.data["sdk"]["name"] + assert "urllib3" == urllib3_span.n + assert "django" == django_span.n - self.assertEqual(test_span.t, urllib3_span.t) - self.assertEqual(urllib3_span.t, django_span.t) + assert test_span.t == urllib3_span.t + assert urllib3_span.t == django_span.t - self.assertEqual(urllib3_span.p, test_span.s) - self.assertEqual(django_span.p, urllib3_span.s) + assert urllib3_span.p == test_span.s + assert django_span.p == urllib3_span.s - self.assertEqual(None, django_span.ec) - self.assertIsNone(django_span.stack) + assert None == django_span.ec + assert django_span.stack is None - self.assertEqual('/', django_span.data["http"]["url"]) - self.assertEqual('GET', django_span.data["http"]["method"]) - self.assertEqual(200, django_span.data["http"]["status"]) - self.assertEqual('^$', django_span.data["http"]["path_tpl"]) + assert '/' == django_span.data["http"]["url"] + assert 'GET' == django_span.data["http"]["method"] + assert 200 == django_span.data["http"]["status"] + assert '^$' == django_span.data["http"]["path_tpl"] - self.assertIn("X-Capture-This", django_span.data["http"]["header"]) - self.assertEqual("this", django_span.data["http"]["header"]["X-Capture-This"]) - self.assertIn("X-Capture-That", django_span.data["http"]["header"]) - self.assertEqual("that", django_span.data["http"]["header"]["X-Capture-That"]) + assert "X-Capture-This" in django_span.data["http"]["header"] + assert "this" == django_span.data["http"]["header"]["X-Capture-This"] + assert "X-Capture-That" in django_span.data["http"]["header"] + assert "that" == django_span.data["http"]["header"]["X-Capture-That"] agent.options.extra_http_headers = original_extra_http_headers - def test_response_header_capture(self): + def test_response_header_capture(self) -> None: # Hack together a manual custom headers list original_extra_http_headers = agent.options.extra_http_headers agent.options.extra_http_headers = [u'X-Capture-This-Too', u'X-Capture-That-Too'] - with tracer.start_active_span('test'): + with tracer.start_as_current_span("test"): response = self.http.request('GET', self.live_server_url + '/response_with_headers') - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(3, len(spans)) + assert 3 == len(spans) test_span = spans[2] urllib3_span = spans[1] django_span = spans[0] - self.assertEqual("test", test_span.data["sdk"]["name"]) - self.assertEqual("urllib3", urllib3_span.n) - self.assertEqual("django", django_span.n) + assert "test" == test_span.data["sdk"]["name"] + assert "urllib3" == urllib3_span.n + assert "django" == django_span.n - self.assertEqual(test_span.t, urllib3_span.t) - self.assertEqual(urllib3_span.t, django_span.t) + assert test_span.t == urllib3_span.t + assert urllib3_span.t == django_span.t - self.assertEqual(urllib3_span.p, test_span.s) - self.assertEqual(django_span.p, urllib3_span.s) + assert urllib3_span.p == test_span.s + assert django_span.p == urllib3_span.s - self.assertEqual(None, django_span.ec) - self.assertIsNone(django_span.stack) + assert None == django_span.ec + assert django_span.stack is None - self.assertEqual('/response_with_headers', django_span.data["http"]["url"]) - self.assertEqual('GET', django_span.data["http"]["method"]) - self.assertEqual(200, django_span.data["http"]["status"]) - self.assertEqual('^response_with_headers$', django_span.data["http"]["path_tpl"]) + assert '/response_with_headers' == django_span.data["http"]["url"] + assert 'GET' == django_span.data["http"]["method"] + assert 200 == django_span.data["http"]["status"] + assert '^response_with_headers$' == django_span.data["http"]["path_tpl"] - self.assertIn("X-Capture-This-Too", django_span.data["http"]["header"]) - self.assertEqual("this too", django_span.data["http"]["header"]["X-Capture-This-Too"]) - self.assertIn("X-Capture-That-Too", django_span.data["http"]["header"]) - self.assertEqual("that too", django_span.data["http"]["header"]["X-Capture-That-Too"]) + assert "X-Capture-This-Too" in django_span.data["http"]["header"] + assert "this too" == django_span.data["http"]["header"]["X-Capture-This-Too"] + assert "X-Capture-That-Too" in django_span.data["http"]["header"] + assert "that too" == django_span.data["http"]["header"]["X-Capture-That-Too"] agent.options.extra_http_headers = original_extra_http_headers - def test_with_incoming_context(self): + @pytest.mark.skip("Handled when type of trace and span ids are modified to str") + def test_with_incoming_context(self) -> None: request_headers = dict() request_headers['X-INSTANA-T'] = '1' request_headers['X-INSTANA-S'] = '1' @@ -361,43 +366,44 @@ def test_with_incoming_context(self): response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(1, len(spans)) + assert 1 == len(spans) django_span = spans[0] - self.assertEqual(django_span.t, '0000000000000001') - self.assertEqual(django_span.p, '0000000000000001') + # assert django_span.t == '0000000000000001' + # assert django_span.p == '0000000000000001' + assert django_span.t == 1 + assert django_span.p == 1 - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' - self.assertIn('traceparent', response.headers) + assert 'Server-Timing' in response.headers + server_timing_value = "intid;desc=%s" % django_span.t + assert response.headers['Server-Timing'] == server_timing_value + + assert 'traceparent' in response.headers # The incoming traceparent header had version 01 (which does not exist at the time of writing), but since we # support version 00, we also need to pass down 00 for the version field. - self.assertEqual('00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s), - response.headers['traceparent']) + assert '00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s) == response.headers['traceparent'] - self.assertIn('tracestate', response.headers) - self.assertEqual( - 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( - django_span.t, django_span.s), response.headers['tracestate']) - server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert 'tracestate' in response.headers + assert 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format(django_span.t, django_span.s) == response.headers['tracestate'] - def test_with_incoming_context_and_correlation(self): + @pytest.mark.skip("Handled when type of trace and span ids are modified to str") + def test_with_incoming_context_and_correlation(self) -> None: request_headers = dict() request_headers['X-INSTANA-T'] = '1' request_headers['X-INSTANA-S'] = '1' @@ -407,94 +413,92 @@ def test_with_incoming_context_and_correlation(self): response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(1, len(spans)) + assert 1 == len(spans) django_span = spans[0] - self.assertEqual(django_span.t, 'a3ce929d0e0e4736') - self.assertEqual(django_span.p, '00f067aa0ba902b7') - self.assertEqual(django_span.ia.t, 'a3ce929d0e0e4736') - self.assertEqual(django_span.ia.p, '8357ccd9da194656') - self.assertEqual(django_span.lt, '4bf92f3577b34da6a3ce929d0e0e4736') - self.assertEqual(django_span.tp, True) - self.assertEqual(django_span.crtp, 'web') - self.assertEqual(django_span.crid, '1234567890abcdef') + assert django_span.t == 'a3ce929d0e0e4736' + assert django_span.p == '00f067aa0ba902b7' + assert django_span.ia.t == 'a3ce929d0e0e4736' + assert django_span.ia.p == '8357ccd9da194656' + assert django_span.lt == '4bf92f3577b34da6a3ce929d0e0e4736' + assert django_span.tp == True + assert django_span.crtp == 'web' + assert django_span.crid == '1234567890abcdef' - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' - self.assertIn('traceparent', response.headers) - self.assertEqual('00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s), - response.headers['traceparent']) + assert 'Server-Timing' in response.headers + server_timing_value = "intid;desc=%s" % django_span.t + assert response.headers['Server-Timing'] == server_timing_value - self.assertIn('tracestate', response.headers) - self.assertEqual( - 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( - django_span.t, django_span.s), response.headers['tracestate']) + assert 'traceparent' in response.headers + assert '00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s) == response.headers['traceparent'] - server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert 'tracestate' in response.headers + assert 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( + django_span.t, django_span.s) == response.headers['tracestate'] - def test_with_incoming_traceparent_tracestate(self): + @pytest.mark.skip("Handled when type of trace and span ids are modified to str") + def test_with_incoming_traceparent_tracestate(self) -> None: request_headers = dict() request_headers['traceparent'] = '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' request_headers['tracestate'] = 'rojo=00f067aa0ba902b7,in=a3ce929d0e0e4736;8357ccd9da194656,congo=t61rcWkgMzE' response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(1, len(spans)) + assert 1 == len(spans) django_span = spans[0] - self.assertEqual(django_span.t, 'a3ce929d0e0e4736') # last 16 chars from traceparent trace_id - self.assertEqual(django_span.p, '00f067aa0ba902b7') - self.assertEqual(django_span.ia.t, 'a3ce929d0e0e4736') - self.assertEqual(django_span.ia.p, '8357ccd9da194656') - self.assertEqual(django_span.lt, '4bf92f3577b34da6a3ce929d0e0e4736') - self.assertEqual(django_span.tp, True) + assert django_span.t == 'a3ce929d0e0e4736' # last 16 chars from traceparent trace_id + assert django_span.p == '00f067aa0ba902b7' + assert django_span.ia.t == 'a3ce929d0e0e4736' + assert django_span.ia.p == '8357ccd9da194656' + assert django_span.lt == '4bf92f3577b34da6a3ce929d0e0e4736' + assert django_span.tp == True - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' - self.assertIn('traceparent', response.headers) - self.assertEqual('00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s), - response.headers['traceparent']) + assert 'Server-Timing' in response.headers + server_timing_value = "intid;desc=%s" % django_span.t + assert response.headers['Server-Timing'] == server_timing_value - self.assertIn('tracestate', response.headers) - self.assertEqual( - 'in=a3ce929d0e0e4736;{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( - django_span.s), response.headers['tracestate']) + assert 'traceparent' in response.headers + assert '00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s) == response.headers['traceparent'] - server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert 'tracestate' in response.headers + assert 'in=a3ce929d0e0e4736;{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( + django_span.s) == response.headers['tracestate'] - def test_with_incoming_traceparent_tracestate_disable_traceparent(self): + @pytest.mark.skip("Handled when type of trace and span ids are modified to str") + def test_with_incoming_traceparent_tracestate_disable_traceparent(self) -> None: os.environ["INSTANA_DISABLE_W3C_TRACE_CORRELATION"] = "1" request_headers = dict() request_headers['traceparent'] = '00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' @@ -502,70 +506,70 @@ def test_with_incoming_traceparent_tracestate_disable_traceparent(self): response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(1, len(spans)) + assert 1 == len(spans) django_span = spans[0] - self.assertEqual(django_span.t, 'a3ce929d0e0e4736') # last 16 chars from traceparent trace_id - self.assertEqual(django_span.p, '8357ccd9da194656') + assert django_span.t == 'a3ce929d0e0e4736' # last 16 chars from traceparent trace_id + assert django_span.p == '8357ccd9da194656' - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' - self.assertIn('traceparent', response.headers) - self.assertEqual('00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s), - response.headers['traceparent']) + assert 'Server-Timing' in response.headers + server_timing_value = "intid;desc=%s" % django_span.t + assert response.headers['Server-Timing'] == server_timing_value - self.assertIn('tracestate', response.headers) - self.assertEqual( - 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( - django_span.t, django_span.s), response.headers['tracestate']) + assert 'traceparent' in response.headers + assert '00-4bf92f3577b34da6a3ce929d0e0e4736-{}-01'.format(django_span.s) == response.headers['traceparent'] - server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert 'tracestate' in response.headers + assert 'in={};{},rojo=00f067aa0ba902b7,congo=t61rcWkgMzE'.format( + django_span.t, django_span.s) == response.headers['tracestate'] - def test_with_incoming_mixed_case_context(self): + def test_with_incoming_mixed_case_context(self) -> None: request_headers = dict() request_headers['X-InSTANa-T'] = '0000000000000001' request_headers['X-instana-S'] = '0000000000000001' response = self.http.request('GET', self.live_server_url + '/', headers=request_headers) - self.assertTrue(response) - self.assertEqual(200, response.status) + assert response + assert 200 == response.status spans = self.recorder.queued_spans() - self.assertEqual(1, len(spans)) + assert 1 == len(spans) django_span = spans[0] - self.assertEqual(django_span.t, '0000000000000001') - self.assertEqual(django_span.p, '0000000000000001') + # assert django_span.t == '0000000000000001' + # assert django_span.p == '0000000000000001' + assert django_span.t == 1 + assert django_span.p == 1 - self.assertIn('X-INSTANA-T', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-T'], 16)) - self.assertEqual(django_span.t, response.headers['X-INSTANA-T']) + assert 'X-INSTANA-T' in response.headers + assert int(response.headers['X-INSTANA-T'], 16) + assert response.headers["X-INSTANA-T"] == str(django_span.t) - self.assertIn('X-INSTANA-S', response.headers) - self.assertTrue(int(response.headers['X-INSTANA-S'], 16)) - self.assertEqual(django_span.s, response.headers['X-INSTANA-S']) + assert 'X-INSTANA-S' in response.headers + assert int(response.headers['X-INSTANA-S'], 16) + assert response.headers["X-INSTANA-S"] == str(django_span.s) - self.assertIn('X-INSTANA-L', response.headers) - self.assertEqual('1', response.headers['X-INSTANA-L']) + assert 'X-INSTANA-L' in response.headers + assert response.headers['X-INSTANA-L'] == '1' + assert 'Server-Timing' in response.headers server_timing_value = "intid;desc=%s" % django_span.t - self.assertIn('Server-Timing', response.headers) - self.assertEqual(server_timing_value, response.headers['Server-Timing']) + assert response.headers['Server-Timing'] == server_timing_value