Skip to content

Commit 3a26a13

Browse files
committed
partial test_load revert
1 parent 337a7d3 commit 3a26a13

File tree

1 file changed

+85
-44
lines changed
  • opentelemetry-instrumentation/tests/auto_instrumentation

1 file changed

+85
-44
lines changed

opentelemetry-instrumentation/tests/auto_instrumentation/test_load.py

Lines changed: 85 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
OTEL_PYTHON_DISTRO,
2828
)
2929
from opentelemetry.instrumentation.version import __version__
30+
from opentelemetry.util._importlib_metadata import EntryPoint, entry_points
3031

3132
# TODO: Revert changes from 6d5a5149d02fdec50d8053767b55bc91d80a9228
3233
class TestLoad(TestCase):
@@ -203,20 +204,23 @@ def test_load_distro_error(self, iter_mock, isinstance_mock):
203204
# Confirm method raises exception if it fails to load a distro.
204205
self.assertRaises(Exception, _load._load_distro)
205206

206-
@staticmethod
207-
def _instrumentation_failed_to_load_call(entry_point, dependency_conflict):
208-
return call(
209-
"Skipping instrumentation %s: %s", entry_point, dependency_conflict
210-
)
207+
# @staticmethod
208+
# def _instrumentation_failed_to_load_call(entry_point, dependency_conflict):
209+
# return call(
210+
# "Skipping instrumentation %s: %s", entry_point, dependency_conflict
211+
# )
211212

212213
@patch.dict(
213214
"os.environ",
214215
{OTEL_PYTHON_DISABLED_INSTRUMENTATIONS: " instr1 , instr3 "},
215216
)
217+
@patch(
218+
"opentelemetry.instrumentation.auto_instrumentation._load.get_dist_dependency_conflicts"
219+
)
216220
@patch(
217221
"opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
218222
)
219-
def test_load_instrumentors(self, iter_mock):
223+
def test_load_instrumentors(self, iter_mock, dep_mock):
220224
# Mock opentelemetry_pre_instrument entry points
221225
# pylint: disable=too-many-locals
222226
pre_ep_mock1 = Mock()
@@ -261,6 +265,8 @@ def test_load_instrumentors(self, iter_mock):
261265
(ep_mock1, ep_mock2, ep_mock3, ep_mock4),
262266
(post_ep_mock1, post_ep_mock2),
263267
]
268+
# No dependency conflict
269+
dep_mock.return_value = None
264270
_load._load_instrumentors(distro_mock)
265271
# All opentelemetry_pre_instrument entry points should be loaded
266272
pre_mock1.assert_called_once()
@@ -269,8 +275,13 @@ def test_load_instrumentors(self, iter_mock):
269275
# Only non-disabled instrumentations should be loaded
270276
distro_mock.load_instrumentor.assert_has_calls(
271277
[
272-
call(ep_mock2, raise_exception_on_conflict=True),
273-
call(ep_mock4, raise_exception_on_conflict=True),
278+
call(ep_mock2, skip_dep_check=True),
279+
call(ep_mock4, skip_dep_check=True),
280+
# call(ep_mock2, raise_exception_on_conflict=True),
281+
# call(ep_mock4, raise_exception_on_conflict=True),
282+
# TODO: maybe merge
283+
# call(ep_mock2, skip_dep_check=True, raise_exception_on_conflict=True),
284+
# call(ep_mock4, skip_dep_check=True, raise_exception_on_conflict=True),
274285
]
275286
)
276287
self.assertEqual(distro_mock.load_instrumentor.call_count, 2)
@@ -355,12 +366,13 @@ def test_load_instrumentors_import_error_does_not_stop_everything(
355366
]
356367
)
357368
self.assertEqual(distro_mock.load_instrumentor.call_count, 2)
358-
mock_logger.exception.assert_any_call(
359-
"Importing of %s failed, skipping it",
360-
ep_mock1.name,
361-
)
369+
# TODO: re-enable
370+
# mock_logger.exception.assert_any_call(
371+
# "Importing of %s failed, skipping it",
372+
# ep_mock1.name,
373+
# )
362374

363-
mock_logger.debug.assert_any_call("Instrumented %s", ep_mock2.name)
375+
# mock_logger.debug.assert_any_call("Instrumented %s", ep_mock2.name)
364376

365377
@patch(
366378
"opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
@@ -389,48 +401,77 @@ def test_load_instrumentors_raises_exception(self, iter_mock):
389401
)
390402
self.assertEqual(distro_mock.load_instrumentor.call_count, 1)
391403

