bec/bec_lib/tests/test_beamline_checks.py

167 lines
5.1 KiB
Python

from unittest import mock
import pytest
from bec_lib.bl_checks import (
BeamlineCheckError,
BeamlineChecks,
_run_on_failure,
_run_with_bl_checks,
)
def test_run_with_bl_checks():
bl_checks = mock.MagicMock()
bl_checks._levels = []
bl_checks._is_paused = False
_run_with_bl_checks(bl_checks, mock.MagicMock(), 1, 2, 3, a=4, b=5)
assert not bl_checks._levels
def test_bl_check_raises_on_failed_nested_calls():
bl_checks = mock.MagicMock()
bl_checks._levels = [{"fcn": mock.MagicMock()}]
bl_checks._is_paused = False
bl_checks.beam_is_okay = False
with pytest.raises(BeamlineCheckError):
_run_with_bl_checks(bl_checks, mock.MagicMock(), 1, 2, 3, a=4, b=5)
def test_bl_check_run_on_failure():
bl_checks = mock.MagicMock()
bl_checks._levels = []
bl_checks._is_paused = False
bl_checks.beam_is_okay = False
fcn = mock.MagicMock()
fcn.side_effect = BeamlineCheckError
_run_on_failure(bl_checks, fcn, 1, 2, 3, a=4, b=5)
bl_checks.wait_for_beamline_checks.assert_called_once()
def test_bl_check_register():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
condition = mock.MagicMock()
condition.name = "test"
bl_check.register(condition)
assert bl_check.test == condition # pylint: disable=no-member
assert bl_check._beamline_checks["test"] == condition
def test_bl_check_pause():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check.pause()
assert bl_check._is_paused
def test_bl_check_resume():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._is_paused = True
bl_check.resume()
assert not bl_check._is_paused
def test_bl_check_reset():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beam_is_okay = False
bl_check._check_msgs = ["test"]
bl_check.reset()
assert bl_check._beam_is_okay
assert not bl_check._check_msgs
def test_bl_check_disable_check():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beamline_checks = {"test": mock.MagicMock()}
bl_check.disable_check("test")
assert not bl_check._beamline_checks["test"].enabled
def test_bl_check_enable_check():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beamline_checks = {"test": mock.MagicMock()}
bl_check.enable_check("test")
assert bl_check._beamline_checks["test"].enabled
def test_bl_check_disable_all_checks():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beamline_checks = {"test": mock.MagicMock()}
bl_check.disable_all_checks()
assert not bl_check._beamline_checks["test"].enabled
def test_bl_check_enable_all_checks():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beamline_checks = {"test": mock.MagicMock()}
bl_check.enable_all_checks()
assert bl_check._beamline_checks["test"].enabled
def test_bl_check_run_beamline_checks():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._beamline_checks = {"test": mock.MagicMock()}
bl_check._beam_is_okay = True
bl_check._run_beamline_checks()
assert bl_check._beam_is_okay
bl_check._beamline_checks["test"].run.assert_called_once()
bl_check._beamline_checks["test"].on_failure_msg.assert_not_called()
def test_bl_check_send_to_scilog():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._send_to_scilog("test")
client.logbook.send_logbook_message.assert_called_once()
def test_bl_check_beam_status_is_okay():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
with mock.patch.object(bl_check, "_run_beamline_checks") as mock_run:
mock_run.return_value = []
assert bl_check._beam_status_is_okay() is True
def test_bl_check_wait_for_beamline_checks():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._check_msgs = ["test"]
bl_check._beam_is_okay = False
with mock.patch.object(bl_check, "_print_beamline_checks") as mock_print:
with mock.patch.object(bl_check, "_send_to_scilog") as mock_send:
with mock.patch.object(bl_check, "_run_beamline_checks") as mock_run:
mock_run.return_value = ["test"]
bl_check.wait_for_beamline_checks()
mock_print.assert_called_once()
mock_send.assert_called()
def test_bl_check_start():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._started = False
bl_check._beam_is_okay = True
with mock.patch("bec_lib.bl_checks.threading.Thread") as mock_thread:
bl_check.start()
mock_thread.assert_called_once()
mock_thread.return_value.start.assert_called_once()
def test_bl_check_stop():
client = mock.MagicMock()
bl_check = BeamlineChecks(client=client)
bl_check._started = True
bl_check._beam_is_okay = True
bl_check._beam_check_thread = mock.MagicMock()
bl_check.stop()
bl_check._beam_check_thread.join.assert_called_once()