Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java')
-rw-r--r--jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java92
1 files changed, 91 insertions, 1 deletions
diff --git a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java
index c2334eafac..1dcd6066d0 100644
--- a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java
+++ b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java
@@ -18,19 +18,32 @@
package org.eclipse.jetty.http2.client.http;
+import java.nio.ByteBuffer;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.ContentResponse;
+import org.eclipse.jetty.http.HttpFields;
import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.http.HttpVersion;
+import org.eclipse.jetty.http.MetaData;
+import org.eclipse.jetty.http2.api.Stream;
+import org.eclipse.jetty.http2.api.server.ServerSessionListener;
import org.eclipse.jetty.http2.client.HTTP2Client;
+import org.eclipse.jetty.http2.frames.DataFrame;
+import org.eclipse.jetty.http2.frames.HeadersFrame;
+import org.eclipse.jetty.http2.frames.ResetFrame;
+import org.eclipse.jetty.util.Callback;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
-public class HttpClientTransportOverHTTP2Test
+public class HttpClientTransportOverHTTP2Test extends AbstractTest
{
@Test
public void testPropertiesAreForwarded() throws Exception
@@ -56,6 +69,83 @@ public class HttpClientTransportOverHTTP2Test
Assert.assertTrue(http2Client.isStopped());
}
+ @Test
+ public void testRequestAbortSendsResetFrame() throws Exception
+ {
+ CountDownLatch resetLatch = new CountDownLatch(1);
+ start(new ServerSessionListener.Adapter()
+ {
+ @Override
+ public Stream.Listener onNewStream(Stream stream, HeadersFrame frame)
+ {
+ return new Stream.Listener.Adapter()
+ {
+ @Override
+ public void onReset(Stream stream, ResetFrame frame)
+ {
+ resetLatch.countDown();
+ }
+ };
+ }
+ });
+
+ try
+ {
+ client.newRequest("localhost", connector.getLocalPort())
+ .onRequestCommit(request -> request.abort(new Exception("explicitly_aborted_by_test")))
+ .send();
+ Assert.fail();
+ }
+ catch (ExecutionException x)
+ {
+ Assert.assertTrue(resetLatch.await(5, TimeUnit.SECONDS));
+ }
+ }
+
+ @Test
+ public void testResponseAbortSendsResetFrame() throws Exception
+ {
+ CountDownLatch resetLatch = new CountDownLatch(1);
+ start(new ServerSessionListener.Adapter()
+ {
+ @Override
+ public Stream.Listener onNewStream(Stream stream, HeadersFrame frame)
+ {
+ MetaData.Response metaData = new MetaData.Response(HttpVersion.HTTP_2, HttpStatus.OK_200, new HttpFields());
+ stream.headers(new HeadersFrame(stream.getId(), metaData, null, false), new Callback()
+ {
+ @Override
+ public void succeeded()
+ {
+ ByteBuffer data = ByteBuffer.allocate(1024);
+ stream.data(new DataFrame(stream.getId(), data, false), NOOP);
+ }
+ });
+
+ return new Stream.Listener.Adapter()
+ {
+ @Override
+ public void onReset(Stream stream, ResetFrame frame)
+ {
+ resetLatch.countDown();
+ }
+ };
+ }
+ });
+
+ try
+ {
+ client.newRequest("localhost", connector.getLocalPort())
+ .onResponseContent((response, buffer) -> response.abort(new Exception("explicitly_aborted_by_test")))
+ .send();
+ Assert.fail();
+ }
+ catch (ExecutionException x)
+ {
+ Assert.assertTrue(resetLatch.await(5, TimeUnit.SECONDS));
+ }
+ }
+
@Ignore
@Test
public void testExternalServer() throws Exception

Back to the top