diff --git a/pom.xml b/pom.xml index f63f80f5c547448c0b4da27be556a8e9aa757d17..a03e91f6f9000a64b0444bc07d4f2f1672e67938 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ THE SOFTWARE. commons-io commons-io - 2.4 + 2.6 diff --git a/test-pom/pom.xml b/test-pom/pom.xml index dbbda4bf2acb7d06b8d1c1283f8c768fdae03e7f..375f3ee1e44472ca2b627640eaffa9e68d5fba9a 100644 --- a/test-pom/pom.xml +++ b/test-pom/pom.xml @@ -54,7 +54,7 @@ THE SOFTWARE. ${project.groupId} jenkins-test-harness - 2.41.1 + 2.42 test diff --git a/test/src/test/java/hudson/AboutJenkinsTest.java b/test/src/test/java/hudson/AboutJenkinsTest.java index e279400e618937de6eebd12887709e669ebfd9e4..356bf3c8d1dc9157c07650ed6abda53cf7209485 100644 --- a/test/src/test/java/hudson/AboutJenkinsTest.java +++ b/test/src/test/java/hudson/AboutJenkinsTest.java @@ -33,6 +33,8 @@ import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.MockAuthorizationStrategy; import org.jvnet.hudson.test.SmokeTest; +import java.net.HttpURLConnection; + import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; @@ -55,19 +57,19 @@ public class AboutJenkinsTest { .grant(Jenkins.READ).everywhere().to(USER) ); - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); { // user cannot see it wc.login(USER); HtmlPage page = wc.goTo("about/"); - assertEquals(403, page.getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, page.getWebResponse().getStatusCode()); } { // admin can access it wc.login(ADMIN); HtmlPage page = wc.goTo("about/"); - assertEquals(200, page.getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); assertThat(page.getWebResponse().getContentAsString(), containsString("Mavenized dependencies")); } } diff --git a/test/src/test/java/hudson/TcpSlaveAgentListenerTest.java b/test/src/test/java/hudson/TcpSlaveAgentListenerTest.java index fe29570086dc0e34fa65ec1c4fe1a08453aaae4d..484e938a67555f8eb007bbbcc13bceaef17a9cce 100644 --- a/test/src/test/java/hudson/TcpSlaveAgentListenerTest.java +++ b/test/src/test/java/hudson/TcpSlaveAgentListenerTest.java @@ -1,34 +1,20 @@ package hudson; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.TextPage; -import com.gargoylesoftware.htmlunit.html.HtmlPage; -import hudson.remoting.Base64; -import java.io.IOException; -import java.security.KeyFactory; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.NoSuchAlgorithmException; -import java.security.cert.X509Certificate; -import java.security.interfaces.RSAPrivateKey; -import java.security.interfaces.RSAPublicKey; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.PKCS8EncodedKeySpec; -import javax.annotation.Nullable; +import java.net.HttpURLConnection; +import java.net.URL; import jenkins.model.Jenkins; -import jenkins.model.identity.InstanceIdentityProvider; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.JenkinsRule.WebClient; -import org.jvnet.hudson.test.TestExtension; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; -import static org.junit.Assert.fail; public class TcpSlaveAgentListenerTest { @@ -37,15 +23,15 @@ public class TcpSlaveAgentListenerTest { @Test public void headers() throws Exception { + WebClient wc = r.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + r.getInstance().setSlaveAgentPort(-1); - try { - r.createWebClient().goTo("tcpSlaveAgentListener"); - fail("Should get 404"); - } catch (FailingHttpStatusCodeException e) { - assertThat(e.getStatusCode(), is(404)); - } + wc.assertFails("tcpSlaveAgentListener", HttpURLConnection.HTTP_NOT_FOUND); + r.getInstance().setSlaveAgentPort(0); - Page p = r.createWebClient().goTo("tcpSlaveAgentListener", "text/plain"); + Page p = wc.goTo("tcpSlaveAgentListener", "text/plain"); + assertEquals(HttpURLConnection.HTTP_OK, p.getWebResponse().getStatusCode()); assertThat(p.getWebResponse().getResponseHeaderValue("X-Instance-Identity"), notNullValue()); } @@ -54,15 +40,13 @@ public class TcpSlaveAgentListenerTest { r.getInstance().setSlaveAgentPort(0); int p = r.jenkins.getTcpSlaveAgentListener().getPort(); WebClient wc = r.createWebClient(); - TextPage text = (TextPage) wc.getPage("http://localhost:"+p+"/"); + + TextPage text = wc.getPage(new URL("http://localhost:" + p + "/")); String c = text.getContent(); - assertThat(c,containsString(Jenkins.VERSION)); + assertThat(c, containsString(Jenkins.VERSION)); - try { - wc.getPage("http://localhost:"+p+"/xxx"); - fail("Expected 404"); - } catch (FailingHttpStatusCodeException e) { - assertThat(e.getStatusCode(),equalTo(404)); - } + wc.setThrowExceptionOnFailingStatusCode(false); + Page page = wc.getPage(new URL("http://localhost:" + p + "/xxx")); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, page.getWebResponse().getStatusCode()); } } diff --git a/test/src/test/java/hudson/cli/CLITest.java b/test/src/test/java/hudson/cli/CLITest.java index 20590f00f12a703b4ae7c47621ba3cdf96ed69d8..194277ef8b88afd59e8441c8e5e52f7143f006a1 100644 --- a/test/src/test/java/hudson/cli/CLITest.java +++ b/test/src/test/java/hudson/cli/CLITest.java @@ -37,6 +37,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.net.HttpURLConnection; import java.nio.file.Files; import java.util.Arrays; import java.util.List; @@ -234,11 +235,12 @@ public class CLITest { sshd.start(); // Sanity check - JenkinsRule.WebClient wc = r.createWebClient(); - wc.getOptions().setRedirectEnabled(false); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = r.createWebClient() + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); + WebResponse rsp = wc.goTo("cli-proxy/").getWebResponse(); - assertEquals(rsp.getContentAsString(), 302, rsp.getStatusCode()); + assertEquals(rsp.getContentAsString(), HttpURLConnection.HTTP_MOVED_TEMP, rsp.getStatusCode()); assertEquals(rsp.getContentAsString(), null, rsp.getResponseHeaderValue("X-Jenkins")); assertEquals(rsp.getContentAsString(), null, rsp.getResponseHeaderValue("X-Jenkins-CLI-Port")); assertEquals(rsp.getContentAsString(), null, rsp.getResponseHeaderValue("X-SSH-Endpoint")); @@ -308,7 +310,7 @@ public class CLITest { public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object node) throws IOException, ServletException { rsp.setHeader("Location", url); rsp.setContentType("text/html"); - rsp.setStatus(302); + rsp.setStatus(HttpURLConnection.HTTP_MOVED_TEMP); PrintWriter w = rsp.getWriter(); w.append("Redirect to ").append(url); } diff --git a/test/src/test/java/hudson/diagnosis/HudsonHomeDiskUsageMonitorTest.java b/test/src/test/java/hudson/diagnosis/HudsonHomeDiskUsageMonitorTest.java index 395653a0cb215a83ac67717336e52f7df2f45d1b..975b6ea1bcaeb7332c273a9f2c8f9e0fc0aed093 100644 --- a/test/src/test/java/hudson/diagnosis/HudsonHomeDiskUsageMonitorTest.java +++ b/test/src/test/java/hudson/diagnosis/HudsonHomeDiskUsageMonitorTest.java @@ -5,14 +5,13 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.util.NameValuePair; import hudson.model.User; import hudson.security.GlobalMatrixAuthorizationStrategy; import jenkins.model.Jenkins; -import jenkins.security.apitoken.ApiTokenPropertyConfiguration; import jenkins.security.apitoken.ApiTokenTestHelper; import org.junit.Rule; import org.junit.Test; @@ -24,6 +23,7 @@ import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URL; import java.util.Collections; @@ -63,7 +63,8 @@ public class HudsonHomeDiskUsageMonitorTest { public void noAccessForNonAdmin() throws Exception { ApiTokenTestHelper.enableLegacyBehavior(); - JenkinsRule.WebClient wc = j.createWebClient(); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); // TODO: Use MockAuthorizationStrategy in later versions JenkinsRule.DummySecurityRealm realm = j.createDummySecurityRealm(); @@ -85,26 +86,19 @@ public class HudsonHomeDiskUsageMonitorTest { HudsonHomeDiskUsageMonitor mon = HudsonHomeDiskUsageMonitor.get(); wc.withBasicApiToken(bob); - try { - wc.getPage(request); - fail(); - } catch (FailingHttpStatusCodeException e) { - assertEquals(403, e.getStatusCode()); - } + Page p = wc.getPage(request); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, p.getWebResponse().getStatusCode()); + assertTrue(mon.isEnabled()); WebRequest requestReadOnly = new WebRequest(new URL(wc.getContextPath() + "administrativeMonitor/hudsonHomeIsFull"), HttpMethod.GET); - try { - wc.getPage(requestReadOnly); - fail(); - } catch (FailingHttpStatusCodeException e) { - assertEquals(403, e.getStatusCode()); - } + p = wc.getPage(requestReadOnly); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, p.getWebResponse().getStatusCode()); wc.withBasicApiToken(administrator); - wc.getPage(request); + p = wc.getPage(request); + assertEquals(HttpURLConnection.HTTP_OK, p.getWebResponse().getStatusCode()); assertFalse(mon.isEnabled()); - } /** diff --git a/test/src/test/java/hudson/jobs/CreateItemTest.java b/test/src/test/java/hudson/jobs/CreateItemTest.java index 941a6ba7114a2138e83641b6b48295a127ad61dc..acc0a080671c2af675af008b5c3dfd2ac20aeaa9 100644 --- a/test/src/test/java/hudson/jobs/CreateItemTest.java +++ b/test/src/test/java/hudson/jobs/CreateItemTest.java @@ -26,22 +26,22 @@ package hudson.jobs; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.*; -import hudson.AbortException; +import com.gargoylesoftware.htmlunit.Page; import hudson.model.Failure; import hudson.model.Item; import hudson.model.ItemGroup; import hudson.model.listeners.ItemListener; + +import java.net.HttpURLConnection; import java.net.URL; import java.text.MessageFormat; -import org.acegisecurity.AccessDeniedException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.WebRequest; import hudson.model.FreeStyleProject; @@ -54,7 +54,6 @@ import org.jvnet.hudson.test.TestExtension; * @author Christopher Simons */ public class CreateItemTest { - private static final int ERROR_PRESET = (-1); @Rule public JenkinsRule rule = new JenkinsRule(); @@ -78,15 +77,13 @@ public class CreateItemTest { WebRequest request = new WebRequest(apiURL, HttpMethod.POST); deleteContentTypeHeader(request); - int result = ERROR_PRESET; - try { - result = rule.createWebClient() - .getPage(request).getWebResponse().getStatusCode(); - } catch (FailingHttpStatusCodeException e) { - result = e.getResponse().getStatusCode(); - } - assertEquals("Creating job from copy should succeed.", 200, result); + Page p = rule.createWebClient() + .withThrowExceptionOnFailingStatusCode(false) + .getPage(request); + assertEquals("Creating job from copy should succeed.", + HttpURLConnection.HTTP_OK, + p.getWebResponse().getStatusCode()); } @Issue("JENKINS-34691") @@ -104,15 +101,14 @@ public class CreateItemTest { WebRequest request = new WebRequest(apiURL, HttpMethod.POST); deleteContentTypeHeader(request); - int result = ERROR_PRESET; - try { - result = rule.createWebClient() - .getPage(request).getWebResponse().getStatusCode(); - } catch (FailingHttpStatusCodeException e) { - result = e.getResponse().getStatusCode(); - } - assertEquals("Creating job from copy should fail.", 400, result); + Page p = rule.createWebClient() + .withThrowExceptionOnFailingStatusCode(false) + .getPage(request); + + assertEquals("Creating job from copy should fail.", + HttpURLConnection.HTTP_BAD_REQUEST, + p.getWebResponse().getStatusCode()); assertThat(rule.jenkins.getItem("newJob"), nullValue()); } @@ -125,9 +121,13 @@ public class CreateItemTest { rule.jenkins.setCrumbIssuer(null); rule.createFolder("d1").createProject(FreeStyleProject.class, "p"); MockFolder d2 = rule.createFolder("d2"); - rule.createWebClient().getPage(new WebRequest(new URL(d2.getAbsoluteUrl() + "createItem?mode=copy&name=p2&from=../d1/p"), HttpMethod.POST)); + + JenkinsRule.WebClient wc = rule.createWebClient(); + + wc.getPage(new WebRequest(new URL(d2.getAbsoluteUrl() + "createItem?mode=copy&name=p2&from=../d1/p"), HttpMethod.POST)); assertNotNull(d2.getItem("p2")); - rule.createWebClient().getPage(new WebRequest(new URL(d2.getAbsoluteUrl() + "createItem?mode=copy&name=p3&from=/d1/p"), HttpMethod.POST)); + + wc.getPage(new WebRequest(new URL(d2.getAbsoluteUrl() + "createItem?mode=copy&name=p3&from=/d1/p"), HttpMethod.POST)); assertNotNull(d2.getItem("p3")); } diff --git a/test/src/test/java/hudson/model/AbstractItemTest.java b/test/src/test/java/hudson/model/AbstractItemTest.java index 0c7171598b9fc58ba3358caa052f0517ffd24fb9..32551f240a4b272dd825f61be7ced64c9280ce1c 100644 --- a/test/src/test/java/hudson/model/AbstractItemTest.java +++ b/test/src/test/java/hudson/model/AbstractItemTest.java @@ -1,7 +1,7 @@ package hudson.model; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.util.NameValuePair; import hudson.security.ACL; @@ -9,6 +9,7 @@ import hudson.security.ACLContext; import hudson.security.AccessDeniedException2; import hudson.util.FormValidation; import java.io.File; +import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import jenkins.model.Jenkins; @@ -117,18 +118,17 @@ public class AbstractItemTest { WebRequest wr = new WebRequest(w.createCrumbedUrl(p.getUrl() + "confirmRename"), HttpMethod.POST); wr.setRequestParameters(Arrays.asList(new NameValuePair("newName", "bar"))); w.login("alice", "alice"); - assertThat(getPath(w.getPage(wr).getUrl()), equalTo(p.getUrl())); + Page page = w.getPage(wr); + assertThat(getPath(page.getUrl()), equalTo(p.getUrl())); assertThat(p.getName(), equalTo("bar")); wr = new WebRequest(w.createCrumbedUrl(p.getUrl() + "confirmRename"), HttpMethod.POST); wr.setRequestParameters(Arrays.asList(new NameValuePair("newName", "baz"))); w.login("bob", "bob"); - try { - assertThat(getPath(w.getPage(wr).getUrl()), equalTo(p.getUrl())); - fail("Expecting HTTP 403 Forbidden"); - } catch (FailingHttpStatusCodeException e) { - assertThat(e.getStatusCode(), equalTo(403)); - } + + w.setThrowExceptionOnFailingStatusCode(false); + page = w.getPage(wr); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, page.getWebResponse().getStatusCode()); assertThat(p.getName(), equalTo("bar")); } diff --git a/test/src/test/java/hudson/model/AbstractProjectTest.java b/test/src/test/java/hudson/model/AbstractProjectTest.java index 0cb25cc19482d0f682d8797a16150239c10c5e8e..071b5b9ec74e65e6ef503af7c3dcf5d107a1a176 100644 --- a/test/src/test/java/hudson/model/AbstractProjectTest.java +++ b/test/src/test/java/hudson/model/AbstractProjectTest.java @@ -24,8 +24,8 @@ package hudson.model; import com.gargoylesoftware.htmlunit.ElementNotFoundException; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.html.HtmlForm; @@ -120,16 +120,13 @@ public class AbstractProjectTest { FreeStyleBuild b = project.scheduleBuild2(0).get(); - assert b.getWorkspace().exists() : "Workspace should exist by now"; + assertTrue("Workspace should exist by now", b.getWorkspace().exists()); // make sure that the action link is protected - JenkinsRule.WebClient wc = j.createWebClient(); - try { - wc.getPage(new WebRequest(new URL(wc.getContextPath() + project.getUrl() + "doWipeOutWorkspace"), HttpMethod.POST)); - fail("Expected HTTP status code 403"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(HttpURLConnection.HTTP_FORBIDDEN, e.getStatusCode()); - } + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + Page page = wc.getPage(new WebRequest(new URL(wc.getContextPath() + project.getUrl() + "doWipeOutWorkspace"), HttpMethod.POST)); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, page.getWebResponse().getStatusCode()); } /** @@ -148,7 +145,7 @@ public class AbstractProjectTest { JenkinsRule.WebClient webClient = j.createWebClient(); HtmlPage page = webClient.getPage(j.jenkins.getItem("test0")); - page = (HtmlPage) page.getAnchorByText("Workspace").click(); + page = page.getAnchorByText("Workspace").click(); try { String wipeOutLabel = ResourceBundle.getBundle("hudson/model/AbstractProject/sidepanel").getString("Wipe Out Workspace"); page.getAnchorByText(wipeOutLabel); @@ -405,24 +402,21 @@ public class AbstractProjectTest { j.jenkins.setNumExecutors(0); FreeStyleProject p = j.createFreeStyleProject(); - JenkinsRule.WebClient wc = j.createWebClient(); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); - WebResponse rsp = wc.getPage(j.getURL() + p.getUrl() + "build").getWebResponse(); - assertEquals(201, rsp.getStatusCode()); + WebResponse rsp = wc.goTo(p.getUrl() + "build", null).getWebResponse(); + assertEquals(HttpURLConnection.HTTP_CREATED, rsp.getStatusCode()); assertNotNull(rsp.getResponseHeaderValue("Location")); - WebResponse rsp2 = wc.getPage(j.getURL() + p.getUrl() + "build").getWebResponse(); - assertEquals(201, rsp2.getStatusCode()); + WebResponse rsp2 = wc.goTo(p.getUrl() + "build", null).getWebResponse(); + assertEquals(HttpURLConnection.HTTP_CREATED, rsp2.getStatusCode()); assertEquals(rsp.getResponseHeaderValue("Location"), rsp2.getResponseHeaderValue("Location")); p.makeDisabled(true); - try { - wc.getPage(j.getURL() + p.getUrl() + "build"); - fail(); - } catch (FailingHttpStatusCodeException e) { - // request should fail - } + WebResponse rsp3 = wc.goTo(p.getUrl() + "build", null).getWebResponse(); + assertEquals(HttpURLConnection.HTTP_CONFLICT, rsp3.getStatusCode()); } /** diff --git a/test/src/test/java/hudson/model/ApiTest.java b/test/src/test/java/hudson/model/ApiTest.java index 754b5862f723a2e72a3a0d545519e6315d14e371..55533df3241e6a3d3ed179ba497f84c9293305f7 100644 --- a/test/src/test/java/hudson/model/ApiTest.java +++ b/test/src/test/java/hudson/model/ApiTest.java @@ -35,9 +35,10 @@ import org.jvnet.hudson.test.JenkinsRule; import java.io.File; import java.net.HttpURLConnection; +import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; /** * @author Kohsuke Kawaguchi @@ -83,17 +84,13 @@ public class ApiTest { @Issue("SECURITY-165") @Test public void xPathDocumentFunction() throws Exception { File f = new File(j.jenkins.getRootDir(), "queue.xml"); - JenkinsRule.WebClient client = j.createWebClient(); - - try { - client.goTo("api/xml?xpath=document(\"" + f.getAbsolutePath() + "\")", "application/xml"); - fail("Should become 500 error"); - } catch (com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException e) { - String contentAsString = e.getResponse().getContentAsString(); - j.assertStringContains( - contentAsString, - "Illegal function: document"); - } + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + + // could expect application/xml but as an error occurred it's a text/html that is returned + Page page = wc.goTo("api/xml?xpath=document(\"" + f.getAbsolutePath() + "\")", null); + assertEquals(HttpURLConnection.HTTP_INTERNAL_ERROR, page.getWebResponse().getStatusCode()); + assertThat(page.getWebResponse().getContentAsString(), containsString("Illegal function: document")); } @Test diff --git a/test/src/test/java/hudson/model/AsynchPeopleTest.java b/test/src/test/java/hudson/model/AsynchPeopleTest.java index c13017848e1ccb26f2b1203ea4723a0e416908b8..49ea6472c9e19879b6409280fd9355ea77344b47 100644 --- a/test/src/test/java/hudson/model/AsynchPeopleTest.java +++ b/test/src/test/java/hudson/model/AsynchPeopleTest.java @@ -24,7 +24,6 @@ package hudson.model; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.html.DomElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import static org.junit.Assert.*; @@ -41,16 +40,10 @@ public class AsynchPeopleTest { @Issue("JENKINS-18641") @Test public void display() throws Exception { - User.get("bob"); + User.getById( "bob", true); JenkinsRule.WebClient wc = j.createWebClient(); - HtmlPage page; - try { - page = wc.goTo("asynchPeople"); - } catch (FailingHttpStatusCodeException x) { - System.err.println(x.getResponse().getResponseHeaders()); - System.err.println(x.getResponse().getContentAsString()); - throw x; - } + + HtmlPage page = wc.goTo("asynchPeople"); assertEquals(0, wc.waitForBackgroundJavaScript(120000)); boolean found = false; for (DomElement table : page.getElementsByTagName("table")) { diff --git a/test/src/test/java/hudson/model/ComputerTest.java b/test/src/test/java/hudson/model/ComputerTest.java index 8502a8983271750597c0141333726c77ede143aa..d36000230de7ee437a09dcaff01f1c5a5720b614 100644 --- a/test/src/test/java/hudson/model/ComputerTest.java +++ b/test/src/test/java/hudson/model/ComputerTest.java @@ -25,15 +25,16 @@ package hudson.model; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; -import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.not; import static org.junit.Assert.*; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.xml.XmlPage; import java.io.File; +import java.net.HttpURLConnection; +import java.nio.charset.StandardCharsets; import jenkins.model.Jenkins; import hudson.slaves.DumbSlave; @@ -79,18 +80,15 @@ public class ComputerTest { Node nodeA = j.createSlave("nodeA", null, null); Node nodeB = j.createSlave("nodeB", null, null); - WebClient wc = j.createWebClient(); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlForm form = wc.getPage(nodeB, "configure").getFormByName("config"); form.getInputByName("_.name").setValueAttribute("nodeA"); - try { - j.submit(form); - fail(NOTE); - } catch (FailingHttpStatusCodeException e) { - assertThat(NOTE, e.getStatusCode(), equalTo(400)); - assertThat(NOTE, e.getResponse().getContentAsString(), - containsString("Agent called ‘nodeA’ already exists")); - } + Page page = j.submit(form); + assertEquals(NOTE, HttpURLConnection.HTTP_BAD_REQUEST, page.getWebResponse().getStatusCode()); + assertThat(NOTE, page.getWebResponse().getContentAsString(), + containsString("Agent called ‘nodeA’ already exists")); } @Test @@ -109,7 +107,7 @@ public class ComputerTest { private void verifyOfflineCause(Computer computer) throws Exception { XmlPage page = j.createWebClient().goToXml("computer/" + computer.getName() + "/config.xml"); - String content = page.getWebResponse().getContentAsString("UTF-8"); + String content = page.getWebResponse().getContentAsString(StandardCharsets.UTF_8); assertThat(content, containsString("temporaryOfflineCause")); assertThat(content, containsString("username")); assertThat(content, not(containsString("ApiTokenProperty"))); diff --git a/test/src/test/java/hudson/model/DirectlyModifiableViewTest.java b/test/src/test/java/hudson/model/DirectlyModifiableViewTest.java index ae8df8002c36620d660e6322c2a69d6c31ccee98..e27fc79e8f2e31914c550933ec38513fd2e25409 100644 --- a/test/src/test/java/hudson/model/DirectlyModifiableViewTest.java +++ b/test/src/test/java/hudson/model/DirectlyModifiableViewTest.java @@ -184,8 +184,8 @@ public class DirectlyModifiableViewTest { } private Page doPost(View view, String path) throws Exception { - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest req = new WebRequest( new URL(j.jenkins.getRootUrl() + view.getUrl() + path), HttpMethod.POST diff --git a/test/src/test/java/hudson/model/DirectoryBrowserSupportTest.java b/test/src/test/java/hudson/model/DirectoryBrowserSupportTest.java index a578e26aa3e652616169c90226f467470b5255cd..45cfaac28f84237d07d9f96d03a0c348b16c1ad6 100644 --- a/test/src/test/java/hudson/model/DirectoryBrowserSupportTest.java +++ b/test/src/test/java/hudson/model/DirectoryBrowserSupportTest.java @@ -23,7 +23,6 @@ */ package hudson.model; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -243,13 +242,8 @@ public class DirectoryBrowserSupportTest { p.getPublishersList().add(new ArtifactArchiver("f")); j.buildAndAssertSuccess(p); HtmlPage page = j.createWebClient().goTo("job/" + p.getName() + "/lastSuccessfulBuild/artifact/"); - try { - Page download = page.getAnchorByText("f").click(); - assertEquals("Hello world!", download.getWebResponse().getContentAsString()); - } catch (FailingHttpStatusCodeException x) { - IOUtils.copy(x.getResponse().getContentAsStream(), System.err); - throw x; - } + Page download = page.getAnchorByText("f").click(); + assertEquals("Hello world!", download.getWebResponse().getContentAsString()); } /** Simulation of a storage service with URLs unrelated to {@link Run#doArtifact}. */ @TestExtension("externalURLDownload") diff --git a/test/src/test/java/hudson/model/HudsonTest.java b/test/src/test/java/hudson/model/HudsonTest.java index 5e8d8d82f98a5f09f958dedc0ef9891c0098ff3b..d8dd01e52dbc3c1a5b9f5ce480236784bd73c3da 100644 --- a/test/src/test/java/hudson/model/HudsonTest.java +++ b/test/src/test/java/hudson/model/HudsonTest.java @@ -25,7 +25,6 @@ package hudson.model; import static org.junit.Assert.*; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; @@ -169,20 +168,19 @@ public class HudsonTest { public void deleteHudsonComputer() throws Exception { WebClient wc = j.createWebClient(); HtmlPage page = wc.goTo("computer/(master)/"); - for (HtmlAnchor a : page.getAnchors()) - assertFalse(a.getHrefAttribute(),a.getHrefAttribute().endsWith("delete")); + for (HtmlAnchor a : page.getAnchors()) { + assertFalse(a.getHrefAttribute(), a.getHrefAttribute().endsWith("delete")); + } + wc.setThrowExceptionOnFailingStatusCode(false); // try to delete it by hitting the final URL directly WebRequest req = new WebRequest(new URL(wc.getContextPath()+"computer/(master)/doDelete"), HttpMethod.POST); - try { - wc.getPage(wc.addCrumb(req)); - fail("Error code expected"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, e.getStatusCode()); - } + page = wc.getPage(wc.addCrumb(req)); + assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, page.getWebResponse().getStatusCode()); // the master computer object should be still here - wc.goTo("computer/(master)/"); + page = wc.goTo("computer/(master)/"); + assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); } /** diff --git a/test/src/test/java/hudson/model/ItemsTest.java b/test/src/test/java/hudson/model/ItemsTest.java index 04aefdc237a00583e271c6c4d6de940551811a9c..3e15d2228751b6b7b13c88727d901e6042a9db98 100644 --- a/test/src/test/java/hudson/model/ItemsTest.java +++ b/test/src/test/java/hudson/model/ItemsTest.java @@ -191,9 +191,10 @@ public class ItemsTest { /** Use the REST command to create an empty project (normally used only from the UI in the New Item dialog). */ REST_EMPTY { @Override void run(JenkinsRule r, String target) throws Exception { - JenkinsRule.WebClient wc = wc(r); - wc.getOptions().setRedirectEnabled(false); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); // redirect perversely counts as a failure + JenkinsRule.WebClient wc = wc(r) + // redirect perversely counts as a failure + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); WebResponse webResponse = wc.getPage(new WebRequest(new URL(wc.getContextPath() + "createItem?name=" + target + "&mode=hudson.model.FreeStyleProject"), HttpMethod.POST)).getWebResponse(); if (webResponse.getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) { throw new FailingHttpStatusCodeException(webResponse); @@ -204,9 +205,9 @@ public class ItemsTest { REST_COPY { @Override void run(JenkinsRule r, String target) throws Exception { r.createFreeStyleProject("dupe"); - JenkinsRule.WebClient wc = wc(r); - wc.getOptions().setRedirectEnabled(false); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = wc(r) + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); WebResponse webResponse = wc.getPage(new WebRequest(new URL(wc.getContextPath() + "createItem?name=" + target + "&mode=copy&from=dupe"), HttpMethod.POST)).getWebResponse(); r.jenkins.getItem("dupe").delete(); if (webResponse.getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) { @@ -228,9 +229,9 @@ public class ItemsTest { REST_RENAME { @Override void run(JenkinsRule r, String target) throws Exception { r.createFreeStyleProject("dupe"); - JenkinsRule.WebClient wc = wc(r); - wc.getOptions().setRedirectEnabled(false); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = wc(r) + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); WebResponse webResponse = wc.getPage(new WebRequest(new URL(wc.getContextPath() + "job/dupe/doRename?newName=" + target), HttpMethod.POST)).getWebResponse(); if (webResponse.getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY) { r.jenkins.getItem("dupe").delete(); diff --git a/test/src/test/java/hudson/model/JobTest.java b/test/src/test/java/hudson/model/JobTest.java index 54448922465d9875435809f53677755b1cc3e252..b0720781c5553f59a2b9c2de53c312b6f9b42062 100644 --- a/test/src/test/java/hudson/model/JobTest.java +++ b/test/src/test/java/hudson/model/JobTest.java @@ -24,7 +24,7 @@ */ package hudson.model; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebAssert; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlFormUtil; @@ -52,7 +52,6 @@ import java.util.concurrent.CountDownLatch; import jenkins.model.ProjectNamingStrategy; -import jenkins.security.apitoken.ApiTokenPropertyConfiguration; import jenkins.security.apitoken.ApiTokenTestHelper; import org.hamcrest.Matchers; import org.junit.Rule; @@ -221,14 +220,19 @@ public class JobTest { try { wc.assertFails("job/testJob/config.xml", HttpURLConnection.HTTP_FORBIDDEN); - wc.withBasicApiToken(User.getById("alice", true)); // Has CONFIGURE and EXTENDED_READ permission - tryConfigDotXml(wc, 500, "Both perms; should get 500"); + wc.setThrowExceptionOnFailingStatusCode(false); + + // Has CONFIGURE and EXTENDED_READ permission + wc.withBasicApiToken(User.getById("alice", true)); + tryConfigDotXml(wc, HttpURLConnection.HTTP_INTERNAL_ERROR, "Both perms; should get 500"); - wc.withBasicApiToken(User.getById("bob", true)); // Has only CONFIGURE permission (this should imply EXTENDED_READ) - tryConfigDotXml(wc, 500, "Config perm should imply EXTENDED_READ"); + // Has only CONFIGURE permission (this should imply EXTENDED_READ) + wc.withBasicApiToken(User.getById("bob", true)); + tryConfigDotXml(wc, HttpURLConnection.HTTP_INTERNAL_ERROR, "Config perm should imply EXTENDED_READ"); - wc.withBasicApiToken(User.getById("charlie", true)); // Has only EXTENDED_READ permission - tryConfigDotXml(wc, 403, "No permission, should get 403"); + // Has only EXTENDED_READ permission + wc.withBasicApiToken(User.getById("charlie", true)); + tryConfigDotXml(wc, HttpURLConnection.HTTP_FORBIDDEN, "No permission, should get 403"); } finally { Item.EXTENDED_READ.setEnabled(saveEnabled); } @@ -236,17 +240,17 @@ public class JobTest { private static void tryConfigDotXml(JenkinsRule.WebClient wc, int status, String msg) throws Exception { // Verify we can GET the config.xml: - wc.goTo("job/testJob/config.xml", "application/xml"); + Page p = wc.goTo("job/testJob/config.xml", "application/xml"); + assertEquals("Retrieving config.xml should be ok", HttpURLConnection.HTTP_OK, p.getWebResponse().getStatusCode()); + // This page is a simple form to POST to /job/testJob/config.xml // But it posts invalid data so we expect 500 if we have permission, 403 if not HtmlPage page = wc.goTo("userContent/post.html"); - try { - HtmlFormUtil.submit(page.getForms().get(0)); - fail("Expected exception: " + msg); - } catch (FailingHttpStatusCodeException expected) { - assertEquals(msg, status, expected.getStatusCode()); - } - wc.goTo("logout"); + p = HtmlFormUtil.submit(page.getForms().get(0)); + assertEquals(msg, status, p.getWebResponse().getStatusCode()); + + p = wc.goTo("logout"); + assertEquals("To logout should be ok", HttpURLConnection.HTTP_OK, p.getWebResponse().getStatusCode()); } @LocalData @Issue("JENKINS-6371") diff --git a/test/src/test/java/hudson/model/NodeTest.java b/test/src/test/java/hudson/model/NodeTest.java index 5901d4e2f645236ad7f46f0735da9e2db3dc8024..8a967df80de48ca74dd9bbeab4c4fbd92798e227 100644 --- a/test/src/test/java/hudson/model/NodeTest.java +++ b/test/src/test/java/hudson/model/NodeTest.java @@ -23,7 +23,6 @@ */ package hudson.model; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; @@ -448,12 +447,10 @@ public class NodeTest { WebRequest settings = new WebRequest(wc.createCrumbedUrl("computer/(master)/config.xml")); settings.setHttpMethod(HttpMethod.POST); settings.setRequestBody(""); - try { - Page page = wc.getPage(settings); - fail(page.getWebResponse().getContentAsString()); - } catch (FailingHttpStatusCodeException x) { - assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, x.getStatusCode()); - } + + wc.setThrowExceptionOnFailingStatusCode(false); + Page page = wc.getPage(settings); + assertEquals(HttpURLConnection.HTTP_BAD_REQUEST, page.getWebResponse().getStatusCode()); } /** diff --git a/test/src/test/java/hudson/model/ParametersTest.java b/test/src/test/java/hudson/model/ParametersTest.java index 3249a773c8d36f63af512e0e1911c866037440f6..9fcbd68aea810c9a6baffe69eb1875fd5c73e82f 100644 --- a/test/src/test/java/hudson/model/ParametersTest.java +++ b/test/src/test/java/hudson/model/ParametersTest.java @@ -51,22 +51,22 @@ public class ParametersTest { CaptureEnvironmentBuilder builder = new CaptureEnvironmentBuilder(); project.getBuildersList().add(builder); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage page = wc.goTo("job/" + project.getName() + "/build?delay=0sec"); HtmlForm form = page.getFormByName("parameters"); - HtmlElement element = (HtmlElement) DomNodeUtil.selectSingleNode(form, "//tr[td/div/input/@value='string']"); + HtmlElement element = DomNodeUtil.selectSingleNode(form, "//tr[td/div/input/@value='string']"); assertNotNull(element); assertEquals("string description", ((HtmlElement) DomNodeUtil.selectSingleNode(element.getNextSibling().getNextSibling(), "td[@class='setting-description']")).getTextContent()); - HtmlTextInput stringParameterInput = (HtmlTextInput) DomNodeUtil.selectSingleNode(element, ".//input[@name='value']"); + HtmlTextInput stringParameterInput = DomNodeUtil.selectSingleNode(element, ".//input[@name='value']"); assertEquals("defaultValue", stringParameterInput.getAttribute("value")); assertEquals("string", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); stringParameterInput.setAttribute("value", "newValue"); - element = (HtmlElement) DomNodeUtil.selectSingleNode(form, "//tr[td/div/input/@value='boolean']"); + element = DomNodeUtil.selectSingleNode(form, "//tr[td/div/input/@value='boolean']"); assertNotNull(element); assertEquals("boolean description", ((HtmlElement) DomNodeUtil.selectSingleNode(element.getNextSibling().getNextSibling(), "td[@class='setting-description']")).getTextContent()); Object o = DomNodeUtil.selectSingleNode(element, ".//input[@name='value']"); @@ -75,12 +75,12 @@ public class ParametersTest { assertEquals(true, booleanParameterInput.isChecked()); assertEquals("boolean", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); - element = (HtmlElement) DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='choice']"); + element = DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='choice']"); assertNotNull(element); assertEquals("choice description", ((HtmlElement) DomNodeUtil.selectSingleNode(element.getNextSibling().getNextSibling(), "td[@class='setting-description']")).getTextContent()); assertEquals("choice", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); - element = (HtmlElement) DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='run']"); + element = DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='run']"); assertNotNull(element); assertEquals("run description", ((HtmlElement) DomNodeUtil.selectSingleNode(element.getNextSibling().getNextSibling(), "td[@class='setting-description']")).getTextContent()); assertEquals("run", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); @@ -105,16 +105,16 @@ public class ParametersTest { CaptureEnvironmentBuilder builder = new CaptureEnvironmentBuilder(); project.getBuildersList().add(builder); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage page = wc.goTo("job/" + project.getName() + "/build?delay=0sec"); HtmlForm form = page.getFormByName("parameters"); - HtmlElement element = (HtmlElement) DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='choice']"); + HtmlElement element = DomNodeUtil.selectSingleNode(form, ".//tr[td/div/input/@value='choice']"); assertNotNull(element); assertEquals("choice description", ((HtmlElement) DomNodeUtil.selectSingleNode(element.getNextSibling().getNextSibling(), "td[@class='setting-description']")).getTextContent()); assertEquals("choice", ((HtmlElement) DomNodeUtil.selectSingleNode(element, "td[@class='setting-name']")).getTextContent()); - HtmlOption opt = (HtmlOption)DomNodeUtil.selectSingleNode(element, "td/div/select/option[@value='Choice <2>']"); + HtmlOption opt = DomNodeUtil.selectSingleNode(element, "td/div/select/option[@value='Choice <2>']"); assertNotNull(opt); assertEquals("Choice <2>", opt.asText()); opt.setSelected(true); @@ -192,8 +192,8 @@ public class ParametersTest { new FileParameterDefinition("filename", "description")); project.addProperty(pdp); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage page = wc.goTo("job/" + project.getName() + "/build?delay=0sec"); HtmlForm form = page.getFormByName("parameters"); @@ -215,12 +215,13 @@ public class ParametersTest { ); p.addProperty(pdb); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); // Ignore 405 + WebClient wc = j.createWebClient() + // Ignore 405 + .withThrowExceptionOnFailingStatusCode(false); HtmlPage page = wc.getPage(p, "build"); // java.lang.IllegalArgumentException: No such parameter definition: . - wc.getOptions().setThrowExceptionOnFailingStatusCode(true); + wc.setThrowExceptionOnFailingStatusCode(true); final HtmlForm form = page.getFormByName("parameters"); HtmlFormUtil.submit(form, HtmlFormUtil.getButtonByCaption(form, "Build")); } @@ -233,8 +234,8 @@ public class ParametersTest { StringParameterDefinition param = new StringParameterDefinition("", "", ""); assertEquals("[param description]", param.getFormattedDescription()); p.addProperty(new ParametersDefinitionProperty(param)); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage page = wc.getPage(p, "build?delay=0sec"); collector.checkThat(page.getWebResponse().getStatusCode(), is(HttpStatus.SC_METHOD_NOT_ALLOWED)); // 405 to dissuade scripts from thinking this triggered the build String text = page.getWebResponse().getContentAsString(); diff --git a/test/src/test/java/hudson/model/PasswordParameterDefinitionTest.java b/test/src/test/java/hudson/model/PasswordParameterDefinitionTest.java index 49784981af8fdc3920bfd6f0782d289e1e7c02e9..f725ba19637b9798b9b47c9b3a836c2f7cf2e6bb 100644 --- a/test/src/test/java/hudson/model/PasswordParameterDefinitionTest.java +++ b/test/src/test/java/hudson/model/PasswordParameterDefinitionTest.java @@ -71,8 +71,9 @@ public class PasswordParameterDefinitionTest { User admin = User.getById("admin", true); User dev = User.getById("dev", true); - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); // ParametersDefinitionProperty/index.jelly sends a 405 but really it is OK + JenkinsRule.WebClient wc = j.createWebClient() + // ParametersDefinitionProperty/index.jelly sends a 405 but really it is OK + .withThrowExceptionOnFailingStatusCode(false); // Control case: admin can use default value. j.submit(wc.withBasicApiToken(admin).getPage(p, "build?delay=0sec").getFormByName("parameters")); j.waitUntilNoActivity(); diff --git a/test/src/test/java/hudson/model/ProjectTest.java b/test/src/test/java/hudson/model/ProjectTest.java index 5a35b101f3a3ec78a696a7a301ae8a3d91065f76..a191323083ba29c7669656d44dce57c367bec974 100644 --- a/test/src/test/java/hudson/model/ProjectTest.java +++ b/test/src/test/java/hudson/model/ProjectTest.java @@ -25,6 +25,7 @@ package hudson.model; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.WebRequest; +import com.gargoylesoftware.htmlunit.javascript.host.event.Event; import hudson.*; import hudson.model.queue.QueueTaskFuture; import hudson.security.AccessDeniedException2; @@ -252,7 +253,8 @@ public class ProjectTest { assertEquals("Scm retry count should be the same as global scm retry count.", 6, p.getScmCheckoutRetryCount()); HtmlForm form = j.createWebClient().goTo(p.getUrl() + "/configure").getFormByName("config"); ((HtmlElement)form.getByXPath("//div[@class='advancedLink']//button").get(0)).click(); - form.getInputByName("hasCustomScmCheckoutRetryCount").click(); + // required due to the new default behavior of click + form.getInputByName("hasCustomScmCheckoutRetryCount").click(new Event(), true); form.getInputByName("scmCheckoutRetryCount").setValueAttribute("7"); j.submit(form); assertEquals("Scm retry count was set.", 7, p.getScmCheckoutRetryCount()); diff --git a/test/src/test/java/hudson/model/QueueSEC891Test.java b/test/src/test/java/hudson/model/QueueSEC891Test.java index ea3144eff3972c04c058ef6cafd5ccf9ad5c05fa..573065ae7b2d84a7df82a019de5a55f7c865559e 100644 --- a/test/src/test/java/hudson/model/QueueSEC891Test.java +++ b/test/src/test/java/hudson/model/QueueSEC891Test.java @@ -59,9 +59,9 @@ public class QueueSEC891Test { WebRequest request = new WebRequest(new URL(r.getURL() + urlProvider.apply(currentOne)), HttpMethod.POST); { // user without right cannot cancel - JenkinsRule.WebClient wc = r.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); - wc.getOptions().setRedirectEnabled(false); + JenkinsRule.WebClient wc = r.createWebClient() + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); wc.login("user"); Page p = wc.getPage(request); // currently the endpoint return a redirection to the previously visited page, none in our case @@ -71,9 +71,9 @@ public class QueueSEC891Test { assertFalse(currentOne.getFuture().isCancelled()); } { // user with right can - JenkinsRule.WebClient wc = r.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); - wc.getOptions().setRedirectEnabled(false); + JenkinsRule.WebClient wc = r.createWebClient() + .withRedirectEnabled(false) + .withThrowExceptionOnFailingStatusCode(false); wc.login("admin"); Page p = wc.getPage(request); assertThat(p.getWebResponse().getStatusCode(), lessThan(400)); diff --git a/test/src/test/java/hudson/model/UserRestartSEC897Test.java b/test/src/test/java/hudson/model/UserRestartSEC897Test.java index c0c0885863ef2cd390769a7188f7f9340206e21e..4763504de070a70f2e57915d6516891047610059 100644 --- a/test/src/test/java/hudson/model/UserRestartSEC897Test.java +++ b/test/src/test/java/hudson/model/UserRestartSEC897Test.java @@ -32,16 +32,16 @@ public class UserRestartSEC897Test { User.getById("admin", true).save(); { // attempt with ".." - JenkinsRule.WebClient wc = rr.j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = rr.j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest request = new WebRequest(new URL(rr.j.jenkins.getRootUrl() + "whoAmI/api/xml")); request.setAdditionalHeader("Authorization", base64("..", "any-password")); wc.getPage(request); } { // attempt with "../users/.." - JenkinsRule.WebClient wc = rr.j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = rr.j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest request = new WebRequest(new URL(rr.j.jenkins.getRootUrl() + "whoAmI/api/xml")); request.setAdditionalHeader("Authorization", base64("../users/..", "any-password")); diff --git a/test/src/test/java/hudson/model/ViewTest.java b/test/src/test/java/hudson/model/ViewTest.java index 98c9d91963a6488db4f605937d698117a2b881ad..ecd06303dbb8502ed609e79a5de58229335ab3ab 100644 --- a/test/src/test/java/hudson/model/ViewTest.java +++ b/test/src/test/java/hudson/model/ViewTest.java @@ -24,6 +24,7 @@ package hudson.model; import com.cloudbees.hudson.plugins.folder.Folder; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.html.DomNodeUtil; import com.gargoylesoftware.htmlunit.util.NameValuePair; @@ -31,7 +32,6 @@ import jenkins.model.Jenkins; import org.jenkins.ui.icon.Icon; import org.jenkins.ui.icon.IconSet; import org.jvnet.hudson.test.Issue; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlForm; @@ -56,6 +56,7 @@ import hudson.util.FormValidation; import hudson.util.HudsonIsLoading; import java.io.File; import java.io.IOException; +import java.net.HttpURLConnection; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -120,19 +121,19 @@ public class ViewTest { @Test public void conflictingName() throws Exception { assertNull(j.jenkins.getView("foo")); - HtmlForm form = j.createWebClient().goTo("newView").getFormByName("createItem"); + WebClient wc = j.createWebClient(); + HtmlForm form = wc.goTo("newView").getFormByName("createItem"); form.getInputByName("name").setValueAttribute("foo"); form.getRadioButtonsByName("mode").get(0).setChecked(true); j.submit(form); assertNotNull(j.jenkins.getView("foo")); + wc.setThrowExceptionOnFailingStatusCode(false); // do it again and verify an error - try { - j.submit(form); - fail("shouldn't be allowed to create two views of the same name."); - } catch (FailingHttpStatusCodeException e) { - assertEquals(400, e.getStatusCode()); - } + Page page = j.submit(form); + assertEquals("shouldn't be allowed to create two views of the same name.", + HttpURLConnection.HTTP_BAD_REQUEST, + page.getWebResponse().getStatusCode()); } @Test public void privateView() throws Exception { @@ -209,23 +210,24 @@ public class ViewTest { IconSet.icons.addIcon(new Icon("icon-folder icon-md", "24x24/folder.gif", "width: 24px; height: 24px;")); } - WebClient webClient = j.createWebClient(); + WebClient webClient = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); webClient.getOptions().setJavaScriptEnabled(false); j.assertAllImageLoadSuccessfully(webClient.goTo("asynchPeople")); } @Issue("JENKINS-16608") @Test public void notAllowedName() throws Exception { - HtmlForm form = j.createWebClient().goTo("newView").getFormByName("createItem"); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + HtmlForm form = wc.goTo("newView").getFormByName("createItem"); form.getInputByName("name").setValueAttribute(".."); form.getRadioButtonsByName("mode").get(0).setChecked(true); - try { - j.submit(form); - fail("\"..\" should not be allowed."); - } catch (FailingHttpStatusCodeException e) { - assertEquals(400, e.getStatusCode()); - } + HtmlPage page = j.submit(form); + assertEquals("\"..\" should not be allowed.", + HttpURLConnection.HTTP_BAD_REQUEST, + page.getWebResponse().getStatusCode()); } @Ignore("verified manually in Winstone but org.mortbay.JettyResponse.sendRedirect (6.1.26) seems to mangle the location") @@ -246,7 +248,7 @@ public class ViewTest { ListView view = listView("v"); view.description = "one"; WebClient wc = j.createWebClient(); - String xml = wc.goToXml("view/v/config.xml").getContent(); + String xml = wc.goToXml("view/v/config.xml").getWebResponse().getContentAsString(); assertTrue(xml, xml.contains("one")); xml = xml.replace("one", "two"); WebRequest req = new WebRequest(wc.createCrumbedUrl("view/v/config.xml"), HttpMethod.POST); diff --git a/test/src/test/java/hudson/search/SearchTest.java b/test/src/test/java/hudson/search/SearchTest.java index e2fcd37a48fbcbe74126810945a09611c51e8c45..6a16ec9f7f40600f42f37f9d1a363ded83e318e0 100644 --- a/test/src/test/java/hudson/search/SearchTest.java +++ b/test/src/test/java/hudson/search/SearchTest.java @@ -27,12 +27,13 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import com.gargoylesoftware.htmlunit.html.HtmlPage; import hudson.model.FreeStyleProject; import hudson.model.ListView; import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; @@ -43,7 +44,6 @@ import hudson.model.User; import hudson.model.View; import hudson.security.ACL; import hudson.security.ACLContext; -import hudson.security.AuthorizationStrategy; import hudson.security.GlobalMatrixAuthorizationStrategy; import jenkins.model.Jenkins; import net.sf.json.JSONArray; @@ -58,8 +58,6 @@ import org.jvnet.hudson.test.JenkinsRule.WebClient; import org.jvnet.hudson.test.MockAuthorizationStrategy; import org.jvnet.hudson.test.MockFolder; -import com.gargoylesoftware.htmlunit.AlertHandler; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.Page; /** @@ -74,12 +72,10 @@ public class SearchTest { */ @Test public void testFailure() throws Exception { - try { - j.search("no-such-thing"); - fail("404 expected"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(404,e.getResponse().getStatusCode()); - } + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + HtmlPage resultPage = wc.search("no-such-thing"); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, resultPage.getWebResponse().getStatusCode()); } /** @@ -88,18 +84,13 @@ public class SearchTest { @Issue("JENKINS-3415") @Test public void testXSS() throws Exception { - try { - WebClient wc = j.createWebClient(); - wc.setAlertHandler(new AlertHandler() { - public void handleAlert(Page page, String message) { - throw new AssertionError(); - } - }); - wc.search(""); - fail("404 expected"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(404,e.getResponse().getStatusCode()); - } + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + wc.setAlertHandler((page, message) -> { + throw new AssertionError(); + }); + HtmlPage resultPage = wc.search(""); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, resultPage.getWebResponse().getStatusCode()); } @Test diff --git a/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerTest.java b/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerTest.java index 52dc455faf3ee458c2e9e9018f7e3258e685ce05..6770963f177f65f60058ea1141ec5857afcc76c1 100644 --- a/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerTest.java +++ b/test/src/test/java/hudson/security/csrf/DefaultCrumbIssuerTest.java @@ -6,10 +6,8 @@ package hudson.security.csrf; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.html.HtmlPage; -import jenkins.model.Jenkins; -import junit.framework.Assert; import net.sf.json.JSONObject; import org.junit.Before; import org.junit.Rule; @@ -60,13 +58,11 @@ public class DefaultCrumbIssuerTest { HtmlPage p = wc.goTo("configure"); wc.removeRequestHeader(HEADER_NAME); - try { - // The crumb should no longer match if we remove the proxy info - r.submit(p.getFormByName("config")); - } - catch (FailingHttpStatusCodeException e) { - assertEquals(403,e.getStatusCode()); - } + + wc.setThrowExceptionOnFailingStatusCode(false); + // The crumb should no longer match if we remove the proxy info + Page page = r.submit(p.getFormByName("config")); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, page.getWebResponse().getStatusCode()); } @Issue("JENKINS-3854") @@ -139,17 +135,19 @@ public class DefaultCrumbIssuerTest { @Issue("JENKINS-34254") @Test public void testRequirePostErrorPageCrumb() throws Exception { - Jenkins.getInstance().setCrumbIssuer(new DefaultCrumbIssuer(false)); - WebClient wc = r.createWebClient(); - try { - wc.goTo("quietDown"); - fail("expected failure"); - } catch (FailingHttpStatusCodeException ex) { - Assert.assertEquals("expect HTTP 405 method not allowed", 405, ex.getStatusCode()); - } + r.jenkins.setCrumbIssuer(new DefaultCrumbIssuer(false)); + WebClient wc = r.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); + + Page page = wc.goTo("quietDown"); + assertEquals("expect HTTP 405 method not allowed", + HttpURLConnection.HTTP_BAD_METHOD, + page.getWebResponse().getStatusCode()); + HtmlPage retry = (HtmlPage) wc.getCurrentWindow().getEnclosedPage(); HtmlPage success = r.submit(retry.getFormByName("retry")); - Assert.assertTrue("quieting down", r.jenkins.isQuietingDown()); + assertEquals(HttpURLConnection.HTTP_OK, success.getWebResponse().getStatusCode()); + assertTrue("quieting down", r.jenkins.isQuietingDown()); } } diff --git a/test/src/test/java/hudson/tools/ZipExtractionInstallerTest.java b/test/src/test/java/hudson/tools/ZipExtractionInstallerTest.java index e1e882d10f01231c669a186a4d33ac9f6a7320ca..22a211ddfda5db647c7bbc965fcb266701efd61e 100644 --- a/test/src/test/java/hudson/tools/ZipExtractionInstallerTest.java +++ b/test/src/test/java/hudson/tools/ZipExtractionInstallerTest.java @@ -24,7 +24,6 @@ package hudson.tools; import com.gargoylesoftware.htmlunit.HttpMethod; -import com.gargoylesoftware.htmlunit.InteractivePage; import com.gargoylesoftware.htmlunit.WebRequest; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; @@ -46,6 +45,7 @@ import org.jvnet.hudson.test.MockAuthorizationStrategy; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.lang.reflect.Field; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; @@ -88,12 +88,12 @@ public class ZipExtractionInstallerTest { JenkinsRule.WebClient adminWc = j.createWebClient(); adminWc.login(ADMIN); - assertEquals(200, adminWc.getPage(request).getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_OK, adminWc.getPage(request).getWebResponse().getStatusCode()); - JenkinsRule.WebClient userWc = j.createWebClient(); - userWc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient userWc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); userWc.login(USER); - assertEquals(403, userWc.getPage(request).getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_FORBIDDEN, userWc.getPage(request).getWebResponse().getStatusCode()); } @Test @@ -148,7 +148,7 @@ public class ZipExtractionInstallerTest { } @Override - public Object callFunction(InteractivePage page, Function function, Scriptable scope, Scriptable thisObject, Object[] args) { + public Object callFunction(HtmlPage page, Function function, Scriptable scope, Scriptable thisObject, Object[] args) { if (thisObject instanceof XMLHttpRequest) { try { WebRequest request = getPrivateWebRequestField((XMLHttpRequest) thisObject); diff --git a/test/src/test/java/hudson/util/RobustReflectionConverterTest.java b/test/src/test/java/hudson/util/RobustReflectionConverterTest.java index 35f489b4eac0e988c4da52149b83d304010ef849..28a3aa3a10bcf723ee53e1c45b4fcbea871208f6 100644 --- a/test/src/test/java/hudson/util/RobustReflectionConverterTest.java +++ b/test/src/test/java/hudson/util/RobustReflectionConverterTest.java @@ -24,6 +24,7 @@ package hudson.util; +import com.gargoylesoftware.htmlunit.Page; import hudson.cli.CLICommandInvoker; import hudson.diagnosis.OldDataMonitor; import hudson.model.AbstractDescribableImpl; @@ -38,6 +39,7 @@ import hudson.model.User; import hudson.security.ACL; import java.io.ByteArrayInputStream; +import java.net.HttpURLConnection; import java.net.URL; import java.util.Collections; import java.util.Map; @@ -45,7 +47,6 @@ import java.util.Map; import jenkins.model.Jenkins; import static org.junit.Assert.*; -import jenkins.security.apitoken.ApiTokenPropertyConfiguration; import jenkins.security.apitoken.ApiTokenTestHelper; import net.sf.json.JSONObject; @@ -59,7 +60,6 @@ import org.jvnet.hudson.test.recipes.LocalData; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.StaplerRequest; -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.WebRequest; @@ -236,18 +236,17 @@ public class RobustReflectionConverterTest { // Configure a bad keyword via REST. r.jenkins.setSecurityRealm(r.createDummySecurityRealm()); - WebClient wc = r.createWebClient(); + WebClient wc = r.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); wc.withBasicApiToken(test); WebRequest req = new WebRequest(new URL(wc.getContextPath() + String.format("%s/config.xml", p.getUrl())), HttpMethod.POST); req.setEncodingType(null); req.setRequestBody(String.format(CONFIGURATION_TEMPLATE, AcceptOnlySpecificKeyword.ACCEPT_KEYWORD, "badvalue")); - try { - wc.getPage(req); - fail("Submitting unacceptable configuration via REST should fail."); - } catch (FailingHttpStatusCodeException e) { - // pass - } + Page page = wc.getPage(req); + assertEquals("Submitting unacceptable configuration via REST should fail.", + HttpURLConnection.HTTP_INTERNAL_ERROR, + page.getWebResponse().getStatusCode()); // Configuration should not be updated for a failure of the critical field, assertNotEquals("badvalue", p.getProperty(KeywordProperty.class).getCriticalField().getKeyword()); diff --git a/test/src/test/java/jenkins/bugs/Jenkins19124Test.java b/test/src/test/java/jenkins/bugs/Jenkins19124Test.java index 4f976f85bacedc3a93cb669fcf713d2fca2aff7a..4a66ffe7d1e6d4568219c21edcb01e6995ec1509 100644 --- a/test/src/test/java/jenkins/bugs/Jenkins19124Test.java +++ b/test/src/test/java/jenkins/bugs/Jenkins19124Test.java @@ -41,7 +41,10 @@ public class Jenkins19124Test { JenkinsRule.WebClient wc = j.createWebClient(); HtmlPage c = wc.getPage(p, "configure"); HtmlTextInput alpha = c.getElementByName("_.alpha"); + // the fireEvent is required as setValueAttribute's new behavior is not triggering the onChange event anymore alpha.setValueAttribute("hello"); + alpha.fireEvent("change"); + WebClientUtil.waitForJSExec(wc); assertEquals("hello", d.alpha); assertEquals("2", d.bravo); diff --git a/test/src/test/java/jenkins/model/JenkinsTest.java b/test/src/test/java/jenkins/model/JenkinsTest.java index a727292427a39043258f41c741974452422916dd..3b6676c1f5c6aea2a86662f7e52201d31cc20628 100644 --- a/test/src/test/java/jenkins/model/JenkinsTest.java +++ b/test/src/test/java/jenkins/model/JenkinsTest.java @@ -337,33 +337,30 @@ public class JenkinsTest { grant(Jenkins.READ).everywhere().to("bob"). grantWithoutImplication(Jenkins.ADMINISTER, Jenkins.READ).everywhere().to("charlie")); - WebClient wc = j.createWebClient(); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false) + .withBasicApiToken(User.getById("alice", true)); - wc.withBasicApiToken(User.getById("alice", true)); wc.assertFails("eval", HttpURLConnection.HTTP_BAD_METHOD); - assertEquals("3", eval(wc)); + assertEquals("3", eval(wc).getWebResponse().getContentAsString()); wc.withBasicApiToken(User.getById("bob", true)); - try { - eval(wc); - fail("bob has only READ"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(HttpURLConnection.HTTP_FORBIDDEN, e.getStatusCode()); - } + Page page = eval(wc); + assertEquals("bob has only READ", + HttpURLConnection.HTTP_FORBIDDEN, + page.getWebResponse().getStatusCode()); wc.withBasicApiToken(User.getById("charlie", true)); - try { - eval(wc); - fail("charlie has ADMINISTER but not RUN_SCRIPTS"); - } catch (FailingHttpStatusCodeException e) { - assertEquals(HttpURLConnection.HTTP_FORBIDDEN, e.getStatusCode()); - } + page = eval(wc); + assertEquals("charlie has ADMINISTER but not RUN_SCRIPTS", + HttpURLConnection.HTTP_FORBIDDEN, + page.getWebResponse().getStatusCode()); } - private String eval(WebClient wc) throws Exception { + private Page eval(WebClient wc) throws Exception { WebRequest req = new WebRequest(new URL(wc.getContextPath() + "eval"), HttpMethod.POST); req.setEncodingType(null); req.setRequestBody("${1+2}"); - return wc.getPage(req).getWebResponse().getContentAsString(); + return wc.getPage(req); } @TestExtension("testUnprotectedRootAction") @@ -411,13 +408,13 @@ public class JenkinsTest { j.jenkins.setAuthorizationStrategy(auth); // no anonymous read access - assertTrue(!Jenkins.getInstance().hasPermission(Jenkins.ANONYMOUS,Jenkins.READ)); + assertTrue(!Jenkins.get().hasPermission(Jenkins.ANONYMOUS, Jenkins.READ)); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("error/reportError"); - assertEquals(p.asText(), 400, p.getWebResponse().getStatusCode()); // not 403 forbidden + assertEquals(p.asText(), HttpURLConnection.HTTP_BAD_REQUEST, p.getWebResponse().getStatusCode()); // not 403 forbidden assertTrue(p.getWebResponse().getContentAsString().contains("My car is black")); } @@ -462,8 +459,8 @@ public class JenkinsTest { URL url = new URL(j.getURL(), "computer/" + slave.getNodeName() + "/scriptText?script=println(42)"); - WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest req = new WebRequest(url, HttpMethod.POST); Page page = wc.getPage(wc.addCrumb(req)); diff --git a/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java b/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java index e9a4f16b24796141f5ea4e0224588ea0b15dfac8..fc9e43069d77a5f83e74c2ff9912c4fca12f8298 100644 --- a/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java +++ b/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java @@ -24,6 +24,8 @@ import hudson.model.FreeStyleProject; import hudson.model.User; import hudson.security.ACL; import hudson.security.ACLContext; + +import java.net.HttpURLConnection; import java.net.URL; import jenkins.model.Jenkins; @@ -139,12 +141,14 @@ public class ApiTokenPropertyTest { final ApiTokenProperty.DescriptorImpl descriptor = (ApiTokenProperty.DescriptorImpl) t.getDescriptor(); // Make sure that Admin can reset a token of another user - WebClient wc = createClientForUser("bar"); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = createClientForUser("bar") + .withThrowExceptionOnFailingStatusCode(false); HtmlPage requirePOST = wc.goTo(foo.getUrl() + "/" + descriptor.getDescriptorUrl()+ "/changeToken"); - assertEquals("method should not be allowed", 405, requirePOST.getWebResponse().getStatusCode()); + assertEquals("method should not be allowed", + HttpURLConnection.HTTP_BAD_METHOD, + requirePOST.getWebResponse().getStatusCode()); - wc.getOptions().setThrowExceptionOnFailingStatusCode(true); + wc.setThrowExceptionOnFailingStatusCode(true); WebRequest request = new WebRequest(new URL(j.getURL().toString() + foo.getUrl() + "/" + descriptor.getDescriptorUrl()+ "/changeToken"), HttpMethod.POST); HtmlPage res = wc.getPage(request); @@ -163,7 +167,7 @@ public class ApiTokenPropertyTest { WebClient wc = createClientForUser("foo"); WebRequest wr = new WebRequest(new URL(j.getURL(), "job/bar/build"), HttpMethod.POST); - assertEquals(201, wc.getPage(wr).getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_CREATED, wc.getPage(wr).getWebResponse().getStatusCode()); j.waitUntilNoActivity(); diff --git a/test/src/test/java/jenkins/security/RekeySecretAdminMonitorTest.java b/test/src/test/java/jenkins/security/RekeySecretAdminMonitorTest.java index 413b4a6eed3df74be40ca37d788a78d3ddfff6a3..5ce5f1b1695dd2e833f7ae29c343943cbfbd7c99 100644 --- a/test/src/test/java/jenkins/security/RekeySecretAdminMonitorTest.java +++ b/test/src/test/java/jenkins/security/RekeySecretAdminMonitorTest.java @@ -11,7 +11,6 @@ import hudson.Util; import hudson.util.Secret; import hudson.util.SecretHelper; import org.apache.commons.io.FileUtils; -import org.hamcrest.CoreMatchers; import org.jvnet.hudson.test.HudsonTestCase; import org.jvnet.hudson.test.recipes.Recipe.Runner; import org.xml.sax.SAXException; @@ -22,8 +21,7 @@ import java.io.File; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.regex.Pattern; - -import static org.junit.Assert.assertThat; +import java.util.stream.Stream; /** * @author Kohsuke Kawaguchi @@ -132,7 +130,18 @@ public class RekeySecretAdminMonitorTest extends HudsonTestCase { } private HtmlButton getButton(HtmlForm form, int index) { - return form.getHtmlElementsByTagName("button").get(index); + // due to the removal of method HtmlElement.getHtmlElementsByTagName + Stream buttonStream = form.getElementsByTagName("button").stream() + .filter(HtmlButton.class::isInstance) + .map(HtmlButton.class::cast); + + if (index > 0) { + buttonStream = buttonStream.skip(index - 1); + } + + return buttonStream + .findFirst() + .orElse(null); } public void testScanOnBoot() throws Exception { diff --git a/test/src/test/java/jenkins/security/Security177Test.java b/test/src/test/java/jenkins/security/Security177Test.java index d52b30882290d315747206e224650be90cf96fa8..b0fb32ed3d465d041f293fc6881aaeb17972ba30 100644 --- a/test/src/test/java/jenkins/security/Security177Test.java +++ b/test/src/test/java/jenkins/security/Security177Test.java @@ -19,8 +19,8 @@ public class Security177Test { @Test public void nosniff() throws Exception { - WebClient wc = jenkins.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = jenkins.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); URL u = jenkins.getURL(); verifyNoSniff(wc.getPage(new URL(u, "adjuncts/507db12b/nosuch/adjunct.js"))); diff --git a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java index e1b8dd6674d606d3362cd35992bbe20f80725530..c436ceb38fde861957c17d1e5951a41b9c47fdd6 100644 --- a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java +++ b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java @@ -67,8 +67,9 @@ public class ApiTokenStatsTest { assertNotNull(t.getTokenStats()); // test the authentication via Token - WebClient wc = j.createWebClient().withBasicCredentials(u.getId()); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + WebClient wc = j.createWebClient() + .withBasicCredentials(u.getId()) + .withThrowExceptionOnFailingStatusCode(false); final String TOKEN_NAME = "New Token Name"; diff --git a/test/src/test/java/jenkins/security/stapler/Security914Test.java b/test/src/test/java/jenkins/security/stapler/Security914Test.java index 0d4ea8d263b23b3739b1e3f4fed7fb1d53ef2231..716b74c1734ceae659ce71b6ed2233aa7122b4c4 100644 --- a/test/src/test/java/jenkins/security/stapler/Security914Test.java +++ b/test/src/test/java/jenkins/security/stapler/Security914Test.java @@ -33,6 +33,7 @@ import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.TestPluginManager; +import java.net.HttpURLConnection; import java.net.URL; import static org.junit.Assert.assertEquals; @@ -53,8 +54,8 @@ public class Security914Test { } j.createWebClient().goTo("plugin/credentials/images/24x24/credentials.png", "image/png"); - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest request = new WebRequest(new URL(j.getURL() + "plugin/credentials/.xml")); // plugin deployed in: test\target\jenkins7375296945862059919tmp // rootDir is in : test\target\jenkinsTests.tmp\jenkins1274934531848159942test @@ -62,7 +63,7 @@ public class Security914Test { request.setAdditionalHeader("Accept-Language", "../../../../jenkinsTests.tmp/" + j.jenkins.getRootDir().getName() + "/config"); Page p = wc.getPage(request); - assertEquals(p.getWebResponse().getStatusCode(), 404); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, p.getWebResponse().getStatusCode()); assertNotEquals(p.getWebResponse().getContentType(), "application/xml"); } @@ -75,14 +76,14 @@ public class Security914Test { } j.createWebClient().goTo("plugin/credentials/images/24x24/credentials.png", "image/png"); - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); WebRequest request = new WebRequest(new URL(j.getURL() + "plugin/credentials/.ini")); // ../ can be multiply to infinity, no impact, we just need to have enough to reach the root request.setAdditionalHeader("Accept-Language", "../../../../../../../../../../../../windows/win"); Page p = wc.getPage(request); - assertEquals(p.getWebResponse().getStatusCode(), 404); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, p.getWebResponse().getStatusCode()); assertEquals(p.getWebResponse().getContentType(), "text/html"); } } diff --git a/test/src/test/java/lib/form/ExpandableTextboxTest.java b/test/src/test/java/lib/form/ExpandableTextboxTest.java index 2889c02b29f1702c18adaa755b10f37cdfd80e44..5b75f48172424865477f69f2f6e5720017d65a1e 100644 --- a/test/src/test/java/lib/form/ExpandableTextboxTest.java +++ b/test/src/test/java/lib/form/ExpandableTextboxTest.java @@ -99,8 +99,8 @@ public class ExpandableTextboxTest { private void checkRegularCase(TestRootAction testParams) throws Exception { testParams.paramName = "testName"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); HtmlElementUtil.click(getExpandButton(p)); @@ -110,8 +110,8 @@ public class ExpandableTextboxTest { private void checkInjectionInName(TestRootAction testParams) throws Exception { testParams.paramName = "testName',document.title='hacked'+'"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); HtmlElementUtil.click(getExpandButton(p)); diff --git a/test/src/test/java/lib/form/PasswordTest.java b/test/src/test/java/lib/form/PasswordTest.java index 316fdb20d34b4671e476b467e3764e462e3f2106..198b7b5254c85a1b575c6b012746ee1065ad6bed 100644 --- a/test/src/test/java/lib/form/PasswordTest.java +++ b/test/src/test/java/lib/form/PasswordTest.java @@ -148,7 +148,7 @@ public class PasswordTest { ByteArrayOutputStream baos = new ByteArrayOutputStream(); String pName = p.getFullName(); getJobCommand.main(Collections.singletonList(pName), Locale.ENGLISH, System.in, new PrintStream(baos), System.err); - assertEquals(xmlAdmin, baos.toString(configXml.getWebResponse().getContentCharset())); + assertEquals(xmlAdmin, baos.toString(configXml.getWebResponse().getContentCharset().name())); CopyJobCommand copyJobCommand = new CopyJobCommand(); copyJobCommand.setTransportAuth(adminAuth); String pAdminName = pName + "-admin"; @@ -171,7 +171,7 @@ public class PasswordTest { getJobCommand.setTransportAuth(devAuth); baos = new ByteArrayOutputStream(); getJobCommand.main(Collections.singletonList(pName), Locale.ENGLISH, System.in, new PrintStream(baos), System.err); - assertEquals(xmlDev, baos.toString(configXml.getWebResponse().getContentCharset())); + assertEquals(xmlDev, baos.toString(configXml.getWebResponse().getContentCharset().name())); copyJobCommand = new CopyJobCommand(); copyJobCommand.setTransportAuth(devAuth); String pDevName = pName + "-dev"; @@ -194,7 +194,9 @@ public class PasswordTest { } VulnerableProperty.DescriptorImpl.incomingURL = null; String secret = "s3cr3t"; + // the fireEvent is required as setText's new behavior is not triggering the onChange event anymore field.setText(secret); + field.fireEvent("change"); while (VulnerableProperty.DescriptorImpl.incomingURL == null) { Thread.sleep(100); // form validation of edited value } diff --git a/test/src/test/java/lib/form/ValidateButtonTest.java b/test/src/test/java/lib/form/ValidateButtonTest.java index f1f09b4e0a3abbfda0ac1ea04f28b0d263cc038d..a03eaf7e1fe6ed9c524271a685bac65a4306b877 100644 --- a/test/src/test/java/lib/form/ValidateButtonTest.java +++ b/test/src/test/java/lib/form/ValidateButtonTest.java @@ -128,8 +128,8 @@ public class ValidateButtonTest { descriptor.paramMethod = "validateInjection"; descriptor.paramWith = "a,b"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); descriptor.wasCalled = false; @@ -142,8 +142,8 @@ public class ValidateButtonTest { descriptor.paramMethod = "validateInjection',document.title='hacked'+'"; descriptor.paramWith = "a,b"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); // no check on wasCalled because the button that is expected by the method is not passed (arguments are shifted due to the injection) @@ -156,8 +156,8 @@ public class ValidateButtonTest { descriptor.paramMethod = "validateInjection"; descriptor.paramWith = "a,b',document.title='hacked'+'"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); descriptor.wasCalled = false; diff --git a/test/src/test/java/lib/layout/ConfirmationLinkTest.java b/test/src/test/java/lib/layout/ConfirmationLinkTest.java index bdacea2bfc61668df09dcc8de5adf0cbb0c25489..0db6bad04e0cab9536114a0efdd39e184527c5e9 100644 --- a/test/src/test/java/lib/layout/ConfirmationLinkTest.java +++ b/test/src/test/java/lib/layout/ConfirmationLinkTest.java @@ -41,6 +41,8 @@ import org.kohsuke.stapler.WebMethod; import javax.annotation.CheckForNull; +import java.net.HttpURLConnection; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; @@ -111,8 +113,8 @@ public class ConfirmationLinkTest { } private Page getPageAfterClick() throws Exception { - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); return HtmlElementUtil.click(getClickableLink(p)); @@ -124,15 +126,15 @@ public class ConfirmationLinkTest { testParams.paramClass = null; testParams.paramPost = null; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); Page pageAfterClick = HtmlElementUtil.click(getClickableLink(p)); assertNotEquals("hacked", p.getTitleText()); assertTrue(p.getWebResponse().getContentAsString().contains("Message to confirm the click")); // the url it clicks on is escaped and so does not exist - assertEquals(404, pageAfterClick.getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, pageAfterClick.getWebResponse().getStatusCode()); } private void checkInjectionInMessage(TestRootAction testParams) throws Exception { @@ -141,14 +143,14 @@ public class ConfirmationLinkTest { testParams.paramClass = null; testParams.paramPost = null; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); Page pageAfterClick = HtmlElementUtil.click(getClickableLink(p)); assertNotEquals("hacked", p.getTitleText()); // the url is normally the same page so it's ok - assertEquals(200, pageAfterClick.getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_OK, pageAfterClick.getWebResponse().getStatusCode()); } private void checkInjectionInPost(TestRootAction testParams) throws Exception { @@ -157,15 +159,15 @@ public class ConfirmationLinkTest { testParams.paramClass = null; testParams.paramPost = postPayload; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); Page pageAfterClick = HtmlElementUtil.click(getClickableLink(p)); assertNotEquals("hacked", p.getTitleText()); assertTrue(p.getWebResponse().getContentAsString().contains("Message to confirm the click")); // the url is normally the same page so it's ok - assertEquals(200, pageAfterClick.getWebResponse().getStatusCode()); + assertEquals(HttpURLConnection.HTTP_OK, pageAfterClick.getWebResponse().getStatusCode()); } private HtmlAnchor getClickableLink(HtmlPage page){ diff --git a/test/src/test/java/lib/layout/StopButtonTest.java b/test/src/test/java/lib/layout/StopButtonTest.java index 913c15ec56ade3ef7b3f69277b3e1ecdec79d613..b4f8950e7a5346839666ae53ed628c6433039812 100644 --- a/test/src/test/java/lib/layout/StopButtonTest.java +++ b/test/src/test/java/lib/layout/StopButtonTest.java @@ -77,8 +77,8 @@ public class StopButtonTest { testParams.paramAlt = "Alternative text for icon"; testParams.paramConfirm = null; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); HtmlElementUtil.click(getStopLink(p)); @@ -91,8 +91,8 @@ public class StopButtonTest { testParams.paramAlt = "Alternative text for icon"; testParams.paramConfirm = "Confirm message"; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); HtmlElementUtil.click(getStopLink(p)); @@ -105,8 +105,8 @@ public class StopButtonTest { testParams.paramAlt = "Alternative text for icon"; testParams.paramConfirm = postPayload; - JenkinsRule.WebClient wc = j.createWebClient(); - wc.getOptions().setThrowExceptionOnFailingStatusCode(false); + JenkinsRule.WebClient wc = j.createWebClient() + .withThrowExceptionOnFailingStatusCode(false); HtmlPage p = wc.goTo("test"); HtmlElementUtil.click(getStopLink(p));