Skip to content

Commit

Permalink
Merge pull request #8 from ydubreuil/jenkins-29615
Browse files Browse the repository at this point in the history
[JENKINS-22849] Improve HTTP response to include item queue location
  • Loading branch information
jglick committed Aug 11, 2015
2 parents f1239a3 + ec1a216 commit e7257ce
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
Expand Up @@ -32,6 +32,7 @@
import hudson.model.ParameterValue;
import hudson.model.ParametersAction;
import hudson.model.ParametersDefinitionProperty;
import hudson.model.Queue;
import hudson.model.UnprotectedRootAction;
import hudson.security.ACL;
import hudson.triggers.SCMTrigger;
Expand All @@ -55,6 +56,8 @@
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import static javax.servlet.http.HttpServletResponse.SC_CREATED;

@Extension
public class BuildRootAction implements UnprotectedRootAction {

Expand Down Expand Up @@ -83,8 +86,12 @@ public void doBuild(StaplerRequest req, StaplerResponse rsp, @QueryParameter Str
LOGGER.fine("wrong kind");
throw HttpResponses.error(HttpServletResponse.SC_BAD_REQUEST, "Use /buildByToken/buildWithParameters for this job since it takes parameters");
}
Jenkins.getInstance().getQueue().schedule(p, delay.getTime(), getBuildCause(req));
ok(rsp);
Queue.Item item = Jenkins.getInstance().getQueue().schedule(p, delay.getTime(), getBuildCause(req));
if (item != null) {
rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl());
} else {
rsp.sendRedirect(".");
}
}

public void doBuildWithParameters(StaplerRequest req, StaplerResponse rsp, @QueryParameter String job, @QueryParameter TimeDuration delay) throws IOException, ServletException {
Expand All @@ -105,8 +112,12 @@ public void doBuildWithParameters(StaplerRequest req, StaplerResponse rsp, @Quer
values.add(value);
}
}
Jenkins.getInstance().getQueue().schedule(p, delay.getTime(), new ParametersAction(values), getBuildCause(req));
ok(rsp);
Queue.Item item = Jenkins.getInstance().getQueue().schedule(p, delay.getTime(), new ParametersAction(values), getBuildCause(req));
if (item != null) {
rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl());
} else {
rsp.sendRedirect(".");
}
}

public void doPolling(StaplerRequest req, StaplerResponse rsp, @QueryParameter String job) throws IOException, ServletException {
Expand Down
Expand Up @@ -24,7 +24,9 @@

package org.jenkinsci.plugins.build_token_root;

import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.google.inject.matcher.Matchers;
import hudson.model.Job;
import hudson.model.Run;
import java.net.HttpURLConnection;
Expand All @@ -33,6 +35,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.model.ParameterizedJobMixIn;
import org.apache.commons.httpclient.HttpStatus;
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import static org.junit.Assert.*;
Expand Down Expand Up @@ -76,12 +79,16 @@ private <JobT extends Job<JobT, RunT> & ParameterizedJobMixIn.ParameterizedJob,
wc.assertFails(p.getUrl() + "build?token=secret", HttpURLConnection.HTTP_FORBIDDEN);
j.waitUntilNoActivity();
assertEquals(0, p.getBuilds().size());
wc.goTo("buildByToken/build?job=" + p.getFullName() + "&token=secret&delay=0sec");
Page page = wc.goTo("buildByToken/build?job=" + p.getFullName() + "&token=secret&delay=0sec", null);
j.waitUntilNoActivity();
assertEquals(1, p.getBuilds().size());
wc.goTo("buildByToken/build?job=" + p.getFullName() + "&token=secret&delay=0sec");
assertEquals(HttpStatus.SC_CREATED, page.getWebResponse().getStatusCode());
assertTrue(page.getWebResponse().getResponseHeaderValue("Location").contains("/queue/item/"));
page = wc.goTo("buildByToken/build?job=" + p.getFullName() + "&token=secret&delay=0sec", null);
j.waitUntilNoActivity();
assertEquals(2, p.getBuilds().size());
assertEquals(HttpStatus.SC_CREATED, page.getWebResponse().getStatusCode());
assertTrue(page.getWebResponse().getResponseHeaderValue("Location").contains("/queue/item/"));
wc.assertFails("buildByToken/build?job=" + p.getFullName() + "&token=socket&delay=0sec", HttpURLConnection.HTTP_FORBIDDEN);
j.waitUntilNoActivity();
assertEquals(2, p.getBuilds().size());
Expand Down

0 comments on commit e7257ce

Please sign in to comment.