This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 6e20963d91d3f7fb3efdda1b54de783bff49c88b
Author: Piotr P. Karwasz <piotr.git...@karwasz.org>
AuthorDate: Mon Jun 20 21:49:57 2022 +0200

    Marks tests that reinitialize the ThreadContextFactory
    
    A JUnit5 extension is provided to restore the default
    ThreadContextFactory after the test finishes.
---
 .../{test => }/ThreadContextUtilityClass.java      | 16 ++++++++++----
 ...ntextMap.java => InitializesThreadContext.java} | 21 +++++++++---------
 .../log4j/test/junit/ThreadContextInitializer.java | 25 ++++++++++++++++++++++
 .../test/junit/ThreadContextMapExtension.java      |  7 +++---
 .../log4j/test/junit/UsingThreadContextMap.java    |  3 +++
 .../logging/log4j/NoopThreadContextTest.java       | 13 +++++------
 .../log4j/ThreadContextInheritanceTest.java        | 10 ++++++---
 .../logging/log4j/test/ThreadContextTest.java      |  1 +
 8 files changed, 66 insertions(+), 30 deletions(-)

diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextUtilityClass.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/ThreadContextUtilityClass.java
similarity index 90%
rename from 
log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextUtilityClass.java
rename to 
log4j-api-test/src/main/java/org/apache/logging/log4j/ThreadContextUtilityClass.java
index 6db64a048f..92dc394309 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextUtilityClass.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/ThreadContextUtilityClass.java
@@ -14,14 +14,18 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.test;
+package org.apache.logging.log4j;
 
-import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.util.Timer;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Map;
 
-import static org.junit.jupiter.api.Assertions.*;
+import org.apache.logging.log4j.util.Timer;
 
 public class ThreadContextUtilityClass {
 
@@ -112,4 +116,8 @@ public class ThreadContextUtilityClass {
         ThreadContext.put("testKey", "testValue");
         assertEquals("testValue", ThreadContext.get("testKey"));
     }
+
+    public static void reset() {
+        ThreadContext.init();
+    }
 }
diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/InitializesThreadContext.java
similarity index 72%
copy from 
log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
copy to 
log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/InitializesThreadContext.java
index ab1bddd7cf..493d6b9bf5 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/InitializesThreadContext.java
@@ -17,9 +17,6 @@
 
 package org.apache.logging.log4j.test.junit;
 
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.ReadsSystemProperty;
-
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Inherited;
@@ -27,17 +24,19 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.logging.log4j.ThreadContext;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+
 /**
- * Marks a test class as using {@link 
org.apache.logging.log4j.spi.ThreadContextMap} APIs. This will automatically 
clear and
- * restore the thread context map (MDC) for each test invocation.
- *
- * @since 2.14.0
+ * Marks a test class that initializes the {@link ThreadContext} class;
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
+@Target(ElementType.TYPE)
 @Documented
 @Inherited
-@ExtendWith(ThreadContextMapExtension.class)
-@ReadsSystemProperty
-public @interface UsingThreadContextMap {
+@ExtendWith(ThreadContextInitializer.class)
+@ResourceLock(value = Resources.THREAD_CONTEXT, mode = 
ResourceAccessMode.READ_WRITE)
+public @interface InitializesThreadContext {
 }
diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextInitializer.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextInitializer.java
new file mode 100644
index 0000000000..ed246d4386
--- /dev/null
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextInitializer.java
@@ -0,0 +1,25 @@
+package org.apache.logging.log4j.test.junit;
+
+import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.ThreadContextUtilityClass;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import 
org.junit.jupiter.api.extension.ExtensionContext.Store.CloseableResource;
+
+class ThreadContextInitializer implements BeforeAllCallback {
+
+    @Override
+    public void beforeAll(ExtensionContext context) throws Exception {
+        ThreadContextUtilityClass.reset();
+        // We use `CloseableResource` instead of `afterAll` to reset the 
ThreadContextFactory
+        // *after* the `@SetSystemProperty` extension has restored the 
properties
+        ExtensionContextAnchor.setAttribute(ThreadContext.class, new 
CloseableResource() {
+            @Override
+            public void close() throws Throwable {
+                ThreadContextUtilityClass.reset();
+            }
+
+        }, context);
+    }
+
+}
diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextMapExtension.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextMapExtension.java
index 35089acf02..cb68eb295d 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextMapExtension.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ThreadContextMapExtension.java
@@ -17,12 +17,11 @@
 
 package org.apache.logging.log4j.test.junit;
 
+import java.util.Map;
+
 import org.apache.logging.log4j.ThreadContext;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
-
-import java.util.Map;
 
 class ThreadContextMapExtension implements BeforeEachCallback {
     private static class ThreadContextMapStore implements 
ExtensionContext.Store.CloseableResource {
@@ -42,7 +41,7 @@ class ThreadContextMapExtension implements BeforeEachCallback 
{
 
     @Override
     public void beforeEach(final ExtensionContext context) throws Exception {
-        context.getStore(Namespace.create(ThreadContext.class, 
context.getRequiredTestClass(), context.getRequiredTestInstance()))
+        context.getStore(ExtensionContextAnchor.LOG4J2_NAMESPACE)
                 .getOrComputeIfAbsent(ThreadContextMapStore.class);
     }
 }
diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
index ab1bddd7cf..41ba316e9a 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/UsingThreadContextMap.java
@@ -18,6 +18,8 @@
 package org.apache.logging.log4j.test.junit;
 
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
 import org.junitpioneer.jupiter.ReadsSystemProperty;
 
 import java.lang.annotation.Documented;
@@ -39,5 +41,6 @@ import java.lang.annotation.Target;
 @Inherited
 @ExtendWith(ThreadContextMapExtension.class)
 @ReadsSystemProperty
+@ResourceLock(value = Resources.THREAD_CONTEXT, mode = ResourceAccessMode.READ)
 public @interface UsingThreadContextMap {
 }
diff --git 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
index 7f4455cbd5..d3aeaad755 100644
--- 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
+++ 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
@@ -16,24 +16,21 @@
  */
 package org.apache.logging.log4j;
 
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+import org.apache.logging.log4j.test.junit.InitializesThreadContext;
 import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junitpioneer.jupiter.SetSystemProperty;
 
-import static org.junit.jupiter.api.Assertions.assertNull;
-
 /**
  * Tests {@link ThreadContext}.
  */
-@UsingThreadContextMap
 @SetSystemProperty(key = "disableThreadContext", value = "true")
 @SetSystemProperty(key = "disableThreadContextMap", value = "true")
+@InitializesThreadContext
+@UsingThreadContextMap
 public class NoopThreadContextTest {
-    @BeforeEach
-    void setUp() {
-        ThreadContext.init();
-    }
 
     @Test
     public void testNoop() {
diff --git 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
index 5fcd84f223..ba93cafe89 100644
--- 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
+++ 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
@@ -16,20 +16,24 @@
  */
 package org.apache.logging.log4j;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 import org.apache.logging.log4j.spi.DefaultThreadContextMap;
-import org.apache.logging.log4j.test.ThreadContextUtilityClass;
+import org.apache.logging.log4j.test.junit.InitializesThreadContext;
 import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
 import org.apache.logging.log4j.test.junit.UsingThreadContextStack;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junitpioneer.jupiter.SetSystemProperty;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 /**
  * Tests {@link ThreadContext}.
  */
 @SetSystemProperty(key = DefaultThreadContextMap.INHERITABLE_MAP, value = 
"true")
+@InitializesThreadContext
 public class ThreadContextInheritanceTest {
 
     @Test
diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextTest.java
 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/test/ThreadContextTest.java
similarity index 99%
rename from 
log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextTest.java
rename to 
log4j-api-test/src/test/java/org/apache/logging/log4j/test/ThreadContextTest.java
index 75bb691ba4..56c7241c6f 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextTest.java
+++ 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/test/ThreadContextTest.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.ThreadContextUtilityClass;
 import org.apache.logging.log4j.test.junit.UsingAnyThreadContext;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;

Reply via email to