Repository: nifi Updated Branches: refs/heads/master f287bc911 -> 27dba60f2
NIFI-2905: Log error stream of ExecuteProcess cmd ExecuteProcess ignores error stream when Redirect Error Stream is false, this commit let it to be logged instead so that user can see it on bulletin. This closes #1143. Signed-off-by: Andy LoPresto <alopre...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/27dba60f Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/27dba60f Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/27dba60f Branch: refs/heads/master Commit: 27dba60f27579ca9f33aa1afbf4bb46182d57df4 Parents: f287bc9 Author: Koji Kawamura <ijokaruma...@apache.org> Authored: Mon Oct 17 17:07:32 2016 +0900 Committer: Andy LoPresto <alopre...@apache.org> Committed: Tue Oct 18 15:56:27 2016 -0700 ---------------------------------------------------------------------- .../processors/standard/ExecuteProcess.java | 3 +- .../processors/standard/TestExecuteProcess.java | 46 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/27dba60f/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java index 62860ed..c0d3f2b 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteProcess.java @@ -316,8 +316,7 @@ public class ExecuteProcess extends AbstractProcessor { @Override public void run() { try (final BufferedReader reader = new BufferedReader(new InputStreamReader(externalProcess.getErrorStream()))) { - while (reader.read() >= 0) { - } + reader.lines().filter(line -> line != null && line.length() > 0).forEach(getLogger()::warn); } catch (final IOException ioe) { } } http://git-wip-us.apache.org/repos/asf/nifi/blob/27dba60f/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java index 160bbdb..8af82f1 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteProcess.java @@ -30,6 +30,7 @@ import java.util.concurrent.ExecutorService; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processors.standard.util.ArgumentUtils; +import org.apache.nifi.util.LogMessage; import org.apache.nifi.util.MockFlowFile; import org.apache.nifi.util.TestRunner; import org.apache.nifi.util.TestRunners; @@ -205,4 +206,49 @@ public class TestExecuteProcess { // assertEquals(inFile.length(), totalFlowFilesSize); } + + @Test + public void testNotRedirectErrorStream() { + final TestRunner runner = TestRunners.newTestRunner(ExecuteProcess.class); + runner.setProperty(ExecuteProcess.COMMAND, "cd"); + runner.setProperty(ExecuteProcess.COMMAND_ARGUMENTS, "does-not-exist"); + + ProcessContext processContext = runner.getProcessContext(); + + ExecuteProcess processor = (ExecuteProcess) runner.getProcessor(); + processor.updateScheduledTrue(); + processor.setupExecutor(processContext); + + processor.onTrigger(processContext, runner.getProcessSessionFactory()); + + final List<LogMessage> warnMessages = runner.getLogger().getWarnMessages(); + assertEquals("If redirect error stream is false, " + + "the output should be logged as a warning so that user can notice on bulletin.", 1, warnMessages.size()); + final List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(ExecuteProcess.REL_SUCCESS); + assertEquals(0, succeeded.size()); + } + + + @Test + public void testRedirectErrorStream() { + final TestRunner runner = TestRunners.newTestRunner(ExecuteProcess.class); + runner.setProperty(ExecuteProcess.COMMAND, "cd"); + runner.setProperty(ExecuteProcess.COMMAND_ARGUMENTS, "does-not-exist"); + runner.setProperty(ExecuteProcess.REDIRECT_ERROR_STREAM, "true"); + + ProcessContext processContext = runner.getProcessContext(); + + ExecuteProcess processor = (ExecuteProcess) runner.getProcessor(); + processor.updateScheduledTrue(); + processor.setupExecutor(processContext); + + processor.onTrigger(processContext, runner.getProcessSessionFactory()); + + final List<LogMessage> warnMessages = runner.getLogger().getWarnMessages(); + assertEquals("If redirect error stream is true " + + "the output should be sent as a content of flow-file.", 0, warnMessages.size()); + final List<MockFlowFile> succeeded = runner.getFlowFilesForRelationship(ExecuteProcess.REL_SUCCESS); + assertEquals(1, succeeded.size()); + } + }