Beispiel #1
0
    def test_patch_unpatch(self):
        tracer = DummyTracer()

        # Test patch idempotence
        patch()
        patch()

        r = self._get_test_client()
        Pin.get_from(r).clone(tracer=tracer).onto(r)
        r.get("key")

        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1

        # Test unpatch
        unpatch()

        r = self._get_test_client()
        r.get("key")

        spans = tracer.pop()
        assert not spans, spans

        # Test patch again
        patch()

        r = self._get_test_client()
        Pin.get_from(r).clone(tracer=tracer).onto(r)
        r.get("key")

        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1
Beispiel #2
0
    def test_patch_unpatch(self):
        tracer = DummyTracer()

        # Test patch idempotence
        patch()
        patch()

        r = redis.Redis(port=REDIS_CONFIG["port"])
        Pin.get_from(r).clone(tracer=tracer).onto(r)
        r.get("key")

        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1

        # Test unpatch
        unpatch()

        r = redis.Redis(port=REDIS_CONFIG["port"])
        r.get("key")

        spans = tracer.pop()
        assert not spans, spans

        # Test patch again
        patch()

        r = redis.Redis(port=REDIS_CONFIG["port"])
        Pin.get_from(r).clone(tracer=tracer).onto(r)
        r.get("key")

        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1
Beispiel #3
0
    def test_patch_unpatch(self):
        # Test patch idempotence
        patch()
        patch()

        tracer = DummyTracer()
        Pin.get_from(Cluster).clone(tracer=tracer).onto(Cluster)

        session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE)
        session.execute(self.TEST_QUERY)

        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1

        # Test unpatch
        unpatch()

        session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE)
        session.execute(self.TEST_QUERY)

        spans = tracer.pop()
        assert not spans, spans

        # Test patch again
        patch()
        Pin.get_from(Cluster).clone(tracer=tracer).onto(Cluster)

        session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE)
        session.execute(self.TEST_QUERY)

        spans = tracer.pop()
        assert spans, spans
Beispiel #4
0
def tracer():
    tracer = DummyTracer()
    # Patch Django and override tracer to be our test tracer
    pin = Pin.get_from(django)
    original_tracer = pin.tracer
    Pin.override(django, tracer=tracer)

    # Yield to our test
    yield tracer
    tracer.pop()

    # Reset the tracer pinned to Django and unpatch
    # DEV: unable to properly unpatch and reload django app with each test
    # unpatch()
    Pin.override(django, tracer=original_tracer)
    def test_configuration_routine(self):
        """Ensure that the integration routines can be configured."""
        routine_config = dict(
            patch={
                "vertica_python.vertica.connection.Connection": dict(
                    routines=dict(
                        cursor=dict(
                            operation_name="get_cursor",
                            trace_enabled=True,
                        ),
                    ),
                ),
            },
        )

        # Make a copy of the vertica config first before we merge our settings over
        # DEV: First argument gets merged into the second
        copy = _deepmerge(config.vertica, dict())
        overrides = _deepmerge(routine_config, copy)
        with self.override_config("vertica", overrides):
            patch()
            import vertica_python

            test_tracer = DummyTracer()

            conn = vertica_python.connect(**VERTICA_CONFIG)
            Pin.override(conn, service="mycustomservice", tracer=test_tracer)
            conn.cursor()  # should be traced now
            conn.close()
        spans = test_tracer.pop()
        assert len(spans) == 1
        assert spans[0].name == "get_cursor"
        assert spans[0].service == "mycustomservice"
Beispiel #6
0
def test_redis_legacy():
    # ensure the old interface isn't broken, but doesn't trace
    tracer = DummyTracer()
    TracedRedisCache = get_traced_redis(tracer, "foo")
    r = TracedRedisCache(port=REDIS_CONFIG["port"])
    r.set("a", "b")
    got = r.get("a")
    assert compat.to_unicode(got) == "b"
    assert not tracer.pop()
Beispiel #7
0
    def test_patch_unpatch(self):
        tracer = DummyTracer()

        # Test patch idempotence
        patch()
        patch()

        client = mongoengine.connect(port=MONGO_CONFIG["port"])
        Pin.get_from(client).clone(tracer=tracer).onto(client)

        Artist.drop_collection()
        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1

        mongoengine.connection.disconnect()
        tracer.pop()

        # Test unpatch
        unpatch()

        mongoengine.connect(port=MONGO_CONFIG["port"])

        Artist.drop_collection()
        spans = tracer.pop()
        assert not spans, spans

        # Test patch again
        patch()

        client = mongoengine.connect(port=MONGO_CONFIG["port"])
        Pin.get_from(client).clone(tracer=tracer).onto(client)

        Artist.drop_collection()
        spans = tracer.pop()
        assert spans, spans
        assert len(spans) == 1
    def test_configuration_service_name(self):
        """Ensure that the integration can be configured."""
        with self.override_config("vertica", dict(service_name="test_svc_name")):
            patch()
            import vertica_python

            test_tracer = DummyTracer()

            conn = vertica_python.connect(**VERTICA_CONFIG)
            cur = conn.cursor()
            Pin.override(cur, tracer=test_tracer)
            with conn:
                cur.execute("DROP TABLE IF EXISTS {}".format(TEST_TABLE))
        spans = test_tracer.pop()
        assert len(spans) == 1
        assert spans[0].service == "test_svc_name"
Beispiel #9
0
    def test_user_specified_service(self):
        """
        When a user specifies a service for the app
            The pymongo integration should not use it.
        """
        # Ensure that the service name was configured
        from ddtrace import config
        assert config.service == "mysvc"

        tracer = DummyTracer()
        client = pymongo.MongoClient(port=MONGO_CONFIG["port"])
        Pin.get_from(client).clone(tracer=tracer).onto(client)
        # We do not wish to trace tcp spans here
        Pin.get_from(pymongo.server.Server).remove_from(pymongo.server.Server)
        client["testdb"].drop_collection("whatever")
        spans = tracer.pop()
        assert len(spans) == 1
        assert spans[0].service != "mysvc"
Beispiel #10
0
def test_dd_origin_tagging_spans_via_encoder(benchmark, trace_size):
    """Propagate dd_origin tags to all spans in [1, 50, 200, 1000] span trace via Encoder"""
    trace_encoder = MsgpackEncoderV03(4 << 20, 4 << 20)

    tracer = DummyTracer()
    with tracer.trace("pytest-test") as root:
        root.context.dd_origin = CI_APP_TEST_ORIGIN
        for _ in range(trace_size - 1):
            with tracer.trace("") as span:
                span.set_tag("tag", "value")
                pass
    trace = tracer.pop()

    def _(trace):
        trace_encoder.put(trace)
        trace_encoder.encode()

    benchmark(_, trace)

    # Ensure encoded trace contains dd_origin tag in all spans
    trace_encoder.put(trace)
    (decoded_trace, ) = trace_encoder._decode(trace_encoder.encode())
    for span in decoded_trace:
        assert span[b"meta"][b"_dd.origin"] == b"ciapp-test"