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
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
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
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"
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()
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"
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"
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"