test async gzip close
Signed-off-by: Greg Wilkins <gregw@webtide.com>
This commit is contained in:
parent
f68ed50405
commit
1c5a53a512
|
@ -30,13 +30,16 @@ import java.util.EnumSet;
|
|||
import java.util.Enumeration;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.FilterConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.WriteListener;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
@ -77,6 +80,8 @@ public class GzipHandlerTest
|
|||
"Aliquam purus mauris, consectetur nec convallis lacinia, porta sed ante. Suspendisse " +
|
||||
"et cursus magna. Donec orci enim, molestie a lobortis eu, imperdiet vitae neque.";
|
||||
|
||||
private static final byte[] __bytes = __content.getBytes(StandardCharsets.UTF_8);
|
||||
|
||||
private static final String __micro = __content.substring(0, 10);
|
||||
|
||||
private static final String __contentETag = String.format("W/\"%x\"", __content.hashCode());
|
||||
|
@ -110,6 +115,7 @@ public class GzipHandlerTest
|
|||
servlets.addServletWithMapping(IncludeServlet.class, "/include");
|
||||
servlets.addServletWithMapping(EchoServlet.class, "/echo/*");
|
||||
servlets.addServletWithMapping(DumpServlet.class, "/dump/*");
|
||||
servlets.addServletWithMapping(AsyncServlet.class, "/async/*");
|
||||
servlets.addFilterWithMapping(CheckFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
|
||||
_server.start();
|
||||
|
@ -175,6 +181,46 @@ public class GzipHandlerTest
|
|||
}
|
||||
}
|
||||
|
||||
public static class AsyncServlet extends HttpServlet
|
||||
{
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
String writes = req.getParameter("writes");
|
||||
final AsyncContext context = req.startAsync();
|
||||
final ServletOutputStream out = response.getOutputStream();
|
||||
|
||||
out.setWriteListener(new WriteListener()
|
||||
{
|
||||
int count = writes == null ? 1 : Integer.valueOf(writes);
|
||||
{
|
||||
response.setContentLength(count * __bytes.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWritePossible() throws IOException
|
||||
{
|
||||
while(out.isReady())
|
||||
{
|
||||
if (count-- == 0)
|
||||
{
|
||||
out.close();
|
||||
break;
|
||||
}
|
||||
|
||||
out.write(__bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t)
|
||||
{
|
||||
t.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public static class EchoServlet extends HttpServlet
|
||||
{
|
||||
@Override
|
||||
|
@ -259,7 +305,7 @@ public class GzipHandlerTest
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testGzipHandler() throws Exception
|
||||
public void testBlockingResponse() throws Exception
|
||||
{
|
||||
// generated and parsed test
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
|
@ -285,6 +331,62 @@ public class GzipHandlerTest
|
|||
assertEquals(__content, testOut.toString("UTF8"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAsyncResponse() throws Exception
|
||||
{
|
||||
// generated and parsed test
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
request.setMethod("GET");
|
||||
request.setURI("/ctx/async/info?writes=1");
|
||||
request.setVersion("HTTP/1.0");
|
||||
request.setHeader("Host", "tester");
|
||||
request.setHeader("accept-encoding", "gzip");
|
||||
|
||||
response = HttpTester.parseResponse(_connector.getResponse(request.generate()));
|
||||
|
||||
assertThat(response.getStatus(), is(200));
|
||||
assertThat(response.get("Content-Encoding"), Matchers.equalToIgnoringCase("gzip"));
|
||||
assertThat(response.getCSV("Vary", false), Matchers.contains("Accept-Encoding"));
|
||||
|
||||
InputStream testIn = new GZIPInputStream(new ByteArrayInputStream(response.getContentBytes()));
|
||||
ByteArrayOutputStream testOut = new ByteArrayOutputStream();
|
||||
IO.copy(testIn, testOut);
|
||||
|
||||
assertEquals(__content, testOut.toString("UTF8"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAsyncLargeResponse() throws Exception
|
||||
{
|
||||
int writes = 100;
|
||||
// generated and parsed test
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
request.setMethod("GET");
|
||||
request.setURI("/ctx/async/info?writes=" + writes);
|
||||
request.setVersion("HTTP/1.0");
|
||||
request.setHeader("Host", "tester");
|
||||
request.setHeader("accept-encoding", "gzip");
|
||||
|
||||
response = HttpTester.parseResponse(_connector.getResponse(request.generate()));
|
||||
|
||||
assertThat(response.getStatus(), is(200));
|
||||
assertThat(response.get("Content-Encoding"), Matchers.equalToIgnoringCase("gzip"));
|
||||
assertThat(response.getCSV("Vary", false), Matchers.contains("Accept-Encoding"));
|
||||
|
||||
InputStream testIn = new GZIPInputStream(new ByteArrayInputStream(response.getContentBytes()));
|
||||
ByteArrayOutputStream testOut = new ByteArrayOutputStream();
|
||||
IO.copy(testIn, testOut);
|
||||
|
||||
byte[] bytes = testOut.toByteArray();
|
||||
|
||||
for (int i = 0; i < writes; i++)
|
||||
assertEquals(__content, new String(Arrays.copyOfRange(bytes,i * __bytes.length, (i + 1) * __bytes.length), StandardCharsets.UTF_8), "chunk " + i);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGzipHandlerWithMultipleAcceptEncodingHeaders() throws Exception
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue