You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by se...@apache.org on 2013/09/03 02:30:39 UTC
svn commit: r1519534 - in /jmeter/trunk:
src/jorphan/org/apache/jorphan/exec/SystemCommand.java xdocs/changes.xml
Author: sebb
Date: Tue Sep 3 00:30:39 2013
New Revision: 1519534
URL: http://svn.apache.org/r1519534
Log:
SystemCommand should support chaining of commands
Bugzilla Id: 55515
Modified:
jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java?rev=1519534&r1=1519533&r2=1519534&view=diff
==============================================================================
--- jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java (original)
+++ jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java Tue Sep 3 00:30:39 2013
@@ -18,6 +18,7 @@
package org.apache.jorphan.exec;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -121,6 +122,11 @@ public class SystemCommand {
* @throws IOException
*/
public int run(List<String> arguments) throws InterruptedException, IOException {
+ return run(arguments, stdin, stdout, stderr);
+ }
+
+ // helper method to allow input and output to be changed for chaining
+ private int run(List<String> arguments, InputStream in, OutputStream out, OutputStream err) throws InterruptedException, IOException {
Process proc = null;
final ProcessBuilder procBuild = new ProcessBuilder(arguments);
if (env != null) {
@@ -128,7 +134,7 @@ public class SystemCommand {
}
this.executionEnvironment = Collections.unmodifiableMap(procBuild.environment());
procBuild.directory(directory);
- if (stderr == null) {
+ if (err == null) {
procBuild.redirectErrorStream(true);
}
try
@@ -140,19 +146,19 @@ public class SystemCommand {
final InputStream procIn = proc.getInputStream();
final StreamCopier swerr;
- if (stderr != null){
- swerr = new StreamCopier(procErr, stderr);
+ if (err != null){
+ swerr = new StreamCopier(procErr, err);
swerr.start();
} else {
swerr = null;
}
- final StreamCopier swout = new StreamCopier(procIn, stdout);
+ final StreamCopier swout = new StreamCopier(procIn, out);
swout.start();
final StreamCopier swin;
- if (stdin != null) {
- swin = new StreamCopier(stdin, procOut);
+ if (in != null) {
+ swin = new StreamCopier(in, procOut);
swin.start();
} else {
swin = null;
@@ -182,6 +188,24 @@ public class SystemCommand {
}
/**
+ * Pipe the output of one command into another
+ *
+ * @param arguments1 first command to run
+ * @param arguments2 second command to run
+ * @return exit status
+ * @throws InterruptedException
+ * @throws IOException
+ */
+ public int run(List<String> arguments1, List<String> arguments2) throws InterruptedException, IOException {
+ ByteArrayOutputStream out = new ByteArrayOutputStream(); // capture the intermediate output
+ int exitCode=run(arguments1,stdin,out, stderr);
+ if (exitCode == 0) {
+ exitCode = run(arguments2,new ByteArrayInputStream(out.toByteArray()),stdout,stderr);
+ }
+ return exitCode;
+ }
+
+ /**
* Wait for end of proc execution or timeout if timeoutInMillis is greater than 0
* @param proc Process
* @param timeoutInMillis long timeout in ms
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1519534&r1=1519533&r2=1519534&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml (original)
+++ jmeter/trunk/xdocs/changes.xml Tue Sep 3 00:30:39 2013
@@ -419,6 +419,7 @@ Previously the default was 1, which coul
<li><bugzilla>55451</bugzilla> - Test Element GUI with JSyntaxTextArea scroll down when text content is long enough to add a Scrollbar</li>
<li><bugzilla>55513</bugzilla> - StreamCopier cannot be used with System.err or System.out as it closes the output stream</li>
<li><bugzilla>55514</bugzilla> - SystemCommand should support arbitrary input and output streams</li>
+<li><bugzilla>55515</bugzilla> - SystemCommand should support chaining of commands</li>
</ul>
<h2>Non-functional changes</h2>