blob: 1fe1b7d818e9e9d6fd475383456d17a145868cbc (
plain)
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
|
import enum
import attr
from labgrid import target_factory, step
from labgrid.strategy import Strategy, StrategyError
class Status(enum.Enum):
unknown = 0
off = 1
barebox = 2
@target_factory.reg_driver
@attr.s(eq=False)
class BareboxTestStrategy(Strategy):
"""BareboxTestStrategy - Strategy to switch to barebox"""
bindings = {
"power": "PowerProtocol",
"console": "ConsoleProtocol",
"barebox": "BareboxDriver",
}
status = attr.ib(default=Status.unknown)
def __attrs_post_init__(self):
super().__attrs_post_init__()
@step(args=['status'])
def transition(self, status, *, step):
if not isinstance(status, Status):
status = Status[status]
if status == Status.unknown:
raise StrategyError("can not transition to {}".format(status))
elif status == self.status:
step.skip("nothing to do")
return # nothing to do
elif status == Status.off:
self.target.deactivate(self.console)
self.target.activate(self.power)
self.power.off()
elif status == Status.barebox:
self.transition(Status.off) # pylint: disable=missing-kwoa
self.target.activate(self.console)
# cycle power
self.power.cycle()
# interrupt barebox
self.target.activate(self.barebox)
else:
raise StrategyError(
"no transition found from {} to {}".
format(self.status, status)
)
self.status = status
|