@@ -382,6 +382,79 @@ def test_load_instrumentors_raises_exception(self, iter_mock):
382382 )
383383 self .assertEqual (distro_mock .load_instrumentor .call_count , 1 )
384384
385+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
386+ @patch (
387+ "opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
388+ )
389+ def test_load_instrumentors_module_not_found_error (
390+ self , iter_mock , mock_logger
391+ ):
392+ ep_mock1 = Mock ()
393+ ep_mock1 .name = "instr1"
394+
395+ ep_mock2 = Mock ()
396+ ep_mock2 .name = "instr2"
397+
398+ distro_mock = Mock ()
399+
400+ distro_mock .load_instrumentor .side_effect = [
401+ ModuleNotFoundError ("No module named 'fake_module'" ),
402+ None ,
403+ ]
404+
405+ iter_mock .side_effect = [(), (ep_mock1 , ep_mock2 ), ()]
406+
407+ _load ._load_instrumentors (distro_mock )
408+
409+ distro_mock .load_instrumentor .assert_has_calls (
410+ [
411+ call (ep_mock1 , raise_exception_on_conflict = True ),
412+ call (ep_mock2 , raise_exception_on_conflict = True ),
413+ ]
414+ )
415+ self .assertEqual (distro_mock .load_instrumentor .call_count , 2 )
416+
417+ mock_logger .debug .assert_any_call (
418+ "Skipping instrumentation %s: %s" ,
419+ "instr1" ,
420+ "No module named 'fake_module'" ,
421+ )
422+
423+ mock_logger .debug .assert_any_call ("Instrumented %s" , ep_mock2 .name )
424+
425+ @patch ("opentelemetry.instrumentation.auto_instrumentation._load._logger" )
426+ @patch (
427+ "opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
428+ )
429+ def test_load_instrumentors_import_error (self , iter_mock , mock_logger ):
430+ ep_mock1 = Mock ()
431+ ep_mock1 .name = "instr1"
432+
433+ ep_mock2 = Mock ()
434+ ep_mock2 .name = "instr2"
435+
436+ distro_mock = Mock ()
437+ distro_mock .load_instrumentor .side_effect = [ImportError , None ]
438+
439+ iter_mock .side_effect = [(), (ep_mock1 , ep_mock2 ), ()]
440+
441+ _load ._load_instrumentors (distro_mock )
442+
443+ distro_mock .load_instrumentor .assert_has_calls (
444+ [
445+ call (ep_mock1 , raise_exception_on_conflict = True ),
446+ call (ep_mock2 , raise_exception_on_conflict = True ),
447+ ]
448+ )
449+ self .assertEqual (distro_mock .load_instrumentor .call_count , 2 )
450+
451+ mock_logger .exception .assert_any_call (
452+ "Importing of %s failed, skipping it" ,
453+ ep_mock1 .name ,
454+ )
455+
456+ mock_logger .debug .assert_any_call ("Instrumented %s" , ep_mock2 .name )
457+
385458 def test_load_instrumentors_no_entry_point_mocks (self ):
386459 distro_mock = Mock ()
387460 _load ._load_instrumentors (distro_mock )
0 commit comments