99 Agent365ExporterOptions ,
1010)
1111from microsoft_agents_a365 .observability .core .trace_processor import SpanProcessor
12- from opentelemetry import trace as otel_trace
1312from opentelemetry .sdk .resources import Resource
1413from opentelemetry .sdk .trace import TracerProvider
1514
@@ -19,18 +18,28 @@ class TestAgent365Configure(unittest.TestCase):
1918
2019 def setUp (self ):
2120 """Set up test fixtures."""
21+ # Reset TelemetryManager state before each test
22+ from microsoft_agents_a365 .observability .core .config import _telemetry_manager
23+ from microsoft_agents_a365 .observability .core .opentelemetry_scope import OpenTelemetryScope
24+
25+ _telemetry_manager ._tracer_provider = None
26+ _telemetry_manager ._span_processors = {}
27+ OpenTelemetryScope ._tracer = None
28+
2229 self .mock_token_resolver = Mock ()
2330 self .mock_token_resolver .return_value = "test_token_123"
2431
2532 def tearDown (self ):
2633 """Clean up after each test."""
2734 # Reset the telemetry manager singleton state
2835 from microsoft_agents_a365 .observability .core .config import _telemetry_manager
36+ from microsoft_agents_a365 .observability .core .opentelemetry_scope import OpenTelemetryScope
2937
3038 _telemetry_manager ._tracer_provider = None
3139 _telemetry_manager ._span_processors = {}
40+ OpenTelemetryScope ._tracer = None
3241
33- otel_trace ._TRACER_PROVIDER = None
42+ # Do NOT reset otel_trace._TRACER_PROVIDER to None to avoid NonRecordingSpan issues in other tests
3443
3544 def test_configure_basic_functionality (self ):
3645 """Test configure function with basic parameters and legacy parameters."""
@@ -144,39 +153,6 @@ def test_configure_prevents_duplicate_initialization(self):
144153 mock_logger .warning .assert_called_once ()
145154 self .assertIn ("already configured" , mock_logger .warning .call_args [0 ][0 ].lower ())
146155
147- @patch ("microsoft_agents_a365.observability.core.config.is_agent365_exporter_enabled" )
148- @patch ("microsoft_agents_a365.observability.core.config.TracerProvider" )
149- def test_configure_creates_new_tracer_provider (self , mock_provider_class , mock_is_enabled ):
150- """Test configure() creates new TracerProvider when none exists and adds processors."""
151- mock_is_enabled .return_value = False
152-
153- new_provider = TracerProvider (
154- resource = Resource .create ({
155- "service.name" : "test-service" ,
156- "service.namespace" : "test-namespace" ,
157- })
158- )
159- mock_provider_class .return_value = new_provider
160-
161- result = configure (service_name = "test-service" , service_namespace = "test-namespace" )
162- self .assertTrue (result )
163-
164- # Verify both processors were added by inspecting the MultiSpanProcessor
165-
166- active_processor = new_provider ._active_span_processor
167- self .assertIsNotNone (active_processor )
168-
169- # MultiSpanProcessor has a _span_processors list
170- processors = active_processor ._span_processors
171- self .assertEqual (
172- len (processors ), 2 , "Should have 2 processors: BatchSpanProcessor and SpanProcessor"
173- )
174-
175- # Verify types of processors
176- processor_types = [type (p ).__name__ for p in processors ]
177- self .assertIn ("BatchSpanProcessor" , processor_types )
178- self .assertIn ("SpanProcessor" , processor_types )
179-
180156 @patch ("microsoft_agents_a365.observability.core.config.is_agent365_exporter_enabled" )
181157 @patch ("microsoft_agents_a365.observability.core.config.trace.get_tracer_provider" )
182158 def test_configure_uses_existing_tracer_provider (self , mock_get_provider , mock_is_enabled ):
0 commit comments