mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 09:13:23 +08:00
52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
from sqlalchemy.exc import ProgrammingError
|
|
import pytest
|
|
|
|
from .mixins import SQLAlchemyTestMixin
|
|
from ..config import MYSQL_CONFIG
|
|
from ...base import BaseTracerTestCase
|
|
|
|
|
|
class MysqlConnectorTestCase(SQLAlchemyTestMixin, BaseTracerTestCase):
|
|
"""TestCase for mysql-connector engine"""
|
|
VENDOR = 'mysql'
|
|
SQL_DB = 'test'
|
|
SERVICE = 'mysql'
|
|
ENGINE_ARGS = {'url': 'mysql+mysqlconnector://%(user)s:%(password)s@%(host)s:%(port)s/%(database)s' % MYSQL_CONFIG}
|
|
|
|
def setUp(self):
|
|
super(MysqlConnectorTestCase, self).setUp()
|
|
|
|
def tearDown(self):
|
|
super(MysqlConnectorTestCase, self).tearDown()
|
|
|
|
def check_meta(self, span):
|
|
# check database connection tags
|
|
self.assertEqual(span.get_tag('out.host'), MYSQL_CONFIG['host'])
|
|
self.assertEqual(span.get_metric('out.port'), MYSQL_CONFIG['port'])
|
|
|
|
def test_engine_execute_errors(self):
|
|
# ensures that SQL errors are reported
|
|
with pytest.raises(ProgrammingError):
|
|
with self.connection() as conn:
|
|
conn.execute('SELECT * FROM a_wrong_table').fetchall()
|
|
|
|
traces = self.tracer.writer.pop_traces()
|
|
# trace composition
|
|
self.assertEqual(len(traces), 1)
|
|
self.assertEqual(len(traces[0]), 1)
|
|
span = traces[0][0]
|
|
# span fields
|
|
self.assertEqual(span.name, '{}.query'.format(self.VENDOR))
|
|
self.assertEqual(span.service, self.SERVICE)
|
|
self.assertEqual(span.resource, 'SELECT * FROM a_wrong_table')
|
|
self.assertEqual(span.get_tag('sql.db'), self.SQL_DB)
|
|
self.assertIsNone(span.get_tag('sql.rows') or span.get_metric('sql.rows'))
|
|
self.check_meta(span)
|
|
self.assertEqual(span.span_type, 'sql')
|
|
self.assertTrue(span.duration > 0)
|
|
# check the error
|
|
self.assertEqual(span.error, 1)
|
|
self.assertEqual(span.get_tag('error.type'), 'mysql.connector.errors.ProgrammingError')
|
|
self.assertTrue("Table 'test.a_wrong_table' doesn't exist" in span.get_tag('error.msg'))
|
|
self.assertTrue("Table 'test.a_wrong_table' doesn't exist" in span.get_tag('error.stack'))
|