Skip to content

Commit

Permalink
Issue #721 - Adding testcase for multi-line response values
Browse files Browse the repository at this point in the history
  • Loading branch information
joakime committed Jul 13, 2016
1 parent b28064c commit e4249fd
Showing 1 changed file with 37 additions and 6 deletions.
Expand Up @@ -33,15 +33,14 @@
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.server.LocalConnector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.BufferUtil;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class ResponseHeadersTest
{
/** Pretend to be a WebSocket Upgrade (not real) */
@SuppressWarnings("serial")
private static class SimulateUpgradeServlet extends HttpServlet
public static class SimulateUpgradeServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
Expand All @@ -54,13 +53,27 @@ protected void doGet(HttpServletRequest req, HttpServletResponse response) throw
}
}

public static class MultilineResponseValueServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
{
// The bad use-case
response.setHeader("X-example", req.getPathInfo());

// The correct use
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().println("Got request uri - " + req.getRequestURI());
}
}

private static Server server;
private static LocalConnector connector;

@BeforeClass
public static void startServer() throws Exception
{
// Configure Server
server = new Server();
connector = new LocalConnector(server);
server.addConnector(connector);
Expand All @@ -69,10 +82,9 @@ public static void startServer() throws Exception
context.setContextPath("/");
server.setHandler(context);

// Serve capture servlet
context.addServlet(new ServletHolder(new SimulateUpgradeServlet()),"/ws/*");
context.addServlet(new ServletHolder(new MultilineResponseValueServlet()),"/multiline/*");

// Start Server
server.start();
}

Expand Down Expand Up @@ -106,4 +118,23 @@ public void testResponseWebSocketHeaderFormat() throws Exception
assertThat("Response Header Upgrade",response.get("Upgrade"),is("WebSocket"));
assertThat("Response Header Connection",response.get("Connection"),is("Upgrade"));
}

@Test
public void testMultilineResponseHeaderValue() throws Exception
{
HttpTester.Request request = new HttpTester.Request();
request.setMethod("GET");
request.setURI("/multiline/%0A%20Content-Type%3A%20image/png%0A%20Content-Length%3A%208%0A%20%0A%20yuck<!--");
request.setVersion(HttpVersion.HTTP_1_1);
request.setHeader("Connection", "close");
request.setHeader("Host", "test");

ByteBuffer responseBuffer = connector.getResponse(request.generate());
System.err.println(BufferUtil.toUTF8String(responseBuffer));
HttpTester.Response response = HttpTester.parseResponse(responseBuffer);

// Now test for properly formatted HTTP Response Headers.
assertThat("Response Code",response.getStatus(),is(200));
assertThat("Response Header Content-Type",response.get("Content-Type"),is("text/plain;charset=UTF-8"));
}
}

0 comments on commit e4249fd

Please sign in to comment.