392-
@patch("opentelemetry.instrumentation.auto_instrumentation._load._logger")
393-
@patch(
394-
"opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
395-
)
396-
def test_load_instrumentors_module_not_found_error(
397-
self, iter_mock, mock_logger
398-
):
399-
ep_mock1 = Mock()
400-
ep_mock1.name = "instr1"
404+
# TODO: re-enable
405+
# @patch("opentelemetry.instrumentation.auto_instrumentation._load._logger")
406+
# @patch(
407+
# "opentelemetry.instrumentation.auto_instrumentation._load.entry_points"
408+
# )
409+
# def test_load_instrumentors_module_not_found_error(
410+
# self, iter_mock, mock_logger
411+
# ):
412+
# ep_mock1 = Mock()
413+
# ep_mock1.name = "instr1"
401414

402-
ep_mock2 = Mock()
403-
ep_mock2.name = "instr2"
415+
# ep_mock2 = Mock()
416+
# ep_mock2.name = "instr2"
404417

405-
distro_mock = Mock()
418+
# distro_mock = Mock()
406419

407-
distro_mock.load_instrumentor.side_effect = [
408-
ModuleNotFoundError("No module named 'fake_module'"),
409-
None,
410-
]
420+
# distro_mock.load_instrumentor.side_effect = [
421+
# ModuleNotFoundError("No module named 'fake_module'"),
422+
# None,
423+
# ]
411424

412-
iter_mock.side_effect = [(), (ep_mock1, ep_mock2), ()]
425+
# iter_mock.side_effect = [(), (ep_mock1, ep_mock2), ()]
413426

414-
_load._load_instrumentors(distro_mock)
427+
# _load._load_instrumentors(distro_mock)
415428

416-
distro_mock.load_instrumentor.assert_has_calls(
417-
[
418-
call(ep_mock1, raise_exception_on_conflict=True),
419-
call(ep_mock2, raise_exception_on_conflict=True),
420-
]
421-
)
422-
self.assertEqual(distro_mock.load_instrumentor.call_count, 2)
429+
# distro_mock.load_instrumentor.assert_has_calls(
430+
# [
431+
# call(ep_mock1, raise_exception_on_conflict=True),
432+
# call(ep_mock2, raise_exception_on_conflict=True),
433+
# ]
434+
# )
435+
# self.assertEqual(distro_mock.load_instrumentor.call_count, 2)
423436

424-
mock_logger.debug.assert_any_call(
425-
"Skipping instrumentation %s: %s",
426-
"instr1",
427-
"No module named 'fake_module'",
428-
)
437+
# mock_logger.debug.assert_any_call(
438+
# "Skipping instrumentation %s: %s",
439+
# "instr1",
440+
# "No module named 'fake_module'",
441+
# )
429442

430-
mock_logger.debug.assert_any_call("Instrumented %s", ep_mock2.name)
443+
# mock_logger.debug.assert_any_call("Instrumented %s", ep_mock2.name)
431444

432445
def test_load_instrumentors_no_entry_point_mocks(self):
433446
distro_mock = Mock()
434447
_load._load_instrumentors(distro_mock)
435448
# this has no specific assert because it is run for every instrumentation
436449
self.assertTrue(distro_mock)
450+
451+
def test_entry_point_dist_finder(self):
452+
entry_point_finder = _load._EntryPointDistFinder()
453+
self.assertTrue(entry_point_finder._mapping)
454+
entry_point = list(
455+
entry_points(group="opentelemetry_environment_variables")
456+
)[0]
457+
self.assertTrue(entry_point)
458+
self.assertTrue(entry_point.dist)
459+
460+
# this will not hit cache
461+
entry_point_dist = entry_point_finder.dist_for(entry_point)
462+
self.assertTrue(entry_point_dist)
463+
# dist are not comparable so we are sure we are not hitting the cache
464+
self.assertEqual(entry_point.dist, entry_point_dist)
465+
466+
# this will hit cache
467+
entry_point_without_dist = EntryPoint(
468+
name=entry_point.name,
469+
group=entry_point.group,
470+
value=entry_point.value,
471+
)
472+
self.assertIsNone(entry_point_without_dist.dist)
473+
new_entry_point_dist = entry_point_finder.dist_for(
474+
entry_point_without_dist
475+
)
476+
# dist are not comparable, being truthy is enough
477+
self.assertTrue(new_entry_point_dist)

0 commit comments

Comments
 (0)