Skip to content

Commit 90419f8

Browse files
authored
Merge pull request #6 from GabrielSalla/add-validation-handling-internal-monitors-register
Add validation handling for internal and sample monitors register
2 parents 540968c + 8d89981 commit 90419f8

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

src/components/monitors_loader/monitors_loader.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,14 @@ async def _register_monitors_from_path(
148148
additional_files[additional_file.name] = file.read()
149149

150150
with catch_exceptions(_logger):
151-
await register_monitor(
152-
monitor_name=monitor_name,
153-
monitor_code=monitor_code,
154-
additional_files=additional_files,
155-
)
151+
try:
152+
await register_monitor(
153+
monitor_name=monitor_name,
154+
monitor_code=monitor_code,
155+
additional_files=additional_files,
156+
)
157+
except MonitorValidationError:
158+
_logger.error(f"Monitor '{monitor_name}' not registered")
156159

157160

158161
async def _register_monitors():

tests/components/monitors_loader/test_monitors_loader.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,48 @@ async def test_register_monitors_from_path_internal(clear_database):
322322
assert {monitor.name for monitor in registered_monitors} == expected_monitors
323323

324324

325+
async def test_register_monitors_from_path_validation_error(caplog, monkeypatch, clear_database):
326+
"""'_register_monitors_from_path' should log the errors if a monitor was not loaded and not
327+
register the monitor"""
328+
async def register_monitor_error_mock(monitor_name, monitor_code, additional_files):
329+
raise monitors_loader.MonitorValidationError(monitor_name="monitor", errors_found=[])
330+
331+
monkeypatch.setattr(monitors_loader, "register_monitor", register_monitor_error_mock)
332+
333+
registered_monitors = await Monitor.get_all()
334+
335+
assert len(registered_monitors) == 0
336+
337+
await monitors_loader._register_monitors_from_path("tests/sample_monitors")
338+
339+
registered_monitors = await Monitor.get_all()
340+
assert len(registered_monitors) == 0
341+
342+
assert_message_in_log(caplog, "Monitor 'monitor_1' not registered")
343+
assert_message_in_log(caplog, "Monitor 'monitor_2' not registered")
344+
assert_message_in_log(caplog, "Monitor 'monitor_3' not registered")
345+
346+
347+
async def test_register_monitors_from_path_error(caplog, monkeypatch, clear_database):
348+
"""'_register_monitors_from_path' should log the errors if a monitor was not loaded and not
349+
register the monitor"""
350+
async def register_monitor_error_mock(monitor_name, monitor_code, additional_files):
351+
raise ValueError("Some error")
352+
353+
monkeypatch.setattr(monitors_loader, "register_monitor", register_monitor_error_mock)
354+
355+
registered_monitors = await Monitor.get_all()
356+
357+
assert len(registered_monitors) == 0
358+
359+
await monitors_loader._register_monitors_from_path("tests/sample_monitors")
360+
361+
registered_monitors = await Monitor.get_all()
362+
assert len(registered_monitors) == 0
363+
364+
assert_message_in_log(caplog, "ValueError: Some error", count=3)
365+
366+
325367
async def test_register_monitors(monkeypatch, clear_database):
326368
"""'register_monitors' should register all the internal and sample monitors if enabled,
327369
including their additional files"""

0 commit comments

Comments
 (0)