Exemple #1
0
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
Exemple #2
0
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
Exemple #3
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"
Exemple #4
0
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"
Exemple #5
0
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"
Exemple #6
0
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"
Exemple #7
0
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
Exemple #8
0
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"
Exemple #9
0
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