From 1903505a3f8d871295b5b2e4e3b7bb3c745e5341 Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Tue, 12 Nov 2019 14:13:36 -0500 Subject: [PATCH] Log exceptions thrown by HttpHandlers in repository integration tests (#48991) This commit changes the ESMockAPIBasedRepositoryIntegTestCase so that HttpHandler are now wrapped in order to log any exceptions that could be thrown when executing the server side logic in repository integration tests. --- ...ESMockAPIBasedRepositoryIntegTestCase.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java b/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java index 6ce1e45ef2b..dc99cab8a28 100644 --- a/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/repositories/blobstore/ESMockAPIBasedRepositoryIntegTestCase.java @@ -22,6 +22,8 @@ import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import org.apache.http.HttpStatus; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.message.ParameterizedMessage; import org.elasticsearch.action.admin.indices.forcemerge.ForceMergeResponse; import org.elasticsearch.cluster.metadata.IndexMetaData; import org.elasticsearch.common.Strings; @@ -67,13 +69,7 @@ public abstract class ESMockAPIBasedRepositoryIntegTestCase extends ESBlobStoreR @Before public void setUpHttpServer() { handlers = createHttpHandlers(); - handlers.forEach((c, h) -> { - HttpHandler handler = h; - if (randomBoolean()) { - handler = createErroneousHttpHandler(handler); - } - httpServer.createContext(c, handler); - }); + handlers.forEach((c, h) -> httpServer.createContext(c, wrap(randomBoolean() ? createErroneousHttpHandler(h) : h, logger))); } @AfterClass @@ -188,4 +184,19 @@ public abstract class ESMockAPIBasedRepositoryIntegTestCase extends ESBlobStoreR return true; } } + + /** + * Wrap a {@link HttpHandler} to log any thrown exception using the given {@link Logger}. + */ + private static HttpHandler wrap(final HttpHandler handler, final Logger logger) { + return exchange -> { + try { + handler.handle(exchange); + } catch (final Exception e) { + logger.error(() -> new ParameterizedMessage("Exception when handling request {} {} {}", + exchange.getRemoteAddress(), exchange.getRequestMethod(), exchange.getRequestURI()), e); + throw e; + } + }; + } }