def test_configure_from_settings(tracer): pin = Pin.get_from(django) with BaseTestCase.override_config("django", dict()): assert "ddtrace.contrib.django" in django.conf.settings.INSTALLED_APPS assert hasattr(django.conf.settings, "DATADOG_TRACE") configure_from_settings(pin, config.django, django.conf.settings.DATADOG_TRACE) assert config.django.service_name == "django-test" assert config.django.cache_service_name == "cache-test" assert config.django.database_service_name_prefix == "db-test-" assert config.django.distributed_tracing_enabled is True assert config.django.instrument_databases is True assert config.django.instrument_caches is True assert config.django.analytics_enabled is True assert config.django.analytics_sample_rate is True # TODO: uncomment when figured out why setting this is not working # assert config.django.trace_query_string is True assert pin.tracer.enabled is True assert pin.tracer.tags["env"] == "env-test" assert pin.tracer.writer.api.hostname == "host-test" assert pin.tracer.writer.api.port == 1234
def test_disabled_caches(client, test_spans): with BaseTestCase.override_config("django", dict(instrument_caches=False)): cache = django.core.cache.caches["default"] cache.get("missing_key") spans = test_spans.get_spans() assert len(spans) == 0
def test_service_can_be_overridden(client, test_spans): with BaseTestCase.override_config("django", dict(service_name="test-service")): response = client.get("/") assert response.status_code == 200 spans = test_spans.get_spans() assert len(spans) > 0 span = spans[0] assert span.service == "test-service"
def test_cache_service_can_be_overridden(test_spans): cache = django.core.cache.caches["default"] with BaseTestCase.override_config("django", dict(cache_service_name="test-cache-service")): cache.get("missing_key") spans = test_spans.get_spans() assert len(spans) == 1 span = spans[0] assert span.service == "test-cache-service"
def test_database_service_prefix_can_be_overridden(test_spans): with BaseTestCase.override_config("django", dict(database_service_name_prefix="my-")): from django.contrib.auth.models import User User.objects.count() spans = test_spans.get_spans() assert len(spans) > 0 span = spans[0] assert span.service == "my-defaultdb"
def test_user_name_excluded(client, test_spans): """ When making a request to a Django app with user name excluded We correctly omit the `django.user.name` tag to the root span """ with BaseTestCase.override_config("django", dict(include_user_name=False)): resp = client.get("/authenticated/") assert resp.status_code == 200 # user name should not be present in root span tags root = test_spans.get_root_span() assert "django.user.name" not in root.meta assert root.meta.get("django.user.is_authenticated") == "True"
def test_analytics_global_off_integration_on(client, test_spans): """ When making a request When an integration trace search is enabled and sample rate is set and globally trace search is disabled We expect the root span to have the appropriate tag """ with BaseTestCase.override_global_config(dict(analytics_enabled=False)): with BaseTestCase.override_config("django", dict(analytics_enabled=True, analytics_sample_rate=0.5)): assert client.get("/users/").status_code == 200 sp_request = test_spans.get_root_span() assert sp_request.name == "django.request" assert sp_request.get_metric(ANALYTICS_SAMPLE_RATE_KEY) == 0.5
def test_http_header_tracing_enabled(client, test_spans): with BaseTestCase.override_config("django", {}): config.django.http.trace_headers(["my-header", "my-response-header"]) headers = { get_wsgi_header("my-header"): "my_value", } resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." root = test_spans.get_root_span() assert root.get_tag("http.request.headers.my-header") == "my_value" assert root.get_tag("http.response.headers.my-response-header") == "my_response_value"
def test_django_request_distributed_disabled(client, test_spans): """ When making a request to a Django app With distributed tracing headers When distributed tracing is disabled The django.request span doesn't inherit from the distributed trace """ headers = { get_wsgi_header(HTTP_HEADER_TRACE_ID): "12345", get_wsgi_header(HTTP_HEADER_PARENT_ID): "78910", get_wsgi_header(HTTP_HEADER_SAMPLING_PRIORITY): USER_KEEP, } with BaseTestCase.override_config("django", dict(distributed_tracing_enabled=False)): resp = client.get("/", **headers) assert resp.status_code == 200 assert resp.content == b"Hello, test app." # Assert the trace doesn't inherit from the distributed trace root = test_spans.find_span(name="django.request") assert root.trace_id != 12345 assert root.parent_id is None