package org.jvnet.hudson.test;
import hudson.Launcher.ProcStarter;
import hudson.Proc;
import java.io.IOException;
/**
* Fake a process launch.
*
* @author Kohsuke Kawaguchi
* @see PretendSlave
* @see MockFakeLauncher
*/
public interface FakeLauncher {
/**
* Called whenever a {@link PretendSlave} is asked to fork a new process.
*
* <p>
* The callee can inspect the {@link ProcStarter} object to determine what process is being launched,
* and if necessary, fake a process launch by either returning a valid {@link Proc} object, or let
* the normal process launch happen by returning null.
*/
Proc onLaunch(ProcStarter p) throws IOException;
/**
* Fake {@link Proc} implementation that represents a completed process.
*/
public class FinishedProc extends Proc {
public final int exitCode;
public FinishedProc(int exitCode) {
this.exitCode = exitCode;
}
@Override
public boolean isAlive() throws IOException, InterruptedException {
return false;
}
@Override
public void kill() throws IOException, InterruptedException {
throw new UnsupportedOperationException();
}
@Override
public int join() throws IOException, InterruptedException {
return exitCode;
}
}
}