| 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 |