diff options
author | Lukacs Berki <lberki@google.com> | 2016-08-19 14:40:20 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-08-22 08:11:02 +0000 |
commit | 3d97e2245dbbd34d3428218e745a3770c6d1c0ee (patch) | |
tree | a93a61ffc98339b363dea6d06cfa7e35530c870e /src/test/java/com | |
parent | f5cf200376dd7ebd201138283b2585a6e0cab260 (diff) |
Implement timeouts on Windows.
Makes #1664 much less acute.
--
MOS_MIGRATED_REVID=130750731
Diffstat (limited to 'src/test/java/com')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/windows/MockSubprocess.java | 10 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/windows/WindowsProcessesTest.java | 15 |
2 files changed, 20 insertions, 5 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/windows/MockSubprocess.java b/src/test/java/com/google/devtools/build/lib/windows/MockSubprocess.java index 1562532b3d..540162caf7 100644 --- a/src/test/java/com/google/devtools/build/lib/windows/MockSubprocess.java +++ b/src/test/java/com/google/devtools/build/lib/windows/MockSubprocess.java @@ -34,6 +34,7 @@ import java.util.Map; * <li><code>O<register></code>: Write the contents of a register to stdout</li> * <li><code>E<register></code>: Write the contents of a register to stderr</li> * <li><code>X<exit code%gt;</code>: Exit with the specified exit code</li> + * <li><code>S<seconds></code>: Wait the specified number of seconds</li> * </ul> * * <p>Registers are single characters. Each command line argument is interpreted as a single @@ -95,6 +96,15 @@ public class MockSubprocess { writeBytes(System.out, arg); break; + case 'W': + try { + Thread.sleep(Integer.parseInt(arg.substring(1)) * 1000); + } catch (InterruptedException e) { + // This is good enough for a mock process + throw new IllegalStateException(e); + } + break; + case 'X': System.exit(Integer.parseInt(arg.substring(1))); } diff --git a/src/test/java/com/google/devtools/build/lib/windows/WindowsProcessesTest.java b/src/test/java/com/google/devtools/build/lib/windows/WindowsProcessesTest.java index 074c81d6b5..0b09216978 100644 --- a/src/test/java/com/google/devtools/build/lib/windows/WindowsProcessesTest.java +++ b/src/test/java/com/google/devtools/build/lib/windows/WindowsProcessesTest.java @@ -133,7 +133,7 @@ public class WindowsProcessesTest { @Test public void testExitCode() throws Exception { process = WindowsProcesses.nativeCreateProcess(mockArgs("X42"), null, null, null, null); - assertThat(WindowsProcesses.nativeWaitFor(process)).isTrue(); + assertThat(WindowsProcesses.nativeWaitFor(process, -1)).isEqualTo(0); assertThat(WindowsProcesses.nativeGetExitCode(process)).isEqualTo(42); assertNoProcessError(); } @@ -302,7 +302,7 @@ public class WindowsProcessesTest { null, null, stdoutFile, stderrFile); assertThat(process).isGreaterThan(0L); assertNoProcessError(); - assertThat(WindowsProcesses.nativeWaitFor(process)).isTrue(); + assertThat(WindowsProcesses.nativeWaitFor(process, -1)).isEqualTo(0); WindowsProcesses.nativeGetExitCode(process); assertNoProcessError(); byte[] stdout = Files.readAllBytes(Paths.get(stdoutFile)); @@ -319,7 +319,7 @@ public class WindowsProcessesTest { null, null, file, file); assertThat(process).isGreaterThan(0L); assertNoProcessError(); - assertThat(WindowsProcesses.nativeWaitFor(process)).isTrue(); + assertThat(WindowsProcesses.nativeWaitFor(process, -1)).isEqualTo(0); WindowsProcesses.nativeGetExitCode(process); assertNoProcessError(); byte[] bytes = Files.readAllBytes(Paths.get(file)); @@ -337,7 +337,7 @@ public class WindowsProcessesTest { byte[] buf = new byte[1]; assertThat(readStdout(buf, 0, 1)).isEqualTo(-1); assertThat(readStderr(buf, 0, 1)).isEqualTo(-1); - WindowsProcesses.nativeWaitFor(process); + WindowsProcesses.nativeWaitFor(process, -1); } @Test @@ -352,7 +352,7 @@ public class WindowsProcessesTest { process = WindowsProcesses.nativeCreateProcess(mockArgs("O-out2", "E-err2"), null, null, stdoutFile, stderrFile); assertNoProcessError(); - WindowsProcesses.nativeWaitFor(process); + WindowsProcesses.nativeWaitFor(process, -1); WindowsProcesses.nativeGetExitCode(process); assertNoProcessError(); byte[] stdoutBytes = Files.readAllBytes(Paths.get(stdoutFile)); @@ -372,6 +372,11 @@ public class WindowsProcessesTest { int len = readStdout(buf, 0, 1024); assertNoProcessError(); assertThat(new String(buf, 0, len, UTF8).replace("\\", "/")).isEqualTo(dir1); + } + @Test + public void testTimeout() throws Exception { + process = WindowsProcesses.nativeCreateProcess(mockArgs("W5", "X0"), null, null, null, null); + assertThat(WindowsProcesses.nativeWaitFor(process, 1000)).isEqualTo(1); } } |