aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java
diff options
context:
space:
mode:
authorGravatar ulfjack <ulfjack@google.com>2017-08-09 15:27:49 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-08-10 13:39:00 +0200
commitf2d459502f5fb422d6000db782795cffc6efa3e4 (patch)
tree35fc4d0cfb5cd22a179107fd90068366ffa85768 /src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java
parent6b2dce6710ed7d2429e0e3dc113c9bad622b8c4b (diff)
Rewrite the Command API
Important: the simplified API now defaults to forwarding interrupts to subprocesses. I did audit all the call sites, and I think this is a safe change to make. - Properly support timeouts with all implementations - Simplify the API - only provide two flavours of blocking calls, which require no input and forward interrupts; this is the most common usage - provide a number of async calls, which optionally takes input, and a flag whether to forward interrupts - only support input streams, no byte arrays or other 'convenience features' that are rarely needed and unnecessarily increase the surface area - use java.time.Duration to specify timeout; for consistency, interpret a timeout of <= 0 as no timeout (i.e., including rather than excluding 0) - KillableObserver and subclasses are no longer part of the public API, but still used to implement timeouts if the Subprocess.Factory does not support them - Update the documentation for Command - Update all callers; most callers now use the simplified API PiperOrigin-RevId: 164716782
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java55
1 files changed, 30 insertions, 25 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java b/src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java
index f62e01b71d..9884be2adb 100644
--- a/src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/shell/CommandLargeInputsTest.java
@@ -57,54 +57,57 @@ public class CommandLargeInputsTest {
}
@Test
- public void testCatRandomBinary() throws Exception {
+ public void testCatRandomBinaryToOutputStream() throws Exception {
final Command command = new Command(new String[] {"cat"});
byte[] randomBytes = getRandomBytes();
- final CommandResult result = command.execute(randomBytes);
+ ByteArrayInputStream in = new ByteArrayInputStream(randomBytes);
+
+ CommandResult result =
+ command.executeAsync(in, Command.KILL_SUBPROCESS_ON_INTERRUPT).get();
assertThat(result.getTerminationStatus().getRawExitCode()).isEqualTo(0);
TestUtil.assertArrayEquals(randomBytes, result.getStdout());
assertThat(result.getStderr()).isEmpty();
}
@Test
- public void testCatRandomBinaryToOutputStream() throws Exception {
- final Command command = new Command(new String[] {"cat"});
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- ByteArrayOutputStream err = new ByteArrayOutputStream();
+ public void testCatRandomBinaryToErrorStream() throws Exception {
+ final Command command = new Command(new String[] {"/bin/sh", "-c", "cat >&2"});
byte[] randomBytes = getRandomBytes();
- final CommandResult result = command.execute(randomBytes,
- Command.NO_OBSERVER, out, err);
+ ByteArrayInputStream in = new ByteArrayInputStream(randomBytes);
+
+ CommandResult result =
+ command.executeAsync(in, Command.KILL_SUBPROCESS_ON_INTERRUPT).get();
assertThat(result.getTerminationStatus().getRawExitCode()).isEqualTo(0);
- TestUtil.assertArrayEquals(randomBytes, out.toByteArray());
- assertThat(err.toByteArray()).isEmpty();
- assertOutAndErrNotAvailable(result);
- }
+ TestUtil.assertArrayEquals(randomBytes, result.getStderr());
+ assertThat(result.getStdout()).isEmpty();
+ }
@Test
- public void testCatRandomBinaryToErrorStream() throws Exception {
- final Command command = new Command(new String[] {"/bin/sh", "-c", "cat >&2"});
+ public void testCatRandomBinaryFromInputStreamToOutputStream() throws Exception {
+ final Command command = new Command(new String[] {"cat"});
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
byte[] randomBytes = getRandomBytes();
- final CommandResult result = command.execute(randomBytes,
- Command.NO_OBSERVER, out, err);
+ ByteArrayInputStream in = new ByteArrayInputStream(randomBytes);
+
+ CommandResult result =
+ command.executeAsync(in, out, err, Command.KILL_SUBPROCESS_ON_INTERRUPT).get();
assertThat(result.getTerminationStatus().getRawExitCode()).isEqualTo(0);
- assertThat(out.toByteArray()).isEmpty();
- TestUtil.assertArrayEquals(randomBytes, err.toByteArray());
+ assertThat(err.toByteArray()).isEmpty();
+ TestUtil.assertArrayEquals(randomBytes, out.toByteArray());
assertOutAndErrNotAvailable(result);
}
@Test
- public void testCatRandomBinaryFromInputStreamToErrorStream()
- throws Exception {
+ public void testCatRandomBinaryFromInputStreamToErrorStream() throws Exception {
final Command command = new Command(new String[] {"/bin/sh", "-c", "cat >&2"});
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
byte[] randomBytes = getRandomBytes();
ByteArrayInputStream in = new ByteArrayInputStream(randomBytes);
- final CommandResult result = command.execute(in,
- Command.NO_OBSERVER, out, err);
+ CommandResult result =
+ command.executeAsync(in, out, err, Command.KILL_SUBPROCESS_ON_INTERRUPT).get();
assertThat(result.getTerminationStatus().getRawExitCode()).isEqualTo(0);
assertThat(out.toByteArray()).isEmpty();
TestUtil.assertArrayEquals(randomBytes, err.toByteArray());
@@ -118,7 +121,7 @@ public class CommandLargeInputsTest {
});
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
- command.execute(Command.NO_INPUT, Command.NO_OBSERVER, out, err);
+ command.execute(out, err);
StringBuilder expectedOut = new StringBuilder();
StringBuilder expectedErr = new StringBuilder();
for (int i = 0; i < 1000; i++) {
@@ -144,10 +147,12 @@ public class CommandLargeInputsTest {
public void testCatAllByteValues() throws Exception {
final Command command = new Command(new String[] {"cat"});
byte[] allByteValues = getAllByteValues();
- final CommandResult result = command.execute(allByteValues);
+ ByteArrayInputStream in = new ByteArrayInputStream(allByteValues);
+
+ CommandResult result =
+ command.executeAsync(in, Command.KILL_SUBPROCESS_ON_INTERRUPT).get();
assertThat(result.getTerminationStatus().getRawExitCode()).isEqualTo(0);
assertThat(result.getStderr()).isEmpty();
TestUtil.assertArrayEquals(allByteValues, result.getStdout());
}
-
}