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")
Exemple #5
0
    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)