CommandLine injector added.
This commit is contained in:
parent
c999aba8af
commit
57a22f98b6
|
@ -6,8 +6,6 @@ public @interface Function {
|
|||
|
||||
Class<?> plugin();
|
||||
|
||||
int number();
|
||||
|
||||
Parameter[] parameters();
|
||||
|
||||
String help();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package org.bench4q.agent.plugin.annotation;
|
||||
|
||||
public @interface Plugin {
|
||||
String id();
|
||||
String uuid();
|
||||
|
||||
String name();
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package org.bench4q.agent.plugin.commandline;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.bench4q.agent.plugin.AbstractPlugin;
|
||||
import org.bench4q.agent.plugin.annotation.Plugin;
|
||||
|
||||
@Plugin(help = "This plug-in supports execution of command lines", uuid = "13b46059-559d-c483-93c1-bd008d92fab8", name = "Command Line Injector", parameters = {})
|
||||
public class CommandLinePlugin extends AbstractPlugin {
|
||||
|
||||
@Override
|
||||
public void init(Map<String, String> parameters) {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
package org.bench4q.agent.plugin.commandline;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bench4q.agent.plugin.AbstractSampleFunction;
|
||||
import org.bench4q.agent.plugin.FunctionResult;
|
||||
import org.bench4q.agent.plugin.annotation.Function;
|
||||
import org.bench4q.agent.plugin.annotation.Parameter;
|
||||
|
||||
@Function(help = "Executes the provided command line.", name = "Execute", parameters = {
|
||||
@Parameter(name = "command", type = "String"),
|
||||
@Parameter(name = "comment", type = "String"),
|
||||
@Parameter(name = "iteration", type = "String") }, plugin = CommandLinePlugin.class)
|
||||
public class ExecuteFunction extends AbstractSampleFunction {
|
||||
private String stderr;
|
||||
private String stdout;
|
||||
|
||||
@Override
|
||||
public FunctionResult execute(Map<String, String> parameters) {
|
||||
try {
|
||||
List<String> commandLine = new ArrayList<String>();
|
||||
final String commandLineStr = parameters.get("command");
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
|
||||
commandLine.add("/bin/sh");
|
||||
commandLine.add("-c");
|
||||
commandLine.add(commandLineStr);
|
||||
} else if (System.getProperty("os.name").toLowerCase()
|
||||
.startsWith("windows")) {
|
||||
commandLine.add("cmd.exe");
|
||||
commandLine.add("/c");
|
||||
commandLine.add("\"" + commandLineStr + "\"");
|
||||
} else {
|
||||
}
|
||||
// report.setDate(System.currentTimeMillis());
|
||||
final Process process = runtime.exec(commandLine
|
||||
.toArray(new String[commandLine.size()]));
|
||||
|
||||
// standard output reading
|
||||
new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(
|
||||
new InputStreamReader(process.getInputStream()));
|
||||
String streamline = "";
|
||||
try {
|
||||
stdout = "";
|
||||
while ((streamline = reader.readLine()) != null)
|
||||
stdout += streamline
|
||||
+ System.getProperty("line.separator");
|
||||
} finally {
|
||||
reader.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
// standard error output reading
|
||||
new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(
|
||||
new InputStreamReader(process.getErrorStream()));
|
||||
String streamline = "";
|
||||
try {
|
||||
stderr = "";
|
||||
while ((streamline = reader.readLine()) != null)
|
||||
stderr += streamline
|
||||
+ System.getProperty("line.separator");
|
||||
} finally {
|
||||
reader.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}.start();
|
||||
// wait until the end of command execution
|
||||
process.waitFor();
|
||||
// get return code of command execution
|
||||
int result = process.exitValue();
|
||||
// retcode = String.valueOf(result);
|
||||
// fill sample report
|
||||
// report.duration = (int) (System.currentTimeMillis() -
|
||||
// report.getDate());
|
||||
// report.type = "COMMAND LINE";
|
||||
// report.comment = (String)params.get(SAMPLE_EXECUTE_COMMENT);
|
||||
// report.iteration =
|
||||
// Long.parseLong((String)params.get(SAMPLE_EXECUTE_ITERATION));
|
||||
// report.result = retcode;
|
||||
// report.successful = (result == 0);
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue