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

Reply via email to