diff --git a/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java b/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java index 472ecdeb..ec94c226 100644 --- a/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java +++ b/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java @@ -28,6 +28,7 @@ import org.kohsuke.stapler.StaplerRequest; import java.io.BufferedReader; +import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; @@ -803,7 +804,13 @@ public JSONObject sendHTTPCall(String urlString, String requestType, AbstractBui connection.setConnectTimeout(5000); connection.connect(); - InputStream is = connection.getInputStream(); + InputStream is; + try { + is = connection.getInputStream(); + } catch (FileNotFoundException e) { + // In case of a e.g. 404 status + is = connection.getErrorStream(); + } BufferedReader rd = new BufferedReader(new InputStreamReader(is)); String line; @@ -1048,7 +1055,7 @@ public static final class DescriptorImpl extends BuildStepDescriptor { * *

* If you don't want fields to be persisted, use transient. - */ +v */ private CopyOnWriteList remoteSites = new CopyOnWriteList(); /** @@ -1107,5 +1114,9 @@ public RemoteJenkinsServer[] getRemoteSites() { return remoteSites.toArray(new RemoteJenkinsServer[this.remoteSites.size()]); } + + public void setRemoteSites(RemoteJenkinsServer... remoteSites) { + this.remoteSites.replaceBy(remoteSites); + } } } diff --git a/src/test/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfigurationTest.java b/src/test/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfigurationTest.java new file mode 100644 index 00000000..19f663dc --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfigurationTest.java @@ -0,0 +1,39 @@ +package org.jenkinsci.plugins.ParameterizedRemoteTrigger; + +import hudson.model.FreeStyleProject; +import net.sf.json.JSONObject; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.JenkinsRule; + +public class RemoteBuildConfigurationTest { + @Rule + public JenkinsRule jenkinsRule = new JenkinsRule(); + + @Test + public void testRemoteBuild() throws Exception { + jenkinsRule.jenkins.setCrumbIssuer(null); + + JSONObject authenticationMode = new JSONObject(); + authenticationMode.put("value", "none"); + JSONObject auth = new JSONObject(); + auth.put("authenticationMode", authenticationMode); + + String remoteUrl = jenkinsRule.getURL().toString(); + RemoteJenkinsServer remoteJenkinsServer = + new RemoteJenkinsServer(remoteUrl, "JENKINS", false, auth); + RemoteBuildConfiguration.DescriptorImpl descriptor = + jenkinsRule.jenkins.getDescriptorByType(RemoteBuildConfiguration.DescriptorImpl.class); + descriptor.setRemoteSites(remoteJenkinsServer); + + FreeStyleProject remoteProject = jenkinsRule.createFreeStyleProject(); + + FreeStyleProject project = jenkinsRule.createFreeStyleProject(); + RemoteBuildConfiguration remoteBuildConfiguration = new RemoteBuildConfiguration( + remoteJenkinsServer.getDisplayName(), false, remoteProject.getFullName(), "", + "", null, null, false, true, 1); + project.getBuildersList().add(remoteBuildConfiguration); + + jenkinsRule.buildAndAssertSuccess(project); + } +}