diff options
Diffstat (limited to 'container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java')
-rw-r--r-- | container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java index 39b6dcdc6d5..8639680e335 100644 --- a/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java +++ b/container-core/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java @@ -11,6 +11,7 @@ import com.yahoo.jdisc.References; import com.yahoo.jdisc.Request; import com.yahoo.jdisc.Response; import com.yahoo.jdisc.application.BindingSetSelector; +import com.yahoo.jdisc.application.MetricConsumer; import com.yahoo.jdisc.handler.AbstractRequestHandler; import com.yahoo.jdisc.handler.CompletionHandler; import com.yahoo.jdisc.handler.ContentChannel; @@ -38,7 +39,6 @@ import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.core5.http.ConnectionClosedException; import org.apache.hc.core5.http.ContentType; import org.assertj.core.api.Assertions; -import org.eclipse.jetty.server.handler.AbstractHandlerContainer; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -65,6 +65,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; +import static com.yahoo.jdisc.Response.Status.BAD_REQUEST; import static com.yahoo.jdisc.Response.Status.GATEWAY_TIMEOUT; import static com.yahoo.jdisc.Response.Status.INTERNAL_SERVER_ERROR; import static com.yahoo.jdisc.Response.Status.NOT_FOUND; @@ -161,6 +162,26 @@ public class HttpServerTest { } @Test + void requireThatMultipleHostHeadersReturns400() throws Exception { + var metricConsumer = new MetricConsumerMock(); + JettyTestDriver driver = JettyTestDriver.newConfiguredInstance( + mockRequestHandler(), + new ServerConfig.Builder(), + new ConnectorConfig.Builder(), + binder -> binder.bind(MetricConsumer.class).toInstance(metricConsumer.mockitoMock())); + driver.client() + .newGet("/status.html").addHeader("Host", "localhost").addHeader("Host", "vespa.ai").execute() + .expectStatusCode(is(BAD_REQUEST)).expectContent(containsString("Bad Host: multiple headers")); + assertTrue(driver.close()); + var aggregator = ResponseMetricAggregator.getBean(driver.server()); + var metrics = aggregator.takeStatistics(); + long badRequestResponses = metrics.stream() + .filter(m -> m.dimensions.statusCode == 400 && m.dimensions.method.equals("GET")) + .count(); + assertEquals(1, badRequestResponses, metrics::toString); + } + + @Test void requireThatAccessLogIsCalledForRequestRejectedByJetty() throws Exception { BlockingQueueRequestLog requestLogMock = new BlockingQueueRequestLog(); final JettyTestDriver driver = JettyTestDriver.newConfiguredInstance( @@ -584,11 +605,9 @@ public class HttpServerTest { void requireThatResponseStatsAreCollected() throws Exception { RequestTypeHandler handler = new RequestTypeHandler(); JettyTestDriver driver = JettyTestDriver.newInstance(handler); - HttpResponseStatisticsCollector statisticsCollector = ((AbstractHandlerContainer) driver.server().server().getHandler()) - .getChildHandlerByClass(HttpResponseStatisticsCollector.class); - + var statisticsCollector = ResponseMetricAggregator.getBean(driver.server());; { - List<HttpResponseStatisticsCollector.StatisticsEntry> stats = statisticsCollector.takeStatistics(); + List<ResponseMetricAggregator.StatisticsEntry> stats = statisticsCollector.takeStatistics(); assertEquals(0, stats.size()); } @@ -622,9 +641,9 @@ public class HttpServerTest { assertTrue(driver.close()); } - private HttpResponseStatisticsCollector.StatisticsEntry waitForStatistics(HttpResponseStatisticsCollector + private ResponseMetricAggregator.StatisticsEntry waitForStatistics(ResponseMetricAggregator statisticsCollector) { - List<HttpResponseStatisticsCollector.StatisticsEntry> entries = Collections.emptyList(); + List<ResponseMetricAggregator.StatisticsEntry> entries = Collections.emptyList(); int tries = 0; while (entries.isEmpty() && tries < 10000) { entries = statisticsCollector.takeStatistics(); |