2121from typing import Iterable , Optional , Sequence
2222from unittest import TestCase , mock
2323from unittest .mock import Mock , patch
24+ from requests import Session
25+ from grpc import ChannelCredentials
2426
2527from pytest import raises
2628
2729from opentelemetry import trace
2830from opentelemetry .context import Context
31+ from opentelemetry .sdk .environment_variables import OTEL_PYTHON_EXPORTER_OTLP_LOGS_CREDENTIAL_PROVIDER
2932from opentelemetry .environment_variables import OTEL_PYTHON_ID_GENERATOR
3033from opentelemetry .sdk ._configuration import (
3134 _EXPORTER_OTLP ,
3942 _import_id_generator ,
4043 _import_sampler ,
4144 _init_logging ,
45+ _init_exporter ,
4246 _init_metrics ,
4347 _init_tracing ,
4448 _initialize_components ,
@@ -178,7 +182,7 @@ def shutdown(self, timeout_millis: float = 30_000, **kwargs) -> None:
178182
179183
180184class DummyOTLPMetricExporter :
181- def __init__ (self , compression : str | None = None , * args , ** kwargs ):
185+ def __init__ (self , compression : str | None = None , session : Session | None , * args , ** kwargs ):
182186 self .export_called = False
183187 self .compression = compression
184188
@@ -203,7 +207,7 @@ def shutdown(self):
203207
204208
205209class OTLPSpanExporter :
206- def __init__ (self , compression : str | None = None , * args , ** kwargs ):
210+ def __init__ (self , compression : str | None = None , credentials : ChannelCredentials | None = None , * args , ** kwargs ):
207211 self .compression = compression
208212
209213
@@ -407,6 +411,17 @@ def test_trace_init_custom_id_generator(self, mock_entry_points):
407411 provider = self .set_provider_mock .call_args [0 ][0 ]
408412 self .assertIsInstance (provider .id_generator , CustomIdGenerator )
409413
414+
415+ @patch .dict (environ , {OTEL_PYTHON_EXPORTER_OTLP_LOGS_CREDENTIAL_PROVIDER : "custom_session" })
416+ @patch ("opentelemetry.sdk._configuration.entry_points" )
417+ def check_that_credential_envvar_gets_passed_to_exporter (self , mock_entry_points ):
418+ mock_entry_points .configure_mock (
419+ return_value = [
420+ IterEntryPoint ("custom_session" , Session ())
421+ ]
422+ )
423+ exporter = _init_exporter ('traces' , None , OTLPSpanExporter )
424+
410425 @patch .dict (
411426 "os.environ" , {OTEL_TRACES_SAMPLER : "non_existent_entry_point" }
412427 )
0 commit comments