Skip to content

Commit 6b3b1e4

Browse files
committed
Add test for bluesky suspenders
1 parent e5bc45b commit 6b3b1e4

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

tests/core/test_signal.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,18 @@
66

77
import numpy
88
import pytest
9+
from bluesky import Msg
910
from bluesky.protocols import Reading
11+
from bluesky.run_engine import call_in_bluesky_event_loop
12+
from bluesky.suspenders import (
13+
SuspendBoolHigh,
14+
SuspendBoolLow,
15+
SuspendCeil,
16+
SuspendFloor,
17+
SuspendInBand,
18+
SuspendOutBand,
19+
SuspendWhenOutsideBand,
20+
)
1021

1122
from ophyd_async.core import (
1223
DEFAULT_TIMEOUT,
@@ -457,3 +468,58 @@ def some_function(self):
457468
assert isinstance((await signal.get_value()), SomeClass)
458469
await signal.set(1)
459470
assert (await signal.get_value()) == 1
471+
472+
473+
@pytest.mark.parametrize(
474+
"klass,sc_args,start_val,fail_val,resume_val,wait_time",
475+
[
476+
(SuspendBoolHigh, (), 0, 1, 0, 0.2),
477+
(SuspendBoolLow, (), 1, 0, 1, 0.2),
478+
(SuspendFloor, (0.5,), 1, 0, 1, 0.2),
479+
(SuspendCeil, (0.5,), 0, 1, 0, 0.2),
480+
(SuspendWhenOutsideBand, (0.5, 1.5), 1, 0, 1, 0.2),
481+
((SuspendInBand, True), (0.5, 1.5), 1, 0, 1, 0.2), # renamed to WhenOutsideBand
482+
((SuspendOutBand, True), (0.5, 1.5), 0, 1, 0, 0.2),
483+
],
484+
) # deprecated
485+
async def test_bluesky_suspenders(
486+
klass, sc_args, start_val, fail_val, resume_val, wait_time, RE
487+
):
488+
sleep_time = 0.2
489+
fail_time = 0.1
490+
resume_time = 0.5
491+
signal = epics_signal_rw(int, "mock_signal")
492+
await signal.connect(mock=True)
493+
try:
494+
klass, deprecated = klass
495+
except TypeError:
496+
deprecated = False
497+
if deprecated:
498+
with pytest.warns(UserWarning):
499+
suspender = klass(signal, *sc_args, sleep=wait_time)
500+
else:
501+
suspender = klass(signal, *sc_args, sleep=wait_time)
502+
503+
RE.install_suspender(suspender)
504+
505+
await signal.set(start_val)
506+
507+
async def _set_after_time():
508+
await asyncio.sleep(fail_time)
509+
await signal.set(fail_val)
510+
await asyncio.sleep(resume_time - fail_time)
511+
await signal.set(resume_val)
512+
513+
start = time.time()
514+
515+
# loop = RE.loop
516+
517+
call_in_bluesky_event_loop(_set_after_time())
518+
# task = RE.loop.create_task(_set_after_time())
519+
520+
RE([Msg("checkpoint"), Msg("sleep", None, sleep_time)])
521+
522+
stop = time.time()
523+
delta = stop - start
524+
# await task
525+
assert delta >= resume_time + sleep_time + wait_time

0 commit comments

Comments
 (0)