diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/shell/StreamGobbler.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/shell/StreamGobbler.java new file mode 100644 index 0000000000..9c7fcae627 --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/shell/StreamGobbler.java @@ -0,0 +1,21 @@ +package com.baeldung.shell; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.function.Consumer; + +public class StreamGobbler implements Runnable { + private final InputStream inputStream; + private final Consumer consumer; + + public StreamGobbler(InputStream inputStream, Consumer consumer) { + this.inputStream = inputStream; + this.consumer = consumer; + } + + @Override + public void run() { + new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer); + } +} diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java index 9d24dd1578..7bb0cfdf00 100644 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/shell/JavaProcessUnitIntegrationTest.java @@ -5,10 +5,7 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import java.io.BufferedReader; import java.io.File; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -21,21 +18,6 @@ import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; public class JavaProcessUnitIntegrationTest { private static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows"); - private static class StreamGobbler implements Runnable { - private InputStream inputStream; - private Consumer consumer; - - public StreamGobbler(InputStream inputStream, Consumer consumer) { - this.inputStream = inputStream; - this.consumer = consumer; - } - - @Override - public void run() { - new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer); - } - } - private Consumer consumer = Assert::assertNotNull; private String homeDirectory = System.getProperty("user.home"); @@ -58,7 +40,7 @@ public class JavaProcessUnitIntegrationTest { if (IS_WINDOWS) { process = Runtime.getRuntime().exec(String.format("cmd.exe /c dir %s", homeDirectory)); } else { - process = Runtime.getRuntime().exec(String.format("sh -c ls %s", homeDirectory)); + process = Runtime.getRuntime().exec(String.format("/bin/sh -c ls %s", homeDirectory)); } StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), consumer); @@ -70,13 +52,34 @@ public class JavaProcessUnitIntegrationTest { assertEquals(0, exitCode); } + @Test + public void shouldExecuteCommandWithPipesWithRuntimeProcess(){ + Process process; + try { +if (IS_WINDOWS) { + process = Runtime.getRuntime().exec(String.format("cmd.exe /c dir %s | findstr \"Desktop\"", homeDirectory)); +} else { + process = Runtime.getRuntime().exec(String.format("/bin/sh -c ls %s | grep \"Desktop\"", homeDirectory)); +} + StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), consumer); + + Future future = executorService.submit(streamGobbler); + int exitCode = process.waitFor(); + + // verify the stream output from the process + assertDoesNotThrow(() -> future.get(10, TimeUnit.SECONDS)); + assertEquals(0, exitCode); + } catch (Exception e) { + e.printStackTrace(); + } + } @Test public void givenProcess_whenCreatingViaProcessBuilder_shouldSucceed() throws Exception { ProcessBuilder builder = new ProcessBuilder(); if (IS_WINDOWS) { builder.command("cmd.exe", "/c", "dir"); } else { - builder.command("sh", "-c", "ls"); + builder.command("/bin/sh", "-c", "ls"); } builder.directory(new File(homeDirectory)); Process process = builder.start(); diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/system/exit/SystemExitUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/system/exit/SystemExitUnitTest.java index 6d5f9c2f34..8ad3f75623 100644 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/system/exit/SystemExitUnitTest.java +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/system/exit/SystemExitUnitTest.java @@ -1,15 +1,41 @@ package com.baeldung.system.exit; -import static org.junit.Assert.assertEquals; - -import java.security.Permission; - import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; +import java.security.Permission; + +import static org.junit.Assert.assertEquals; + +@Ignore("This test is ignored because it tests deprecated code") public class SystemExitUnitTest { + private SecurityManager securityManager; + private SystemExitExample example; + + @Before + public void setUp() { + example = new SystemExitExample(); + securityManager = System.getSecurityManager(); + System.setSecurityManager(new NoExitSecurityManager()); + } + + @After + public void tearDown() throws Exception { + System.setSecurityManager(securityManager); + } + + @Test + public void testExit() throws Exception { + try { + example.readFile(); + } catch (ExitException e) { + assertEquals("Exit status", 2, e.status); + } + } + protected static class ExitException extends SecurityException { private static final long serialVersionUID = 1L; @@ -35,29 +61,4 @@ public class SystemExitUnitTest { throw new ExitException(status); } } - - private SecurityManager securityManager; - - private SystemExitExample example; - - @Before - public void setUp() throws Exception { - example = new SystemExitExample(); - securityManager = System.getSecurityManager(); - System.setSecurityManager(new NoExitSecurityManager()); - } - - @After - public void tearDown() throws Exception { - System.setSecurityManager(securityManager); - } - - @Test - public void testExit() throws Exception { - try { - example.readFile(); - } catch (ExitException e) { - assertEquals("Exit status", 2, e.status); - } - } } \ No newline at end of file