@Test public void testDoFilterGzipResponseCompression() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(HttpMethod.POST.name(), "http://localhost:8080/gzip"); request.addHeader(HttpHeaders.ACCEPT_ENCODING, "gzip"); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain filterChain = new MockFilterChain( servlet, new GzipServletFilter(), new OncePerRequestFilter() { @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { response.getOutputStream().write("Should be compressed".getBytes()); } }); filterChain.doFilter(request, response); ByteArrayOutputStream unzippedStream = new ByteArrayOutputStream(); StreamUtils.copy( new GZIPInputStream(new ByteArrayInputStream(response.getContentAsByteArray())), unzippedStream); String unzipped = new String(unzippedStream.toByteArray()); Assert.assertEquals(unzipped, "Should be compressed"); }
@Test public void servletWriterCommittedOnWriterFlush() throws IOException { assertFalse(response.isCommitted()); response.getWriter().write("X"); assertFalse(response.isCommitted()); response.getWriter().flush(); assertTrue(response.isCommitted()); assertEquals(1, response.getContentAsByteArray().length); }
@Test public void servletOutputStreamCommittedOnOutputStreamFlush() throws IOException { assertFalse(response.isCommitted()); response.getOutputStream().write('X'); assertFalse(response.isCommitted()); response.getOutputStream().flush(); assertTrue(response.isCommitted()); assertEquals(1, response.getContentAsByteArray().length); }
@Test public void servletOutputStreamCommittedWhenBufferSizeExceeded() throws IOException { assertFalse(response.isCommitted()); response.getOutputStream().write('X'); assertFalse(response.isCommitted()); int size = response.getBufferSize(); response.getOutputStream().write(new byte[size]); assertTrue(response.isCommitted()); assertEquals(size + 1, response.getContentAsByteArray().length); }
@Test public void servletWriterCommittedWhenBufferSizeExceeded() throws IOException { assertFalse(response.isCommitted()); response.getWriter().write("X"); assertFalse(response.isCommitted()); int size = response.getBufferSize(); char[] data = new char[size]; Arrays.fill(data, 'p'); response.getWriter().write(data); assertTrue(response.isCommitted()); assertEquals(size + 1, response.getContentAsByteArray().length); }
@Test public void testDoFilterNoCompression() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(HttpMethod.POST.name(), "http://localhost:8080/gzip"); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain filterChain = new MockFilterChain( servlet, new GzipServletFilter(), new OncePerRequestFilter() { @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { response.getOutputStream().write("Should be compressed".getBytes()); } }); filterChain.doFilter(request, response); String unzipped = new String(response.getContentAsByteArray()); Assert.assertEquals(unzipped, "Should be compressed"); }