1 | package com.github.dakusui.actionunit.actions; | |
2 | ||
3 | import com.github.dakusui.actionunit.core.Action; | |
4 | ||
5 | import java.util.concurrent.TimeUnit; | |
6 | ||
7 | import static com.github.dakusui.actionunit.core.ActionSupport.retry; | |
8 | import static com.github.dakusui.actionunit.core.ActionSupport.timeout; | |
9 | import static java.util.Objects.requireNonNull; | |
10 | import static java.util.concurrent.TimeUnit.SECONDS; | |
11 | ||
12 | public class RetryOption { | |
13 | public static class Builder { | |
14 | long timeoutDuration = -1; | |
15 | TimeUnit timeoutTimeUnit = SECONDS; | |
16 | Class<? extends Throwable> retryOn = Throwable.class; | |
17 | long retryInterval = -1; | |
18 | TimeUnit retryIntervalTimeUnit = SECONDS; | |
19 | int retries = -1; | |
20 | ||
21 | public Builder timeoutIn(long timeoutDuration, TimeUnit timeoutTimeUnit) { | |
22 | this.timeoutDuration = timeoutDuration; | |
23 | this.timeoutTimeUnit = timeoutTimeUnit; | |
24 |
1
1. timeoutIn : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption$Builder::timeoutIn → KILLED |
return this; |
25 | } | |
26 | ||
27 | public Builder retryOn(Class<? extends Throwable> retryOn) { | |
28 | this.retryOn = requireNonNull(retryOn); | |
29 |
1
1. retryOn : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption$Builder::retryOn → KILLED |
return this; |
30 | } | |
31 | ||
32 | public Builder retries(int retries) { | |
33 | this.retries = retries; | |
34 |
1
1. retries : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption$Builder::retries → KILLED |
return this; |
35 | } | |
36 | ||
37 | public Builder retryInterval(long retryInterval, TimeUnit retryIntervalTimeUnit) { | |
38 | this.retryInterval = retryInterval; | |
39 | this.retryIntervalTimeUnit = retryIntervalTimeUnit; | |
40 |
1
1. retryInterval : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption$Builder::retryInterval → KILLED |
return this; |
41 | } | |
42 | ||
43 | public RetryOption build() { | |
44 |
1
1. build : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption$Builder::build → KILLED |
return new RetryOption( |
45 | timeoutDuration, | |
46 | timeoutTimeUnit, | |
47 | retryOn, | |
48 | retryInterval, | |
49 | retryIntervalTimeUnit, | |
50 | retries); | |
51 | } | |
52 | } | |
53 | ||
54 | public static RetryOption.Builder builder() { | |
55 |
1
1. builder : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption::builder → KILLED |
return new RetryOption.Builder(); |
56 | } | |
57 | ||
58 | public static RetryOption timeoutInSeconds(long timeoutInSeconds) { | |
59 |
1
1. timeoutInSeconds : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption::timeoutInSeconds → KILLED |
return new RetryOption.Builder() |
60 | .timeoutIn(timeoutInSeconds, SECONDS) | |
61 | .retries(0) | |
62 | .retryOn(Throwable.class) | |
63 | .retryInterval(0, SECONDS) | |
64 | .build(); | |
65 | } | |
66 | ||
67 | public static RetryOption none() { | |
68 |
1
1. none : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption::none → KILLED |
return new Builder() |
69 | .timeoutIn(-1, SECONDS) | |
70 | .retryOn(Throwable.class) | |
71 | .timeoutIn(-1, SECONDS) | |
72 | .retries(-1).build(); | |
73 | } | |
74 | ||
75 | public final long timeoutDuration; | |
76 | public final TimeUnit timeoutTimeUnit; | |
77 | public final Class<? extends Throwable> retryOn; | |
78 | public final long retryInterval; | |
79 | public final TimeUnit retryIntervalTimeUnit; | |
80 | public final int retries; | |
81 | ||
82 | ||
83 | private RetryOption( | |
84 | long timeoutDuration, | |
85 | TimeUnit timeoutTimeUnit, | |
86 | Class<? extends Throwable> retryOn, | |
87 | long retryInterval, | |
88 | TimeUnit retryIntervalTimeUnit, | |
89 | int retries) { | |
90 | this.timeoutDuration = timeoutDuration; | |
91 | this.timeoutTimeUnit = requireNonNull(timeoutTimeUnit); | |
92 | this.retryOn = requireNonNull(retryOn); | |
93 | this.retryInterval = retryInterval; | |
94 | this.retryIntervalTimeUnit = requireNonNull(retryIntervalTimeUnit); | |
95 | this.retries = retries; | |
96 | } | |
97 | ||
98 | public static Action retryAndTimeOut(Action action, RetryOption retryOption) { | |
99 |
2
1. retryAndTimeOut : changed conditional boundary → KILLED 2. retryAndTimeOut : negated conditional → KILLED |
if (retryOption.retries > 0) |
100 | action = retry(action) | |
101 | .on(retryOption.retryOn) | |
102 | .times(retryOption.retries) | |
103 | .withIntervalOf(retryOption.retryInterval, retryOption.retryIntervalTimeUnit) | |
104 | .$(); | |
105 |
2
1. retryAndTimeOut : changed conditional boundary → SURVIVED 2. retryAndTimeOut : negated conditional → KILLED |
if (retryOption.timeoutDuration >= 0) |
106 | action = timeout(action).in(retryOption.timeoutDuration, retryOption.timeoutTimeUnit); | |
107 |
1
1. retryAndTimeOut : replaced return value with null for com/github/dakusui/actionunit/actions/RetryOption::retryAndTimeOut → KILLED |
return action; |
108 | } | |
109 | } | |
Mutations | ||
24 |
1.1 |
|
29 |
1.1 |
|
34 |
1.1 |
|
40 |
1.1 |
|
44 |
1.1 |
|
55 |
1.1 |
|
59 |
1.1 |
|
68 |
1.1 |
|
99 |
1.1 2.2 |
|
105 |
1.1 2.2 |
|
107 |
1.1 |