def test_callproc(self): db_integration = dbapi.DatabaseApiIntegration( self.tracer, "testcomponent" ) mock_connection = db_integration.wrapped_connection( mock_connect, {}, {} ) cursor = mock_connection.cursor() cursor.callproc("Test stored procedure") spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual( span.attributes["db.statement"], "Test stored procedure" )
def test_executemany(self): db_integration = dbapi.DatabaseApiIntegration( "testname", "testcomponent" ) mock_connection = db_integration.wrapped_connection( mock_connect, {}, {} ) cursor = mock_connection.cursor() cursor.executemany("Test query") spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual( span.attributes[SpanAttributes.DB_STATEMENT], "Test query" )
def test_span_name(self): db_integration = dbapi.DatabaseApiIntegration(self.tracer, "testcomponent", {}) mock_connection = db_integration.wrapped_connection( mock_connect, {}, {}) cursor = mock_connection.cursor() cursor.execute("Test query", ("param1Value", False)) cursor.execute("""multi line query""") cursor.execute("tab\tseparated query") spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 3) self.assertEqual(spans_list[0].name, "Test") self.assertEqual(spans_list[1].name, "multi") self.assertEqual(spans_list[2].name, "tab")
def test_span_failed(self): db_integration = dbapi.DatabaseApiIntegration(self.tracer, "testcomponent") mock_connection = db_integration.wrapped_connection( mock_connect, {}, {}) cursor = mock_connection.cursor() with self.assertRaises(Exception): cursor.execute("Test query", throw_exception=True) spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual(span.attributes[SpanAttributes.DB_STATEMENT], "Test query") self.assertIs(span.status.status_code, trace_api.StatusCode.ERROR) self.assertEqual(span.status.description, "Exception: Test Exception")
def test_span_succeeded_with_capture_of_statement_parameters(self): connection_props = { "database": "testdatabase", "server_host": "testhost", "server_port": 123, "user": "******", } connection_attributes = { "database": "database", "port": "server_port", "host": "server_host", "user": "******", } db_integration = dbapi.DatabaseApiIntegration( self.tracer, "testcomponent", "testtype", connection_attributes, capture_parameters=True, ) mock_connection = db_integration.wrapped_connection( mock_connect, {}, connection_props ) cursor = mock_connection.cursor() cursor.execute("Test query", ("param1Value", False)) spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual(span.name, "testcomponent.testdatabase") self.assertIs(span.kind, trace_api.SpanKind.CLIENT) self.assertEqual(span.attributes["component"], "testcomponent") self.assertEqual(span.attributes["db.type"], "testtype") self.assertEqual(span.attributes["db.instance"], "testdatabase") self.assertEqual(span.attributes["db.statement"], "Test query") self.assertEqual( span.attributes["db.statement.parameters"], "('param1Value', False)", ) self.assertEqual(span.attributes["db.user"], "testuser") self.assertEqual(span.attributes["net.peer.name"], "testhost") self.assertEqual(span.attributes["net.peer.port"], 123) self.assertIs( span.status.status_code, trace_api.status.StatusCode.UNSET, )
def test_custom_tracer_provider_dbapi(self): resource = resources.Resource.create({"db-resource-key": "value"}) result = self.create_tracer_provider(resource=resource) tracer_provider, exporter = result db_integration = dbapi.DatabaseApiIntegration( self.tracer, "testcomponent", tracer_provider=tracer_provider) mock_connection = db_integration.wrapped_connection( mock_connect, {}, {}) cursor = mock_connection.cursor() with self.assertRaises(Exception): cursor.execute("Test query", throw_exception=True) spans_list = exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual(span.resource.attributes["db-resource-key"], "value") self.assertIs(span.status.status_code, trace_api.StatusCode.ERROR)
def test_span_succeeded(self): connection_props = { "database": "testdatabase", "server_host": "testhost", "server_port": 123, "user": "******", } connection_attributes = { "database": "database", "port": "server_port", "host": "server_host", "user": "******", } db_integration = dbapi.DatabaseApiIntegration( "testname", "testcomponent", connection_attributes ) mock_connection = db_integration.wrapped_connection( mock_connect, {}, connection_props ) cursor = mock_connection.cursor() cursor.execute("Test query", ("param1Value", False)) spans_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(spans_list), 1) span = spans_list[0] self.assertEqual(span.name, "Test") self.assertIs(span.kind, trace_api.SpanKind.CLIENT) self.assertEqual( span.attributes[SpanAttributes.DB_SYSTEM], "testcomponent" ) self.assertEqual( span.attributes[SpanAttributes.DB_NAME], "testdatabase" ) self.assertEqual( span.attributes[SpanAttributes.DB_STATEMENT], "Test query" ) self.assertFalse("db.statement.parameters" in span.attributes) self.assertEqual(span.attributes[SpanAttributes.DB_USER], "testuser") self.assertEqual( span.attributes[SpanAttributes.NET_PEER_NAME], "testhost" ) self.assertEqual(span.attributes[SpanAttributes.NET_PEER_PORT], 123) self.assertIs(span.status.status_code, trace_api.StatusCode.UNSET)