1515from unittest import mock
1616
1717import mysql .connector
18+ import pytest
1819
1920import opentelemetry .instrumentation .mysql
2021from opentelemetry import trace as trace_api
21- from opentelemetry .instrumentation .mysql import MySQLInstrumentor
22+ from opentelemetry .instrumentation .mysql import (
23+ MySQLInstrumentor ,
24+ get_traced_connection_proxy ,
25+ get_traced_cursor_proxy ,
26+ )
2227from opentelemetry .sdk import resources
2328from opentelemetry .test .test_base import TestBase
2429
@@ -33,6 +38,10 @@ def connect_and_execute_query():
3338
3439
3540class TestMysqlIntegration (TestBase ):
41+ @pytest .fixture (autouse = True )
42+ def inject_fixtures (self , caplog ):
43+ self .caplog = caplog # pylint: disable=attribute-defined-outside-init
44+
3645 def tearDown (self ):
3746 super ().tearDown ()
3847 with self .disable_logging ():
@@ -372,3 +381,87 @@ def test_uninstrument_connection(self, mock_connect):
372381
373382 spans_list = self .memory_exporter .get_finished_spans ()
374383 self .assertEqual (len (spans_list ), 1 )
384+
385+ def test_get_traced_cursor_proxy_with_enable_commenter_cursor (self ):
386+ mock_cursor = mock .Mock ()
387+ mock_dbapiint = mock .Mock ()
388+ mock_enable = mock .Mock ()
389+ proxy = get_traced_cursor_proxy (
390+ mock_cursor ,
391+ mock_dbapiint ,
392+ mock_enable ,
393+ )
394+ self .assertIs (proxy .__wrapped__ , mock_cursor )
395+ self .assertIs (proxy ._cursor_tracer ._db_api_integration , mock_dbapiint )
396+ self .assertIs (proxy ._cursor_tracer ._commenter_enabled , mock_enable )
397+
398+ def test_get_traced_connection_proxy_not_dbapi_enable_commenter (self ):
399+ mock_connection = mock .Mock ()
400+ mock_dbapiint = mock .Mock ()
401+ mock_dbapiint .enable_commenter = False
402+ cnx_proxy = get_traced_connection_proxy (
403+ mock_connection ,
404+ mock_dbapiint ,
405+ )
406+ self .assertIs (cnx_proxy .__wrapped__ , mock_connection )
407+ cur_proxy = cnx_proxy .cursor ()
408+ self .assertIs (
409+ cur_proxy ._cursor_tracer ._db_api_integration , mock_dbapiint
410+ )
411+ self .assertFalse (cur_proxy ._cursor_tracer ._commenter_enabled )
412+
413+ def test_get_traced_connection_proxy_dbapi_enable_commenter_none_prepared_cursor (
414+ self ,
415+ ):
416+ mock_connection = mock .Mock ()
417+ mock_dbapiint = mock .Mock ()
418+ mock_dbapiint .enable_commenter = True
419+ cnx_proxy = get_traced_connection_proxy (
420+ mock_connection ,
421+ mock_dbapiint ,
422+ )
423+ self .assertIs (cnx_proxy .__wrapped__ , mock_connection )
424+ cur_proxy = cnx_proxy .cursor ()
425+ self .assertIs (
426+ cur_proxy ._cursor_tracer ._db_api_integration , mock_dbapiint
427+ )
428+ self .assertTrue (cur_proxy ._cursor_tracer ._commenter_enabled )
429+
430+ def test_get_traced_connection_proxy_dbapi_enable_commenter_not_prepared_cursor (
431+ self ,
432+ ):
433+ mock_connection = mock .Mock ()
434+ mock_dbapiint = mock .Mock ()
435+ mock_dbapiint .enable_commenter = True
436+ cnx_proxy = get_traced_connection_proxy (
437+ mock_connection ,
438+ mock_dbapiint ,
439+ )
440+ self .assertIs (cnx_proxy .__wrapped__ , mock_connection )
441+ cur_proxy = cnx_proxy .cursor (prepared = False )
442+ self .assertIs (
443+ cur_proxy ._cursor_tracer ._db_api_integration , mock_dbapiint
444+ )
445+ self .assertTrue (cur_proxy ._cursor_tracer ._commenter_enabled )
446+
447+ def test_get_traced_connection_proxy_dbapi_enable_commenter_prepared_cursor (
448+ self ,
449+ ):
450+ mock_connection = mock .Mock ()
451+ mock_dbapiint = mock .Mock ()
452+ mock_dbapiint .enable_commenter = True
453+ mock_dbapiint .connect_module .__name__ = "foo-module"
454+ cnx_proxy = get_traced_connection_proxy (
455+ mock_connection ,
456+ mock_dbapiint ,
457+ )
458+ self .assertIs (cnx_proxy .__wrapped__ , mock_connection )
459+ cur_proxy = cnx_proxy .cursor (prepared = True )
460+ self .assertIs (
461+ cur_proxy ._cursor_tracer ._db_api_integration , mock_dbapiint
462+ )
463+ self .assertFalse (cur_proxy ._cursor_tracer ._commenter_enabled )
464+ assert (
465+ self .caplog .records [0 ].getMessage ()
466+ == "sqlcomment is not supported for query statements executed by cursors with native prepared statement support. Disabling sqlcommenting for instrumentation of foo-module."
467+ )
0 commit comments