Skip to content

Commit 8cc6c79

Browse files
committed
Add ClearLoggingHandlers test helper
1 parent 534cd38 commit 8cc6c79

File tree

1 file changed

+52
-3
lines changed

1 file changed

+52
-3
lines changed

opentelemetry-sdk/tests/test_configurator.py

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
# pylint: skip-file
1616
from __future__ import annotations
1717

18-
from logging import WARNING, getLogger
18+
import logging
19+
from logging import getLogger, WARNING
1920
from os import environ
2021
from typing import Iterable, Optional, Sequence
21-
from unittest import TestCase, mock
22+
from unittest import mock, TestCase
2223
from unittest.mock import Mock, patch
2324

2425
from pytest import raises
@@ -58,7 +59,7 @@
5859
MetricReader,
5960
)
6061
from opentelemetry.sdk.metrics.view import Aggregation
61-
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
62+
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
6263
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
6364
from opentelemetry.sdk.trace.id_generator import IdGenerator, RandomIdGenerator
6465
from opentelemetry.sdk.trace.sampling import (
@@ -1076,3 +1077,51 @@ def test_custom_configurator(self, mock_init_comp):
10761077
"sampler": "TEST_SAMPLER",
10771078
}
10781079
mock_init_comp.assert_called_once_with(**kwargs)
1080+
1081+
1082+
class ClearLoggingHandlers:
1083+
def __init__(self):
1084+
self.root_logger = getLogger()
1085+
self.original_handlers = None
1086+
1087+
def __enter__(self):
1088+
# Save original state
1089+
self.original_handlers = self.root_logger.handlers[:]
1090+
# Remove all handlers
1091+
self.root_logger.handlers = []
1092+
return self
1093+
1094+
def __exit__(self, exc_type, exc_val, exc_tb):
1095+
# Restore original state
1096+
self.root_logger.handlers = []
1097+
for handler in self.original_handlers:
1098+
self.root_logger.addHandler(handler)
1099+
1100+
1101+
class TestClearLoggingHandlers(TestCase):
1102+
def test_preserves_handlers(self):
1103+
root_logger = getLogger() # Get the root logger
1104+
initial_handlers = root_logger.handlers[
1105+
:
1106+
] # Save initial test environment handlers
1107+
1108+
# Add our test handler
1109+
test_handler = logging.StreamHandler()
1110+
root_logger.addHandler(test_handler)
1111+
expected_handlers = initial_handlers + [test_handler]
1112+
1113+
with ClearLoggingHandlers():
1114+
# Should have no handlers during the test
1115+
self.assertEqual(len(root_logger.handlers), 0)
1116+
1117+
# Add a temporary handler that should get cleaned up
1118+
temp_handler = logging.StreamHandler()
1119+
root_logger.addHandler(temp_handler)
1120+
1121+
# After the test, should be back to initial handlers plus our test handler
1122+
self.assertEqual(len(root_logger.handlers), len(expected_handlers))
1123+
for h1, h2 in zip(root_logger.handlers, expected_handlers):
1124+
self.assertIs(h1, h2)
1125+
1126+
# Cleanup our test handler
1127+
root_logger.removeHandler(test_handler)

0 commit comments

Comments
 (0)