Issue #4711 - Reset trailers.
Test code cleanup. Added test for Response.reset(). Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
parent
f4da9760fd
commit
1a3f39eef1
|
@ -23,6 +23,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
@ -40,7 +41,6 @@ import org.eclipse.jetty.http.HttpMethod;
|
||||||
import org.eclipse.jetty.http.HttpStatus;
|
import org.eclipse.jetty.http.HttpStatus;
|
||||||
import org.eclipse.jetty.server.Request;
|
import org.eclipse.jetty.server.Request;
|
||||||
import org.eclipse.jetty.server.Response;
|
import org.eclipse.jetty.server.Response;
|
||||||
import org.eclipse.jetty.server.handler.AbstractHandler;
|
|
||||||
import org.junit.jupiter.api.Assumptions;
|
import org.junit.jupiter.api.Assumptions;
|
||||||
import org.junit.jupiter.params.ParameterizedTest;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
import org.junit.jupiter.params.provider.ArgumentsSource;
|
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||||
|
@ -50,6 +50,7 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
{
|
{
|
||||||
|
@ -80,13 +81,11 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
{
|
{
|
||||||
String trailerName = "Trailer";
|
String trailerName = "Trailer";
|
||||||
String trailerValue = "value";
|
String trailerValue = "value";
|
||||||
scenario.start(new AbstractHandler()
|
scenario.start(new EmptyServerHandler()
|
||||||
{
|
{
|
||||||
@Override
|
@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.
|
// Read the content first.
|
||||||
ServletInputStream input = jettyRequest.getInputStream();
|
ServletInputStream input = jettyRequest.getInputStream();
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -119,13 +118,11 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
public void testEmptyRequestTrailers(Transport transport) throws Exception
|
public void testEmptyRequestTrailers(Transport transport) throws Exception
|
||||||
{
|
{
|
||||||
init(transport);
|
init(transport);
|
||||||
scenario.start(new AbstractHandler()
|
scenario.start(new EmptyServerHandler()
|
||||||
{
|
{
|
||||||
@Override
|
@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.
|
// Read the content first.
|
||||||
ServletInputStream input = jettyRequest.getInputStream();
|
ServletInputStream input = jettyRequest.getInputStream();
|
||||||
while (true)
|
while (true)
|
||||||
|
@ -166,16 +163,15 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
|
|
||||||
private void testResponseTrailers(byte[] content) throws Exception
|
private void testResponseTrailers(byte[] content) throws Exception
|
||||||
{
|
{
|
||||||
final AtomicBoolean once = new AtomicBoolean(false);
|
AtomicBoolean once = new AtomicBoolean();
|
||||||
String trailerName = "Trailer";
|
String trailerName = "Trailer";
|
||||||
String trailerValue = "value";
|
String trailerValue = "value";
|
||||||
scenario.start(new AbstractHandler()
|
scenario.start(new EmptyServerHandler()
|
||||||
{
|
{
|
||||||
@Override
|
@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 = jettyRequest.getResponse();
|
||||||
Response jettyResponse = (Response)response;
|
|
||||||
|
|
||||||
if (once.compareAndSet(false, true))
|
if (once.compareAndSet(false, true))
|
||||||
{
|
{
|
||||||
|
@ -211,7 +207,7 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
assertEquals(HttpStatus.OK_200, response.getStatus());
|
assertEquals(HttpStatus.OK_200, response.getStatus());
|
||||||
assertNull(failure.get());
|
assertNull(failure.get());
|
||||||
|
|
||||||
// subsequent requests should not have trailers
|
// Subsequent requests should not have trailers.
|
||||||
response = scenario.client.newRequest(scenario.newURI())
|
response = scenario.client.newRequest(scenario.newURI())
|
||||||
.onResponseSuccess(r ->
|
.onResponseSuccess(r ->
|
||||||
{
|
{
|
||||||
|
@ -237,16 +233,13 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
public void testEmptyResponseTrailers(Transport transport) throws Exception
|
public void testEmptyResponseTrailers(Transport transport) throws Exception
|
||||||
{
|
{
|
||||||
init(transport);
|
init(transport);
|
||||||
scenario.start(new AbstractHandler()
|
scenario.start(new EmptyServerHandler()
|
||||||
{
|
{
|
||||||
@Override
|
@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();
|
HttpFields trailers = new HttpFields();
|
||||||
|
Response jettyResponse = jettyRequest.getResponse();
|
||||||
Response jettyResponse = (Response)response;
|
|
||||||
jettyResponse.setTrailers(() -> trailers);
|
jettyResponse.setTrailers(() -> trailers);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -282,17 +275,15 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
String trailerName = "Trailer";
|
String trailerName = "Trailer";
|
||||||
String trailerValue = "value";
|
String trailerValue = "value";
|
||||||
init(transport);
|
init(transport);
|
||||||
scenario.start(new AbstractHandler()
|
scenario.start(new EmptyServerHandler()
|
||||||
{
|
{
|
||||||
@Override
|
@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();
|
HttpFields trailers = new HttpFields();
|
||||||
trailers.put(trailerName, trailerValue);
|
trailers.put(trailerName, trailerValue);
|
||||||
|
|
||||||
Response jettyResponse = (Response)response;
|
Response jettyResponse = jettyRequest.getResponse();
|
||||||
jettyResponse.setTrailers(() -> trailers);
|
jettyResponse.setTrailers(() -> trailers);
|
||||||
|
|
||||||
// Write a large content
|
// Write a large content
|
||||||
|
@ -328,4 +319,46 @@ public class HttpTrailersTest extends AbstractTest<TransportScenario>
|
||||||
assertNotNull(trailers);
|
assertNotNull(trailers);
|
||||||
assertEquals(trailerValue, trailers.get(trailerName));
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue