Author: markt Date: Wed Dec 12 17:13:08 2018 New Revision: 1848779 URL: http://svn.apache.org/viewvc?rev=1848779&view=rev Log: Add a test case for an issue reported against the servlet spec (works correctly in Tomcat)
Modified: tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java Modified: tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java?rev=1848779&r1=1848778&r2=1848779&view=diff ============================================================================== --- tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java (original) +++ tomcat/trunk/test/javax/servlet/http/TestHttpServlet.java Wed Dec 12 17:13:08 2018 @@ -111,6 +111,51 @@ public class TestHttpServlet extends Tom } + @Test + public void testChunkingWithHead() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + // No file system docBase required + StandardContext ctx = (StandardContext) tomcat.addContext("", null); + + ChunkingServlet s = new ChunkingServlet(); + Tomcat.addServlet(ctx, "ChunkingServlet", s); + ctx.addServletMappingDecoded("/chunking", "ChunkingServlet"); + + tomcat.start(); + + Map<String,List<String>> getHeaders = new HashMap<>(); + String path = "http://localhost:" + getPort() + "/chunking"; + ByteChunk out = new ByteChunk(); + + int rc = getUrl(path, out, getHeaders); + Assert.assertEquals(HttpServletResponse.SC_OK, rc); + out.recycle(); + + Map<String,List<String>> headHeaders = new HashMap<>(); + rc = headUrl(path, out, headHeaders); + Assert.assertEquals(HttpServletResponse.SC_OK, rc); + + // Headers should be the same (apart from Date) + Assert.assertEquals(getHeaders.size(), headHeaders.size()); + for (Map.Entry<String, List<String>> getHeader : getHeaders.entrySet()) { + String headerName = getHeader.getKey(); + if ("date".equalsIgnoreCase(headerName)) { + continue; + } + Assert.assertTrue(headHeaders.containsKey(headerName)); + List<String> getValues = getHeader.getValue(); + List<String> headValues = headHeaders.get(headerName); + Assert.assertEquals(getValues.size(), headValues.size()); + for (String value : getValues) { + Assert.assertTrue(headValues.contains(value)); + } + } + + tomcat.stop(); + } + + private static class Bug57602ServletOuter extends HttpServlet { private static final long serialVersionUID = 1L; @@ -141,4 +186,21 @@ public class TestHttpServlet extends Tom pw.println("Included"); } } + + + private static class ChunkingServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + resp.setContentType("text/plain"); + resp.setCharacterEncoding("UTF-8"); + PrintWriter pw = resp.getWriter(); + // Force chunking + resp.flushBuffer(); + pw.println("Data"); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org