/* * The MIT License * * Copyright (c) 2012, Cisco Systems, Inc., Max Spring * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.cisco.step.jenkins.plugins.jenkow.git; import hudson.model.FreeStyleBuild; import hudson.model.Result; import hudson.model.Descriptor; import hudson.model.FreeStyleProject; import hudson.tasks.Builder; import hudson.tasks.Shell; import hudson.util.DescribableList; import java.io.File; import javax.inject.Inject; import org.apache.commons.io.FileUtils; import org.jenkinsci.main.modules.sshd.SSHD; import com.cisco.step.jenkins.plugins.jenkow.JenkowTestCase; import com.cisco.step.jenkins.plugins.jenkow.JenkowWorkflowRepository; public class GitTest extends JenkowTestCase{ @Inject SSHD sshd; String git = System.getProperty("jenkow.test.git","git"); @Override protected void setUp() throws Exception { super.setUp(); jenkins.getInjector().injectMembers(this); } // Several git-related test cases in one Jenkins instance public void testGit() throws Exception{ // Just to see whether there's a git we can run. // It'll barf if we don't. runTest("version",git+" --version"); String tag = "<added by unit test/>"; runTest("clone-modify-commit-push" , git+" clone ssh://localhost:"+sshd.getActualPort()+"/jenkow-repository.git\n" + "cd jenkow-repository\n" + "echo \""+tag+"\" >>readme\n" + git+" commit -am \"changed readme\"\n" + git+" push\n" ); String readme = FileUtils.readFileToString(new File(JenkowWorkflowRepository.getRepositoryDir(),"readme")); assertTrue(readme.contains(tag)); } private void runTest(String id, String cmd) throws Exception{ // The GIT_SSH is needed so we can do the StrictHostKeyChecking=no, // otherwise ssh would prompt for the "new" host key. String script = "export GIT_SSH=$WORKSPACE/run-ssh.sh\n" + "\n" + "cat >$GIT_SSH <<EOF\n" + "#!/bin/sh\n" + "exec ssh -oStrictHostKeyChecking=no \"\\$@\"\n" + "EOF\n" + "chmod +x $GIT_SSH\n" + "\n" + cmd+"\n"; FreeStyleProject launcher = createFreeStyleProject(id); DescribableList<Builder,Descriptor<Builder>> bl = launcher.getBuildersList(); bl.add(new Shell(script)); FreeStyleBuild build = launcher.scheduleBuild2(0).get(); System.out.println(build.getDisplayName()+" completed"); String s = FileUtils.readFileToString(build.getLogFile()); System.out.println("<output>\n"+s+"</output>"); assertTrue(build.getResult() == Result.SUCCESS); } }