package hudson.plugins.collabnet.filerelease; import com.collabnet.ce.webservices.CTFPackage; import com.collabnet.ce.webservices.CTFProject; import com.collabnet.ce.webservices.CTFRelease; import com.collabnet.ce.webservices.CTFReleaseFile; import hudson.Launcher; import hudson.model.AbstractBuild; import hudson.model.BuildListener; import hudson.model.FreeStyleProject; import hudson.plugins.collabnet.CNHudsonTestCase; import hudson.plugins.collabnet.ConnectionFactory; import hudson.plugins.collabnet.TestParam; import hudson.plugins.collabnet.documentuploader.FilePattern; import org.jvnet.hudson.test.TestBuilder; import java.io.IOException; import java.rmi.RemoteException; /** * Test document upload facility. */ public class CNFileReleaseTest extends CNHudsonTestCase { @TestParam private String fr_package = "aPackage"; @TestParam private String fr_release = "aRelease"; @TestParam private String FILE = "test.txt"; @TestParam private String FILE_CONTENT = "Test file from FileRelease"; public void testConfigRoundtrip() throws Exception { setGlobalConnectionFactory(); roundtripAndAssertIntegrity(new CNFileRelease( createConnectionFactory(), "aaa", "bbb", "ccc", true, new FilePattern[]{new FilePattern("ddd")}),FIELDS); // note that because filePatterns is minimum 1, new FilePattern[0] test would fail roundtripAndAssertIntegrity(new CNFileRelease( null, "xxx", "yyy", "zzz", false, new FilePattern[]{new FilePattern("111"),new FilePattern("222")}),FIELDS); } /** * Makes sure that help link exists on all three options. */ public void testHelpLink() throws Exception { assertHelpExists(CNFileRelease.class,FIELDS+",-connectionFactory"); } /** * Test FileRelease upload by building and uploading a test file. */ public void testUpload() throws Exception { if(!verifyOnline()) return; // skip if offline // make sure package and release exists CTFProject fr = connect().getProjectByTitle(teamforge_project); CTFPackage pkg = fr.getPackages().byTitle(fr_package); if (pkg==null) pkg = fr.createPackage(fr_package,"test for Hudson",true); CTFRelease r = pkg.getReleaseByTitle(fr_release); if (r==null) r = pkg.createRelease(fr_release,"test for Hudson","active","Prototype"); FreeStyleProject job = this.createFreeStyleProject(); job.getPublishersList().add(new CNFileRelease( new ConnectionFactory(teamforge_url, admin_user, password), teamforge_project, fr_package, fr_release, true, new FilePattern[]{new FilePattern(FILE)} )); job.getBuildersList().add(new TestBuilder() { @Override public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { build.getWorkspace().child(FILE).write(FILE_CONTENT,"UTF-8"); return true; } }); buildAndAssertSuccess(job); this.verifyFRUpload(r); } /** * Verify that an upload of the test file was successful. */ public void verifyFRUpload(CTFRelease r) throws RemoteException { CTFReleaseFile f = r.getFileByTitle(FILE); assertTrue(f.getId()!=null); } private static final String FIELDS = "connectionFactory,project,pkg,release,filePatterns,overwrite"; }