Run an external program from a test

 

+

Search Tips   |   Advanced Search

 

The ExecTest class runs a program, defined in the execName variable, on the system where the test is running.

package test;

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.
 */

public class ExecTest implements
        com.ibm.rational.test.lt.kernel.custom.ICustomCode2 
{

    /**
     * Create 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;
    }
}