Skip to content

Add warning on begin if using test clock #33

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/genie_python/genie_dae.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,8 @@ def begin_run(
if not quiet:
if self.get_simulation_mode():
self.simulation_mode_warning()
elif self.get_timing_source() == "Internal Test Clock":
self.test_clock_warning()
print("** Beginning Run {} at {}".format(run_number, strftime("%H:%M:%S %d/%m/%y ")))
## don't fail begin() if we are unabel to print rb/user details
try:
Expand Down Expand Up @@ -402,6 +404,15 @@ def simulation_mode_warning(self) -> None:
print(" >>>set_dae_simulation_mode(False) \n")
print("==================================================\n")

def test_clock_warning(self) -> None:
"""
Warn user they are using the test clock.
"""
print("\n========= RUNNING AGAINST DAE TEST CLOCK =========\n")
print("Timing source can be changed using: \n")
print(" >>>change_sync(source) \n")
print("==================================================\n")

def post_begin_check(self, verbose: bool = False) -> None:
"""
Checks the BEGIN PV for errors after beginning a run.
Expand Down
68 changes: 59 additions & 9 deletions tests/test_genie_dae.py
Original file line number Diff line number Diff line change
Expand Up @@ -430,26 +430,76 @@ def test_WHEN_clearing_all_vetoes_THEN_fifo_is_unaffected(self):
func.assert_not_called()

@patch("genie_python.genie_cachannel_wrapper.CaChannelWrapper.add_monitor")
def test_GIVEN_simulation_mode_WHEN_begin_run_THEN_user_is_warned(self, mock_monitor):
def test_GIVEN_simulation_mode_AND_test_clock_WHEN_begin_run_THEN_user_is_warned(
self, mock_monitor: MagicMock
):
mock_monitor.return_value = None
self.dae.api.get_pv_value = MagicMock(return_value="SETUP")
self.dae.get_simulation_mode = MagicMock(return_value=True)
self.dae.get_timing_source = MagicMock(return_value="Internal Test Clock")
sim_mock_warning = MagicMock()
clock_mock_warning = MagicMock()
self.dae.test_clock_warning = clock_mock_warning
self.dae.simulation_mode_warning = sim_mock_warning

self.dae.begin_run()

sim_mock_warning.assert_called_once()
clock_mock_warning.assert_not_called()

@patch("genie_python.genie_cachannel_wrapper.CaChannelWrapper.add_monitor")
def test_GIVEN_in_test_clock_AND_not_in_simulation_mode_WHEN_begin_run_THEN_user_is_warned(
self, mock_monitor: MagicMock
):
mock_monitor.return_value = None
self.dae.api.get_pv_value = MagicMock(return_value="SETUP")
self.dae.get_simulation_mode = MagicMock(return_value=False)
self.dae.get_timing_source = MagicMock(return_value="Internal Test Clock")
sim_mock_warning = MagicMock()
clock_mock_warning = MagicMock()
self.dae.test_clock_warning = clock_mock_warning
self.dae.simulation_mode_warning = sim_mock_warning

self.dae.begin_run()

sim_mock_warning.assert_not_called()
clock_mock_warning.assert_called_once()

@patch("genie_python.genie_cachannel_wrapper.CaChannelWrapper.add_monitor")
def test_GIVEN_simulation_mode_AND_not_test_clock_WHEN_begin_run_THEN_user_is_warned(
self, mock_monitor: MagicMock
):
mock_monitor.return_value = None
self.dae.api.get_pv_value = MagicMock(return_value="SETUP")
self.dae.get_simulation_mode = MagicMock(return_value=True)
mock_warning = MagicMock()
self.dae.simulation_mode_warning = mock_warning
self.dae.get_timing_source = MagicMock(return_value="isis")
sim_mock_warning = MagicMock()
clock_mock_warning = MagicMock()
self.dae.test_clock_warning = clock_mock_warning
self.dae.simulation_mode_warning = sim_mock_warning

self.dae.begin_run()

mock_warning.assert_called_once()
sim_mock_warning.assert_called_once()
clock_mock_warning.assert_not_called()

@patch("genie_python.genie_cachannel_wrapper.CaChannelWrapper.add_monitor")
def test_GIVEN_not_in_simulation_mode_WHEN_begin_run_THEN_user_is_warned(self, mock_monitor):
def test_GIVEN_not_in_test_clock_not_in_simulation_mode_WHEN_begin_run_THEN_user_is_warned(
self, mock_monitor: MagicMock
):
mock_monitor.return_value = None
self.dae.api.get_pv_value = MagicMock(return_value="SETUP")
self.dae.get_simulation_mode = MagicMock(return_value=False)
mock_warning = MagicMock()
self.dae.simulation_mode_warning = mock_warning
self.dae.get_timing_source = MagicMock(return_value="isis")
sim_mock_warning = MagicMock()
clock_mock_warning = MagicMock()
self.dae.test_clock_warning = clock_mock_warning
self.dae.simulation_mode_warning = sim_mock_warning

self.dae.begin_run()

mock_warning.assert_not_called()
sim_mock_warning.assert_not_called()
clock_mock_warning.assert_not_called()

def get_y_or_yc_pv_value(self, pv, _, use_numpy=False):
if "X" in pv:
Expand Down Expand Up @@ -691,7 +741,7 @@ def set_run_state(self, new_runstate):

@patch("genie_python.genie_cachannel_wrapper.CaChannelWrapper.add_monitor")
def test_GIVEN_in_setup_state_WHEN_begin_run_called_THEN_no_exception_thrown(
self, mock_monitor
self, mock_monitor: MagicMock
):
mock_monitor.return_value = None
self.set_run_state("SETUP")
Expand Down