Skip to content

Commit

Permalink
Issue #4711 - Reset trailers.
Browse files Browse the repository at this point in the history
Test code cleanup.
Added test for Response.reset().

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
  • Loading branch information
sbordet committed Mar 25, 2020
1 parent f4da976 commit 1a3f39e
Showing 1 changed file with 59 additions and 26 deletions.
Expand Up @@ -23,6 +23,7 @@
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
Expand All @@ -40,7 +41,6 @@
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
Expand All @@ -50,6 +50,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class HttpTrailersTest extends AbstractTest<TransportScenario>
{
Expand Down Expand Up @@ -80,13 +81,11 @@ private void testRequestTrailers(byte[] content) throws Exception
{
String trailerName = "Trailer";
String trailerValue = "value";
scenario.start(new AbstractHandler()
scenario.start(new EmptyServerHandler()
{
@Override
public void handle(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jettyRequest.setHandled(true);

// Read the content first.
ServletInputStream input = jettyRequest.getInputStream();
while (true)
Expand Down Expand Up @@ -119,13 +118,11 @@ public void handle(String target, Request jettyRequest, HttpServletRequest reque
public void testEmptyRequestTrailers(Transport transport) throws Exception
{
init(transport);
scenario.start(new AbstractHandler()
scenario.start(new EmptyServerHandler()
{
@Override
public void handle(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jettyRequest.setHandled(true);

// Read the content first.
ServletInputStream input = jettyRequest.getInputStream();
while (true)
Expand Down Expand Up @@ -166,16 +163,15 @@ public void testResponseTrailersWithContent(Transport transport) throws Exceptio

private void testResponseTrailers(byte[] content) throws Exception
{
final AtomicBoolean once = new AtomicBoolean(false);
AtomicBoolean once = new AtomicBoolean();
String trailerName = "Trailer";
String trailerValue = "value";
scenario.start(new AbstractHandler()
scenario.start(new EmptyServerHandler()
{
@Override
public void handle(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jettyRequest.setHandled(true);
Response jettyResponse = (Response)response;
Response jettyResponse = jettyRequest.getResponse();

if (once.compareAndSet(false, true))
{
Expand Down Expand Up @@ -211,7 +207,7 @@ public void handle(String target, Request jettyRequest, HttpServletRequest reque
assertEquals(HttpStatus.OK_200, response.getStatus());
assertNull(failure.get());

// subsequent requests should not have trailers
// Subsequent requests should not have trailers.
response = scenario.client.newRequest(scenario.newURI())
.onResponseSuccess(r ->
{
Expand All @@ -237,16 +233,13 @@ public void handle(String target, Request jettyRequest, HttpServletRequest reque
public void testEmptyResponseTrailers(Transport transport) throws Exception
{
init(transport);
scenario.start(new AbstractHandler()
scenario.start(new EmptyServerHandler()
{
@Override
public void handle(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response)
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response)
{
jettyRequest.setHandled(true);

HttpFields trailers = new HttpFields();

Response jettyResponse = (Response)response;
Response jettyResponse = jettyRequest.getResponse();
jettyResponse.setTrailers(() -> trailers);
}
});
Expand Down Expand Up @@ -282,17 +275,15 @@ public void testResponseTrailersWithLargeContent(Transport transport) throws Exc
String trailerName = "Trailer";
String trailerValue = "value";
init(transport);
scenario.start(new AbstractHandler()
scenario.start(new EmptyServerHandler()
{
@Override
public void handle(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
{
jettyRequest.setHandled(true);

HttpFields trailers = new HttpFields();
trailers.put(trailerName, trailerValue);

Response jettyResponse = (Response)response;
Response jettyResponse = jettyRequest.getResponse();
jettyResponse.setTrailers(() -> trailers);

// Write a large content
Expand Down Expand Up @@ -328,4 +319,46 @@ public void handle(String target, Request jettyRequest, HttpServletRequest reque
assertNotNull(trailers);
assertEquals(trailerValue, trailers.get(trailerName));
}

@ParameterizedTest
@ArgumentsSource(TransportProvider.class)
public void testResponseResetAlsoResetsTrailers(Transport transport) throws Exception
{
init(transport);
scenario.start(new EmptyServerHandler()
{
@Override
protected void service(String target, Request jettyRequest, HttpServletRequest request, HttpServletResponse response) throws IOException
{
Response jettyResponse = jettyRequest.getResponse();
HttpFields trailers = new HttpFields();
trailers.put("name", "value");
jettyResponse.setTrailers(() -> trailers);
// Fill some other response field.
response.setHeader("name", "value");
response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
response.getWriter();

// Reset the response.
response.reset();
// Must not throw because we have called
// getWriter() above, since we have reset().
response.getOutputStream();
}
});

CountDownLatch latch = new CountDownLatch(1);
scenario.client.newRequest(scenario.newURI())
.timeout(5, TimeUnit.SECONDS)
.send(result ->
{
HttpResponse response = (HttpResponse)result.getResponse();
assertEquals(HttpStatus.OK_200, response.getStatus());
assertNull(response.getTrailers());
assertNull(response.getHeaders().get("name"));
latch.countDown();
});

assertTrue(latch.await(5, TimeUnit.SECONDS));
}
}

0 comments on commit 1a3f39e

Please sign in to comment.