diff --git a/apps/cli/utilities/wf_monitor/logs/test.log b/apps/cli/utilities/wf_monitor/logs/test.log new file mode 100644 index 0000000000000000000000000000000000000000..9a98d74001825a698878a9f23cfd7a5961e8d1e4 --- /dev/null +++ b/apps/cli/utilities/wf_monitor/logs/test.log @@ -0,0 +1 @@ +this will trigger an exception!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! \ No newline at end of file diff --git a/apps/cli/utilities/wf_monitor/test/test_wf_monitor.py b/apps/cli/utilities/wf_monitor/test/test_wf_monitor.py index 4e381941f20772294aecfb38f5961bf166d788a1..a908f46cd50db69a97a2e34dedbaee8d45000bcf 100644 --- a/apps/cli/utilities/wf_monitor/test/test_wf_monitor.py +++ b/apps/cli/utilities/wf_monitor/test/test_wf_monitor.py @@ -1,12 +1,17 @@ +from typing import List + +import pika +import pytest +import pytest_mock from wf_monitor.wf_event import WorkflowEvent, EventType -from wf_monitor.monitor import WorkflowMonitor +from wf_monitor.monitor import WorkflowMonitor, send_event_data, make_amqp_connection -log_path = 'logs/condor.log' -test_monitor = WorkflowMonitor(log_path) +log_path: str = 'logs/condor.log' +test_monitor: WorkflowMonitor = WorkflowMonitor(log_path) def test_read_log(): - test_strs = [ + test_strs: List[str] = [ 'Image size of job updated: 432', '432 - ResidentSetSize of job (KB)', '(1) Normal termination (return value 0)', @@ -17,8 +22,15 @@ def test_read_log(): assert s in test_monitor.log +def test_read_log_timeout(capsys): + with pytest.raises(SystemExit) as sys_ex: + WorkflowMonitor('logs/file-that-does-not-exist.txt', 1) + assert sys_ex.type == SystemExit + assert sys_ex.value.code == -1 + + def test_parse_log(): - test_event_types = [ + test_event_types: List[EventType] = [ EventType.SUBMITTED, EventType.EXECUTING, EventType.OTHER, @@ -32,5 +44,22 @@ def test_parse_log(): assert e.type == e_type -def test_send_event_data(): - pass +def test_parse_log_error(): + with pytest.raises(ValueError) as val_err: + WorkflowMonitor('logs/test.log') + assert val_err.type == ValueError + + +def test_send_event_data(mocker): + mock_list = [ + 'pika.adapters.blocking_connection.BlockingChannel.basic_publish', + 'wf_monitor.monitor.make_amqp_connection', + 'wf_monitor.monitor.send_event_data', + ] + [mocker.patch(mock) for mock in mock_list] + + connection: pika.BlockingConnection = make_amqp_connection('nmtest') + + for event in WorkflowMonitor(log_path).events: + send_event_data(connection, event) + assert connection.channel().basic_publish.call_count == 8