Skip to content

Commit 301a43a

Browse files
committed
Add test for bluesky suspenders
1 parent e5bc45b commit 301a43a

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

tests/core/test_signal.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,20 @@
66

77
import numpy
88
import pytest
9+
from bluesky import Msg
910
from bluesky.protocols import Reading
1011

12+
# from bluesky.run_engine import call_in_bluesky_event_loop
13+
from bluesky.suspenders import (
14+
SuspendBoolHigh,
15+
SuspendBoolLow,
16+
SuspendCeil,
17+
SuspendFloor,
18+
SuspendInBand,
19+
SuspendOutBand,
20+
SuspendWhenOutsideBand,
21+
)
22+
1123
from ophyd_async.core import (
1224
DEFAULT_TIMEOUT,
1325
ConfigSignal,
@@ -457,3 +469,62 @@ def some_function(self):
457469
assert isinstance((await signal.get_value()), SomeClass)
458470
await signal.set(1)
459471
assert (await signal.get_value()) == 1
472+
473+
474+
@pytest.mark.parametrize(
475+
"klass,sc_args,start_val,fail_val,resume_val,wait_time",
476+
[
477+
(SuspendBoolHigh, (), 0, 1, 0, 0.2),
478+
(SuspendBoolLow, (), 1, 0, 1, 0.2),
479+
(SuspendFloor, (0.5,), 1, 0, 1, 0.2),
480+
(SuspendCeil, (0.5,), 0, 1, 0, 0.2),
481+
(SuspendWhenOutsideBand, (0.5, 1.5), 1, 0, 1, 0.2),
482+
((SuspendInBand, True), (0.5, 1.5), 1, 0, 1, 0.2), # renamed to WhenOutsideBand
483+
((SuspendOutBand, True), (0.5, 1.5), 0, 1, 0, 0.2),
484+
],
485+
) # deprecated
486+
async def test_bluesky_suspenders(
487+
klass, sc_args, start_val, fail_val, resume_val, wait_time, RE
488+
):
489+
sleep_time = 0.2
490+
fail_time = 0.1
491+
resume_time = 0.5
492+
signal = epics_signal_rw(int, "mock_signal")
493+
await signal.connect(mock=True)
494+
try:
495+
klass, deprecated = klass
496+
except TypeError:
497+
deprecated = False
498+
if deprecated:
499+
with pytest.warns(UserWarning):
500+
suspender = klass(signal, *sc_args, sleep=wait_time)
501+
else:
502+
suspender = klass(signal, *sc_args, sleep=wait_time)
503+
504+
RE.install_suspender(suspender)
505+
506+
await signal.set(start_val)
507+
508+
async def _set_after_time(val, sleep):
509+
await asyncio.sleep(sleep)
510+
await signal.set(val)
511+
512+
start = time.time()
513+
514+
# loop = RE.loop
515+
516+
tasks = []
517+
# call_in_bluesky_event_loop(_set_after_time(fail_val, fail_time))
518+
# call_in_bluesky_event_loop(_set_after_time(resume_val, resume_time))
519+
# tasks.append(loop.create_task(_set_after_time(fail_val, fail_time)))
520+
# tasks.append(loop.create_task(_set_after_time(resume_val, resume_time)))
521+
tasks.append(asyncio.create_task(_set_after_time(fail_val, fail_time)))
522+
tasks.append(asyncio.create_task(_set_after_time(resume_val, resume_time)))
523+
524+
RE([Msg("checkpoint"), Msg("sleep", None, sleep_time)])
525+
526+
stop = time.time()
527+
delta = stop - start
528+
for task in tasks:
529+
await task
530+
assert delta >= resume_time + sleep_time + wait_time

0 commit comments

Comments
 (0)