From 8c7ef12f01dd60879d2c766275994fded0dbae18 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Fri, 26 Feb 2021 15:26:32 +0100 Subject: Block until access log entry is available --- .../http/server/jetty/BlockingQueueRequestLog.java | 24 ++++++++++++++++++++++ .../jdisc/http/server/jetty/HttpServerTest.java | 10 +++------ 2 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/BlockingQueueRequestLog.java (limited to 'jdisc_http_service/src/test/java') diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/BlockingQueueRequestLog.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/BlockingQueueRequestLog.java new file mode 100644 index 00000000000..c1a2bea8ac4 --- /dev/null +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/BlockingQueueRequestLog.java @@ -0,0 +1,24 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.jdisc.http.server.jetty; + +import com.yahoo.container.logging.RequestLog; +import com.yahoo.container.logging.RequestLogEntry; + +import java.time.Duration; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.TimeUnit; + +/** + * @author bjorncs + */ +class BlockingQueueRequestLog implements RequestLog { + + private final BlockingQueue entries = new LinkedBlockingDeque<>(); + + @Override public void log(RequestLogEntry entry) { entries.offer(entry); } + + RequestLogEntry poll(Duration timeout) throws InterruptedException { + return entries.poll(timeout.toMillis(), TimeUnit.MILLISECONDS); + } +} diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java index 132e96eb4fd..622299a27d3 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java @@ -45,11 +45,9 @@ import org.eclipse.jetty.client.ProxyProtocolClientConnectionFactory.V2; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.server.handler.AbstractHandlerContainer; import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.hamcrest.Matchers; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import org.mockito.Mockito; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; @@ -66,10 +64,10 @@ import java.nio.file.Path; import java.security.KeyPair; import java.security.PrivateKey; import java.security.cert.X509Certificate; +import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -106,7 +104,6 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.anyOf; -import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; @@ -183,7 +180,7 @@ public class HttpServerTest { @Test public void requireThatAccessLogIsCalledForRequestRejectedByJetty() throws Exception { - InMemoryRequestLog requestLogMock = new InMemoryRequestLog(); + BlockingQueueRequestLog requestLogMock = new BlockingQueueRequestLog(); final TestDriver driver = TestDrivers.newConfiguredInstance( mockRequestHandler(), new ServerConfig.Builder(), @@ -192,8 +189,7 @@ public class HttpServerTest { driver.client().get("/status.html") .expectStatusCode(is(REQUEST_URI_TOO_LONG)); assertThat(driver.close(), is(true)); - assertThat(requestLogMock.entries().size(), equalTo(1)); - RequestLogEntry entry = requestLogMock.entries().get(0); + RequestLogEntry entry = requestLogMock.poll(Duration.ofSeconds(30)); assertEquals(414, entry.statusCode().getAsInt()); } -- cgit v1.2.3