Skip to content

Commit d8e1b57

Browse files
strategy: decorate strategy's transition()/force() with @never_retry
In order to get the word out about the @never_retry decorator, decorate the strategies in labgrid with it. Signed-off-by: Bastian Krause <[email protected]>
1 parent 0afece2 commit d8e1b57

File tree

5 files changed

+20
-5
lines changed

5 files changed

+20
-5
lines changed

labgrid/strategy/bareboxstrategy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from ..factory import target_factory
66
from ..step import step
7-
from .common import Strategy, StrategyError
7+
from .common import Strategy, StrategyError, never_retry
88

99

1010
class Status(enum.Enum):
@@ -30,6 +30,7 @@ class BareboxStrategy(Strategy):
3030
def __attrs_post_init__(self):
3131
super().__attrs_post_init__()
3232

33+
@never_retry
3334
@step(args=['status'])
3435
def transition(self, status, *, step): # pylint: disable=redefined-outer-name
3536
if not isinstance(status, Status):
@@ -63,6 +64,7 @@ def transition(self, status, *, step): # pylint: disable=redefined-outer-name
6364
)
6465
self.status = status
6566

67+
@never_retry
6668
@step(args=['status'])
6769
def force(self, status):
6870
if not isinstance(status, Status):

labgrid/strategy/dockerstrategy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import attr
44

55
from ..factory import target_factory
6-
from .common import Strategy, StrategyError
6+
from .common import Strategy, StrategyError, never_retry
77
from ..driver.dockerdriver import DockerDriver
88
from ..step import step
99

@@ -33,6 +33,7 @@ class DockerStrategy(Strategy):
3333
def __attrs_post_init__(self):
3434
super().__attrs_post_init__()
3535

36+
@never_retry
3637
@step(args=['status'])
3738
def transition(self, status):
3839
if not isinstance(status, Status):

labgrid/strategy/shellstrategy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from ..factory import target_factory
66
from ..step import step
7-
from .common import Strategy, StrategyError
7+
from .common import Strategy, StrategyError, never_retry
88

99

1010
class Status(enum.Enum):
@@ -28,6 +28,7 @@ class ShellStrategy(Strategy):
2828
def __attrs_post_init__(self):
2929
super().__attrs_post_init__()
3030

31+
@never_retry
3132
@step(args=['status'])
3233
def transition(self, status, *, step): # pylint: disable=redefined-outer-name
3334
if not isinstance(status, Status):
@@ -53,6 +54,7 @@ def transition(self, status, *, step): # pylint: disable=redefined-outer-name
5354
)
5455
self.status = status
5556

57+
@never_retry
5658
@step(args=['status'])
5759
def force(self, status, *, step): # pylint: disable=redefined-outer-name
5860
if not isinstance(status, Status):

labgrid/strategy/ubootstrategy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import attr
44

55
from ..factory import target_factory
6-
from .common import Strategy, StrategyError
6+
from .common import Strategy, StrategyError, never_retry
77

88

99
class Status(enum.Enum):
@@ -29,6 +29,7 @@ class UBootStrategy(Strategy):
2929
def __attrs_post_init__(self):
3030
super().__attrs_post_init__()
3131

32+
@never_retry
3233
def transition(self, status):
3334
if not isinstance(status, Status):
3435
status = Status[status]
@@ -58,6 +59,7 @@ def transition(self, status):
5859
raise StrategyError(f"no transition found from {self.status} to {status}")
5960
self.status = status
6061

62+
@never_retry
6163
def force(self, status):
6264
if not isinstance(status, Status):
6365
status = Status[status]

tests/test_docker.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,10 +308,18 @@ def test_docker_without_daemon(docker_env, mocker):
308308
with pytest.raises(StrategyError):
309309
strategy.transition("unknown")
310310

311+
# test and reset broken state
312+
assert isinstance(strategy.broken, StrategyError)
313+
strategy.broken = None
314+
311315
# Also bonus: How are invalid state names handled?
312-
with pytest.raises(KeyError):
316+
with pytest.raises(StrategyError):
313317
strategy.transition("this is not a valid state")
314318

319+
# test and reset broken state
320+
assert isinstance(strategy.broken, KeyError)
321+
strategy.broken = None
322+
315323
# Return to "gone" state - to also use that part of the DockerDriver code.
316324
strategy.transition("gone")
317325
from labgrid.strategy.dockerstrategy import Status

0 commit comments

Comments
 (0)