Skip to content

Commit 6c3ccae

Browse files
committed
Allow null for process timeout
Fixes #476
1 parent 2719c1e commit 6c3ccae

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed

process/src/main/java/io/smallrye/common/process/ProcessBuilderImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,13 @@ public ProcessBuilder<O> exitCodeChecker(final IntPredicate checker) {
177177

178178
public ProcessBuilder<O> softExitTimeout(final Duration duration) {
179179
check();
180-
this.softExitTimeout = Assert.checkNotNullParam("duration", duration);
180+
this.softExitTimeout = duration;
181181
return this;
182182
}
183183

184184
public ProcessBuilder<O> hardExitTimeout(final Duration duration) {
185185
check();
186-
this.hardExitTimeout = Assert.checkNotNullParam("duration", duration);
186+
this.hardExitTimeout = duration;
187187
return this;
188188
}
189189

process/src/test/java/io/smallrye/common/process/ProcessUtilTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.smallrye.common.process;
22

3-
import org.junit.jupiter.api.Test;
4-
53
import static org.junit.jupiter.api.Assertions.assertFalse;
64

5+
import org.junit.jupiter.api.Test;
6+
77
public class ProcessUtilTest {
88

99
@Test

process/src/test/java/io/smallrye/common/process/TestBasicExecution.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,23 @@
99
import java.net.URISyntaxException;
1010
import java.net.URL;
1111
import java.nio.file.Path;
12+
import java.time.Duration;
13+
import java.time.temporal.ChronoUnit;
1214
import java.util.ArrayDeque;
1315
import java.util.List;
1416
import java.util.concurrent.CompletableFuture;
1517
import java.util.concurrent.ExecutionException;
1618
import java.util.stream.Stream;
1719

20+
import org.junit.jupiter.api.Assumptions;
1821
import org.junit.jupiter.api.Test;
1922

23+
import io.smallrye.common.os.OS;
2024
import io.smallrye.common.process.helpers.Cat;
2125
import io.smallrye.common.process.helpers.Cwd;
2226
import io.smallrye.common.process.helpers.Errorifier;
2327
import io.smallrye.common.process.helpers.ErrorifierWithOutput;
28+
import io.smallrye.common.process.helpers.WaitForever;
2429

2530
public class TestBasicExecution {
2631

@@ -244,6 +249,30 @@ public void testNullPointerOnRedirect() throws Exception {
244249
});
245250
}
246251

252+
@Test
253+
public void testSoftTimeout() throws Exception {
254+
// windows doesn't do soft timeouts
255+
Assumptions.assumeFalse(OS.WINDOWS.isCurrent());
256+
assertThrows(AbnormalExitException.class, () -> {
257+
ProcessBuilder.newBuilder(ProcessUtil.pathOfJava())
258+
.arguments(findHelper(WaitForever.class))
259+
.softExitTimeout(Duration.of(50, ChronoUnit.MILLIS))
260+
.hardExitTimeout(null)
261+
.run();
262+
});
263+
}
264+
265+
@Test
266+
public void testHardTimeout() throws Exception {
267+
assertThrows(AbnormalExitException.class, () -> {
268+
ProcessBuilder.newBuilder(ProcessUtil.pathOfJava())
269+
.arguments(findHelper(WaitForever.class))
270+
.softExitTimeout(null)
271+
.hardExitTimeout(Duration.of(50, ChronoUnit.MILLIS))
272+
.run();
273+
});
274+
}
275+
247276
@Test
248277
public void testFormatInfiniteLoop() {
249278
// just make sure it doesn't infinitely loop
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.smallrye.common.process.helpers;
2+
3+
import java.util.concurrent.locks.LockSupport;
4+
5+
public final class WaitForever {
6+
public static void main(String[] args) {
7+
System.out.close();
8+
System.err.close();
9+
for (;;) {
10+
LockSupport.park();
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)