Running an external program from a test
The ExecTest class runs a program, defined in the execName variable, on the system where the test is running.
The Javadoc for the test execution services interfaces and classes can be accessed from the product by clicking
.package customcode;
import com.ibm.rational.test.lt.kernel.services.ITestExecutionServices;
import com.ibm.rational.test.lt.kernel.services.ITestLogManager;
import org.eclipse.hyades.test.common.event.VerdictEvent;
import java.io.IOException;
/**
* The ExecTest class runs a program, defined in the execName variable,
* on the system where the test is running.
* The test verdict is set to PASS if the program return code is 0.
* The test verdict is set to FAIL if the program doesn't execute or
* if the program return code is non-zero
* In this sample, the program is perl.exe.
*/
/**
* @author IBM Custom Code Samples
*/
public class ExecTest implements
com.ibm.rational.test.lt.kernel.custom.ICustomCode2 {
/**
* Instances of this will be created using the no-arg constructor.
*/
public ExecTest() {
}
public String exec(ITestExecutionServices tes, String[] args) {
ITestLogManager logger = tes.getTestLogManager();
int rtnval = 1;
Process p = null;
String execName = "C:/Windows/System32/perl.exe C:/Perl/true.pl";
Runtime rt = Runtime.getRuntime();
// Execute test
try {
p = rt.exec(execName);
} catch (IOException e) {
logger.reportMessage("Unable to run = " + execName);
logger.reportVerdict("Execution of " + execName + " failed",
VerdictEvent.VERDICT_FAIL);
return null;
}
// Wait for the test to complete
try {
rtnval = p.waitFor();
logger.reportMessage("Process return value is " +
String.valueOf(rtnval));
} catch (InterruptedException e1) {
logger.reportMessage("Unable to wait for " + execName);
logger.reportVerdict("WaitFor on " + execName + " failed",
VerdictEvent.VERDICT_FAIL);
return null;
}
// Check the test return code and set the test verdict appropriately
if (rtnval != 0)
{
logger.reportVerdict("Execution failed", VerdictEvent.VERDICT_FAIL);
} else {
logger.reportVerdict("Execution passed", VerdictEvent.VERDICT_PASS);
}
return null;
}
}