aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/test/java/com/yahoo/jdisc/http
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2021-04-21 08:42:04 +0200
committerMorten Tokle <mortent@verizonmedia.com>2021-04-21 08:42:04 +0200
commitf36017d3f2709e2fa3e555269a4116482129ee2e (patch)
treeee214beda7621d24717a00771e9129160e4a2a9b /container-core/src/test/java/com/yahoo/jdisc/http
parentfe1dfc345aa85b593ba536fa2607594751bb8d51 (diff)
Get request handler spec through delegate
Diffstat (limited to 'container-core/src/test/java/com/yahoo/jdisc/http')
-rw-r--r--container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/FilterTestCase.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/FilterTestCase.java b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/FilterTestCase.java
index e117ef7f723..01337dcc65d 100644
--- a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/FilterTestCase.java
+++ b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/FilterTestCase.java
@@ -3,6 +3,8 @@ package com.yahoo.jdisc.http.server.jetty;
import com.google.inject.AbstractModule;
import com.google.inject.util.Modules;
+import com.yahoo.container.jdisc.HttpRequestHandler;
+import com.yahoo.container.jdisc.RequestHandlerSpec;
import com.yahoo.container.logging.ConnectionLog;
import com.yahoo.container.logging.RequestLog;
import com.yahoo.jdisc.AbstractResource;
@@ -12,6 +14,8 @@ import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.handler.AbstractRequestHandler;
import com.yahoo.jdisc.handler.CompletionHandler;
import com.yahoo.jdisc.handler.ContentChannel;
+import com.yahoo.jdisc.handler.DelegatedRequestHandler;
+import com.yahoo.jdisc.handler.RequestHandler;
import com.yahoo.jdisc.handler.ResponseDispatch;
import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.jdisc.http.ConnectorConfig;
@@ -25,6 +29,8 @@ import com.yahoo.jdisc.http.filter.ResponseHeaderFilter;
import com.yahoo.jdisc.http.filter.chain.RequestFilterChain;
import com.yahoo.jdisc.http.filter.chain.ResponseFilterChain;
import com.yahoo.jdisc.http.guiceModules.ConnectorFactoryRegistryModule;
+import org.assertj.core.api.Assertions;
+import org.bouncycastle.cert.ocsp.Req;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -530,6 +536,36 @@ public class FilterTestCase {
assertThat(testDriver.close(), is(true));
}
+ @Test
+ public void requireThatRequestHandlerSpecIsAvailableThroughDelegate() throws IOException, InterruptedException {
+ MyRequestHandler requestHandler = new MyHttpRequestHandler();
+ MyDelegatedHandler delegateHandler1 = new MyDelegatedHandler(requestHandler);
+ MyDelegatedHandler delegateHandler2 = new MyDelegatedHandler(delegateHandler1);
+ requestHandlerSpecTest(delegateHandler2);
+ }
+
+ @Test
+ public void requireThatRequestHandlerSpecIsAvailable() throws IOException, InterruptedException {
+ MyRequestHandler requestHandler = new MyHttpRequestHandler();
+ requestHandlerSpecTest(requestHandler);
+ }
+
+ private void requestHandlerSpecTest(MyRequestHandler requestHandler) throws IOException, InterruptedException {
+ RequestFilter filter = mock(RequestFilter.class);
+ FilterBindings filterBindings = new FilterBindings.Builder()
+ .addRequestFilter("my-request-filter", filter)
+ .addRequestFilterBinding("my-request-filter", "http://*/filtered/*")
+ .build();
+
+ TestDriver testDriver = newDriver(requestHandler, filterBindings, new MetricConsumerMock(), true);
+
+ testDriver.client().get("/filtered/")
+ .expectStatusCode(is(Response.Status.OK));
+ ArgumentCaptor<HttpRequest> requestArgumentCaptor = ArgumentCaptor.forClass(HttpRequest.class);
+ verify(filter).filter(requestArgumentCaptor.capture(), any(ResponseHandler.class));
+ Assertions.assertThat(requestArgumentCaptor.getValue().context()).containsKey(RequestHandlerSpec.ATTRIBUTE_NAME);
+ }
+
private static TestDriver newDriver(MyRequestHandler requestHandler, FilterBindings filterBindings) {
return newDriver(requestHandler, filterBindings, new MetricConsumerMock(), false);
}
@@ -664,4 +700,33 @@ public class FilterTestCase {
channel.close(null);
}
}
+
+ private static class MyDelegatedHandler extends MyRequestHandler implements DelegatedRequestHandler {
+
+ private final RequestHandler delegate;
+
+ public MyDelegatedHandler(RequestHandler delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public RequestHandler getDelegate() {
+ return delegate;
+ }
+ @Override
+ public ContentChannel handleRequest(Request request, ResponseHandler handler) {
+ return delegate.handleRequest(request, handler);
+ }
+ @Override
+ public void handleTimeout(Request request, ResponseHandler handler) {
+ delegate.handleTimeout(request, handler);
+ }
+ }
+
+ private static class MyHttpRequestHandler extends MyRequestHandler implements HttpRequestHandler {
+ @Override
+ public RequestHandlerSpec requestHandlerSpec() {
+ return RequestHandlerSpec.DEFAULT_INSTANCE;
+ }
+ }
}