Author: markt Date: Wed Jan 13 14:44:05 2016 New Revision: 1724433 URL: http://svn.apache.org/viewvc?rev=1724433&view=rev Log: Make test more robust (not dependent on hash order)
Modified: tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java Modified: tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java?rev=1724433&r1=1724432&r2=1724433&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java (original) +++ tomcat/trunk/test/org/apache/catalina/core/TestApplicationHttpRequest.java Wed Jan 13 14:44:05 2016 @@ -18,6 +18,7 @@ package org.apache.catalina.core; import java.io.IOException; import java.io.PrintWriter; +import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -41,95 +42,129 @@ public class TestApplicationHttpRequest */ @Test public void testForwardQueryString01() throws Exception { - doQueryStringTest(null, "a=b", "a:(b)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b" }); + doQueryStringTest(null, "a=b", expected); } @Test public void testForwardQueryString02() throws Exception { - doQueryStringTest(null, "a=b&a=c", "a:(b),(c)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "c" }); + doQueryStringTest(null, "a=b&a=c", expected); } @Test public void testForwardQueryString03() throws Exception { - doQueryStringTest(null, "a=b&c=d", "a:(b);c:(d)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b" }); + expected.put("c", new String[] { "d" }); + doQueryStringTest(null, "a=b&c=d", expected); } @Test public void testForwardQueryString04() throws Exception { - doQueryStringTest(null, "a=b&c=d&a=e", "a:(b),(e);c:(d)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "e" }); + expected.put("c", new String[] { "d" }); + doQueryStringTest(null, "a=b&c=d&a=e", expected); } @Test public void testForwardQueryString05() throws Exception { // Parameters with no value are assigned a vale of the empty string - doQueryStringTest(null, "a=b&c&a=e", "a:(b),(e);c:()"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "e" }); + expected.put("c", new String[] { "" }); + doQueryStringTest(null, "a=b&c&a=e", expected); } @Test public void testOriginalQueryString01() throws Exception { - doQueryStringTest("a=b", null, "a:(b)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b" }); + doQueryStringTest("a=b", null, expected); } @Test public void testOriginalQueryString02() throws Exception { - doQueryStringTest("a=b&a=c", null, "a:(b),(c)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "c" }); + doQueryStringTest("a=b&a=c", null, expected); } @Test public void testOriginalQueryString03() throws Exception { - doQueryStringTest("a=b&c=d", null, "a:(b);c:(d)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b" }); + expected.put("c", new String[] { "d" }); + doQueryStringTest("a=b&c=d", null, expected); } @Test public void testOriginalQueryString04() throws Exception { - doQueryStringTest("a=b&c=d&a=e", null, "a:(b),(e);c:(d)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "e" }); + expected.put("c", new String[] { "d" }); + doQueryStringTest("a=b&c=d&a=e", null, expected); } @Test public void testOriginalQueryString05() throws Exception { // Parameters with no value are assigned a vale of the empty string - doQueryStringTest("a=b&c&a=e", null, "a:(b),(e);c:()"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "e" }); + expected.put("c", new String[] { "" }); + doQueryStringTest("a=b&c&a=e", null, expected); } @Test public void testMergeQueryString01() throws Exception { - doQueryStringTest("a=b", "a=z", "a:(z),(b)"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "z", "b" }); + doQueryStringTest("a=b", "a=z", expected); } @Test public void testMergeQueryString02() throws Exception { - // Parameters with no value are assigned a vale of the empty string - doQueryStringTest("a=b&c&a=e", "a=z", "a:(z),(b),(e);c:()"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "z", "b", "e" }); + expected.put("c", new String[] { "" }); + doQueryStringTest("a=b&c&a=e", "a=z", expected); } @Test public void testMergeQueryString03() throws Exception { - // Parameters with no value are assigned a vale of the empty string - doQueryStringTest("a=b&c&a=e", "c=z", "a:(b),(e);c:(z),()"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "b", "e" }); + expected.put("c", new String[] { "z", "" }); + doQueryStringTest("a=b&c&a=e", "c=z", expected); } @Test public void testMergeQueryString04() throws Exception { - // Parameters with no value are assigned a vale of the empty string - doQueryStringTest("a=b&c&a=e", "a", "a:(),(b),(e);c:()"); + Map<String,String[]> expected = new HashMap<>(); + expected.put("a", new String[] { "", "b", "e" }); + expected.put("c", new String[] { "" }); + doQueryStringTest("a=b&c&a=e", "a", expected); } private void doQueryStringTest(String originalQueryString, String forwardQueryString, - String expected) throws Exception { + Map<String,String[]> expected) throws Exception { Tomcat tomcat = getTomcatInstance(); // No file system docBase required @@ -142,7 +177,7 @@ public class TestApplicationHttpRequest } ctx.addServletMapping("/forward", "forward"); - Tomcat.addServlet(ctx, "display", new DisplayParameterServlet()); + Tomcat.addServlet(ctx, "display", new DisplayParameterServlet(expected)); ctx.addServletMapping("/display", "display"); tomcat.start(); @@ -158,7 +193,7 @@ public class TestApplicationHttpRequest int rc = getUrl(target.toString(), response, null); Assert.assertEquals(200, rc); - Assert.assertEquals(expected, response.toString()); + Assert.assertEquals("OK", response.toString()); } @@ -184,15 +219,45 @@ public class TestApplicationHttpRequest private static final long serialVersionUID = 1L; + private Map<String,String[]> expected; + + public DisplayParameterServlet(Map<String,String[]> expected) { + this.expected = expected; + } + @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain"); resp.setCharacterEncoding("UTF-8"); PrintWriter w = resp.getWriter(); - Map<String,String[]> params = req.getParameterMap(); + Map<String,String[]> actual = req.getParameterMap(); + + boolean ok = true; + for (Entry<String,String[]> entry : actual.entrySet()) { + String[] expectedValue = expected.get(entry.getKey()); + if (expectedValue == null || + expectedValue.length != entry.getValue().length) { + ok = false; + break; + } + for (int i = 0; i < expectedValue.length; i++) { + if (!expectedValue[i].equals(entry.getValue()[i])) { + ok = false; + break; + } + } + if (!ok) { + break; + } + } + + if (ok) { + w.print("OK"); + return; + } boolean firstParam = true; - for (Entry<String,String[]> param : params.entrySet()) { + for (Entry<String,String[]> param : actual.entrySet()) { if (firstParam) { firstParam = false; } else { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org