vy commented on code in PR #1981:
URL: https://github.com/apache/logging-log4j2/pull/1981#discussion_r1401079821
##########
log4j-core-test/src/test/java/org/apache/logging/log4j/core/filter/HttpThreadContextMapFilterTest.java:
##########
@@ -16,183 +16,98 @@
*/
package org.apache.logging.log4j.core.filter;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.ok;
+import static org.assertj.core.api.Assertions.assertThat;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.util.Base64;
-import java.util.Enumeration;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.logging.log4j.Logger;
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.common.FileSource;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.Parameters;
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+import com.github.tomakehurst.wiremock.http.Request;
+import com.github.tomakehurst.wiremock.http.Response;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.test.appender.ListAppender;
-import org.eclipse.jetty.http.HttpHeader;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.Assert;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.spi.ExtendedLogger;
import org.junit.jupiter.api.Test;
/**
- * Unit test for simple App.
+ * Tests {@link ThreadContextMapFilter} using a WireMock stub.
*/
-public class HttpThreadContextMapFilterTest implements
MutableThreadContextMapFilter.FilterConfigUpdateListener {
+public class HttpThreadContextMapFilterTest {
- private static final String BASIC = "Basic ";
- private static final String expectedCreds = "log4j:log4j";
- private static Server server;
- private static final Base64.Decoder decoder = Base64.getDecoder();
- private static int port;
- static final String CONFIG = "log4j2-mutableFilter.xml";
- static LoggerContext loggerContext = null;
- static final File targetFile = new
File("target/test-classes/testConfig.json");
- static final Path target = targetFile.toPath();
- CountDownLatch updated = new CountDownLatch(1);
+ @Test
+ @LoggerContextSource("HttpThreadContextMapFilterTest.xml")
Review Comment:
Fixed in 4838ceba9a098b78c51d7fe16bcd4e208fda85c6.
##########
log4j-core-test/src/test/java/org/apache/logging/log4j/core/filter/HttpThreadContextMapFilterTest.java:
##########
@@ -16,183 +16,98 @@
*/
package org.apache.logging.log4j.core.filter;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.ok;
+import static org.assertj.core.api.Assertions.assertThat;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.util.Base64;
-import java.util.Enumeration;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.logging.log4j.Logger;
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.github.tomakehurst.wiremock.common.FileSource;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.Parameters;
+import com.github.tomakehurst.wiremock.extension.ResponseTransformer;
+import com.github.tomakehurst.wiremock.http.Request;
+import com.github.tomakehurst.wiremock.http.Response;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
-import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.test.appender.ListAppender;
-import org.eclipse.jetty.http.HttpHeader;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.servlet.DefaultServlet;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.Assert;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.Named;
+import org.apache.logging.log4j.spi.ExtendedLogger;
import org.junit.jupiter.api.Test;
/**
- * Unit test for simple App.
+ * Tests {@link ThreadContextMapFilter} using a WireMock stub.
*/
-public class HttpThreadContextMapFilterTest implements
MutableThreadContextMapFilter.FilterConfigUpdateListener {
+public class HttpThreadContextMapFilterTest {
- private static final String BASIC = "Basic ";
- private static final String expectedCreds = "log4j:log4j";
- private static Server server;
- private static final Base64.Decoder decoder = Base64.getDecoder();
- private static int port;
- static final String CONFIG = "log4j2-mutableFilter.xml";
- static LoggerContext loggerContext = null;
- static final File targetFile = new
File("target/test-classes/testConfig.json");
- static final Path target = targetFile.toPath();
- CountDownLatch updated = new CountDownLatch(1);
+ @Test
+ @LoggerContextSource("HttpThreadContextMapFilterTest.xml")
+ public void wireMock_logs_should_be_filtered_on_MDC(
+ final LoggerContext loggerContext, @Named("List") final
ListAppender appender) throws Exception {
- @BeforeAll
- public static void startServer() throws Exception {
- try {
- server = new Server(0);
- final ServletContextHandler context = new ServletContextHandler();
- final ServletHolder defaultServ = new ServletHolder("default",
TestServlet.class);
- defaultServ.setInitParameter("resourceBase",
System.getProperty("user.dir"));
- defaultServ.setInitParameter("dirAllowed", "true");
- context.addServlet(defaultServ, "/");
- server.setHandler(context);
+ // Create the logger
+ final ExtendedLogger logger =
loggerContext.getLogger(HttpThreadContextMapFilterTest.class);
+
+ // Create a response transformer; the only way to dynamically
construct WireMock responses.
+ // We need a dynamic response generation, since there we will issue
MDC changes and log statements.
+ final ResponseTransformer wireMockResponseTransformer = new
ResponseTransformer() {
- // Start Server
- server.start();
- port = ((ServerConnector)
server.getConnectors()[0]).getLocalPort();
- try {
- Files.deleteIfExists(target);
- } catch (IOException ioe) {
- // Ignore this.
+ private final AtomicInteger invocationCounter = new
AtomicInteger();
+
+ @Override
+ public Response transform(
+ final Request request,
+ final Response response,
+ final FileSource files,
+ final Parameters parameters) {
+ final int invocationCount =
invocationCounter.getAndIncrement();
+ ThreadContext.put("invocationCount", "" + invocationCount);
+ logger.info("transforming request #{}", invocationCount);
+ return response;
}
- } catch (Throwable ex) {
- ex.printStackTrace();
- throw ex;
- }
- }
- @AfterAll
- public static void stopServer() throws Exception {
- server.stop();
- }
+ @Override
+ public String getName() {
+ return "mdc-writer";
+ }
+ };
- @AfterEach
- public void after() {
- try {
- Files.deleteIfExists(target);
- } catch (IOException ioe) {
- // Ignore this.
- }
- loggerContext.stop();
- loggerContext = null;
- }
+ // Create the WireMock server extended using the response transformer.
+ final WireMockServer wireMockServer =
+ new
WireMockServer(WireMockConfiguration.wireMockConfig().extensions(wireMockResponseTransformer));
+
wireMockServer.stubFor(get("/").willReturn(ok().withTransformers(wireMockResponseTransformer.getName())));
Review Comment:
Fixed in 4838ceba9a098b78c51d7fe16bcd4e208fda85c6.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]