1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
# SPDX-FileCopyrightText: All Contributors to the PyTango project
# SPDX-License-Identifier: LGPL-3.0-or-later
from tango import AttrWriteType, DeviceProxy, InfoIt
from tango.server import Device, attribute, command, device_property
class Leader(Device):
FollowerTRLs = device_property(dtype=(str,))
@InfoIt(show_args=True)
@command(dtype_in=int)
def Turn_Follower_On(self, follower_id):
follower_trl = self.FollowerTRLs[follower_id - 1]
follower_device = DeviceProxy(follower_trl)
follower_device.is_on = True
@command(dtype_in=int)
def Turn_Follower_Off(self, follower_id):
follower_trl = self.FollowerTRLs[follower_id - 1]
follower_device = DeviceProxy(follower_trl)
follower_device.is_on = False
class Follower(Device):
def init_device(self):
super().init_device()
self._is_on = False
is_on = attribute(
dtype=bool,
access=AttrWriteType.READ_WRITE,
)
@InfoIt(show_ret=True)
def read_is_on(self):
return self._is_on
@InfoIt(show_args=True)
def write_is_on(self, value):
self._is_on = value
devices_info = [
{
"class": Leader,
"devices": (
{
"name": "device/leader/1",
"properties": {
"FollowerTRLs": ["device/follower/1", "device/follower/2"],
},
},
),
},
{
"class": Follower,
"devices": [
{"name": "device/follower/1", "properties": {}},
{"name": "device/follower/2", "properties": {}},
],
},
]
class TestLeaderFollowerIntegration:
def test_leader_turn_follower_on(self, tango_context):
leader = DeviceProxy("device/leader/1")
follower_1 = DeviceProxy("device/follower/1")
follower_2 = DeviceProxy("device/follower/2")
# check initial state: both followers are off
assert follower_1.is_on == False
assert follower_2.is_on == False
# tell leader to enable follower_1
leader.turn_follower_on(1)
# check follower_1 is now on, and follower_2 is still off
assert follower_1.is_on == True
assert follower_2.is_on == False
def test_leader_turn_follower_off(self, tango_context):
leader = DeviceProxy("device/leader/1")
follower_1 = DeviceProxy("device/follower/1")
follower_2 = DeviceProxy("device/follower/2")
# tell leader to enable both followers
leader.turn_follower_on(1)
leader.turn_follower_on(2)
# check initial state: both followers are on
assert follower_1.is_on == True
assert follower_2.is_on == True
# tell leader to disable follower_1
leader.turn_follower_off(1)
# check follower_1 is now off, and follower_2 is still on
assert follower_1.is_on == False
assert follower_2.is_on == True
|