package hudson.tasks; import hudson.Functions; import hudson.Launcher.ProcStarter; import hudson.Proc; import hudson.model.FreeStyleBuild; import hudson.model.FreeStyleProject; import org.apache.commons.io.FileUtils; import org.jvnet.hudson.test.FakeLauncher; import org.jvnet.hudson.test.HudsonTestCase; import org.jvnet.hudson.test.PretendSlave; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.util.List; /** * @author Kohsuke Kawaguchi */ public class ShellTest extends HudsonTestCase { public void testBasic() throws Exception { // If we're on Windows, don't bother doing this. if (Functions.isWindows()) return; // TODO: define a FakeLauncher implementation with easymock so that this kind of assertions can be simplified. PretendSlave s = createPretendSlave(new FakeLauncher() { public Proc onLaunch(ProcStarter p) throws IOException { // test the command line argument. List<String> cmds = p.cmds(); assertEquals("/bin/sh",cmds.get(0)); assertEquals("-xe",cmds.get(1)); assertTrue(new File(cmds.get(2)).exists()); // fake the execution PrintStream ps = new PrintStream(p.stdout()); ps.println("Hudson was here"); ps.close(); return new FinishedProc(0); } }); FreeStyleProject p = createFreeStyleProject(); p.getBuildersList().add(new Shell("echo abc")); p.setAssignedNode(s); FreeStyleBuild b = assertBuildStatusSuccess(p.scheduleBuild2(0).get()); assertEquals(1,s.numLaunch); assertTrue(FileUtils.readFileToString(b.getLogFile()).contains("Hudson was here")); } }