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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 99d1d0432d116a3cd5e88a54beb321d2ae9c7a2e
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Sat Dec 2 19:31:00 2023 +0100

    JAMES-3961 Fix LeakAware test suite
---
 .../org/apache/james/lifecycle/api/Disposable.java |  2 +-
 .../apache/james/lifecycle/api/LeakAwareTest.java  | 33 ++++++++--------------
 2 files changed, 13 insertions(+), 22 deletions(-)

diff --git 
a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
 
b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
index aa9d97194b..68da201d4b 100644
--- 
a/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
+++ 
b/server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
@@ -86,7 +86,7 @@ public interface Disposable {
 
         public static final ReferenceQueue<LeakAware<?>> REFERENCE_QUEUE = new 
ReferenceQueue<>();
         public static final ConcurrentHashMap<LeakAwareFinalizer, Boolean> 
REFERENCES_IN_USE = new ConcurrentHashMap<>();
-        public static final Level LEVEL = 
Optional.ofNullable(System.getProperty("james.lifecycle.leak.detection.mode"))
+        static Level LEVEL = 
Optional.ofNullable(System.getProperty("james.lifecycle.leak.detection.mode"))
             .map(Level::parse).orElse(Level.SIMPLE);
 
         public static void track() {
diff --git 
a/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
 
b/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
index f235c3caf2..bc5ddb0a1d 100644
--- 
a/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
+++ 
b/server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
@@ -19,19 +19,16 @@
 
 package org.apache.james.lifecycle.api;
 
+import static org.apache.james.lifecycle.api.Disposable.LeakAware;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
 import static org.awaitility.Durations.TEN_SECONDS;
-import static org.apache.james.lifecycle.api.Disposable.LeakAware;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.awaitility.Awaitility;
 import org.awaitility.core.ConditionFactory;
-
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
@@ -76,22 +73,16 @@ class LeakAwareTest {
         return loggingEventListAppender;
     }
 
-    private void forceChangeLevel(String level) throws NoSuchFieldException, 
IllegalAccessException {
-        forceChangeLevel(LeakAware.Level.parse(level));
+    private void forceChangeLevel(String level) {
+        LeakAware.LEVEL = LeakAware.Level.parse(level);
     }
 
-    // using reflect to change LeakAware.LEVEL value
-    private static void forceChangeLevel(LeakAware.Level level) throws 
NoSuchFieldException, IllegalAccessException {
-        final Field field = LeakAware.class.getDeclaredField("LEVEL");
-        field.setAccessible(true);
-        final Field modifiersField = Field.class.getDeclaredField("modifiers");
-        modifiersField.setAccessible(true);
-        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
-        field.set(null, level);
+    private static void forceChangeLevel(LeakAware.Level level) {
+        LeakAware.LEVEL = level;
     }
 
     @Test
-    void leakDetectionShouldCloseUnclosedResources() throws 
NoSuchFieldException, IllegalAccessException {
+    void leakDetectionShouldCloseUnclosedResources() {
         forceChangeLevel(LeakAware.Level.SIMPLE);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);
         LeakResourceSample resourceSample = 
LeakResourceSample.create(atomicBoolean);
@@ -105,7 +96,7 @@ class LeakAwareTest {
     }
 
     @Test
-    void leakDetectionShouldNotReportClosedObjects() throws 
NoSuchFieldException, IllegalAccessException {
+    void leakDetectionShouldNotReportClosedObjects() {
         forceChangeLevel(LeakAware.Level.SIMPLE);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);
         LeakResourceSample resourceSample = 
LeakResourceSample.create(atomicBoolean);
@@ -121,7 +112,7 @@ class LeakAwareTest {
     }
 
     @Test
-    void resourceShouldNotBeDetectedLeakWhenLevelIsNone() throws 
InterruptedException, NoSuchFieldException, IllegalAccessException {
+    void resourceShouldNotBeDetectedLeakWhenLevelIsNone() throws 
InterruptedException {
         forceChangeLevel(LeakAware.Level.NONE);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);
         LeakResourceSample resourceSample = 
LeakResourceSample.create(atomicBoolean);
@@ -135,7 +126,7 @@ class LeakAwareTest {
 
     @ParameterizedTest
     @ValueSource(strings = {"simple", "advanced"})
-    void leakDetectionShouldLogWhenDetected(String level) throws 
NoSuchFieldException, IllegalAccessException {
+    void leakDetectionShouldLogWhenDetected(String level) {
         forceChangeLevel(level);
         ListAppender<ILoggingEvent> loggingEvents = 
getListAppenderForClass(Disposable.LeakAwareFinalizer.class);
 
@@ -155,7 +146,7 @@ class LeakAwareTest {
     }
 
     @Test
-    void leakDetectionShouldLogTraceRecordWhenLevelIsAdvanced() throws 
NoSuchFieldException, IllegalAccessException {
+    void leakDetectionShouldLogTraceRecordWhenLevelIsAdvanced() {
         forceChangeLevel(LeakAware.Level.ADVANCED);
         ListAppender<ILoggingEvent> loggingEvents = 
getListAppenderForClass(Disposable.LeakAwareFinalizer.class);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);
@@ -174,7 +165,7 @@ class LeakAwareTest {
     }
 
     @Test
-    void leakDetectionShouldThrowWhenDetectedAndLevelIsTesting() throws 
NoSuchFieldException, IllegalAccessException, InterruptedException {
+    void leakDetectionShouldThrowWhenDetectedAndLevelIsTesting() throws 
InterruptedException {
         forceChangeLevel(LeakAware.Level.TESTING);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);
         LeakResourceSample resourceSample = 
LeakResourceSample.create(atomicBoolean);
@@ -187,7 +178,7 @@ class LeakAwareTest {
     }
 
     @Test
-    void leakDetectionShouldNotLogWhenLevelIsNone() throws 
InterruptedException, NoSuchFieldException, IllegalAccessException {
+    void leakDetectionShouldNotLogWhenLevelIsNone() throws 
InterruptedException {
         forceChangeLevel(LeakAware.Level.NONE);
         ListAppender<ILoggingEvent> loggingEvents = 
getListAppenderForClass(Disposable.LeakAwareFinalizer.class);
         AtomicBoolean atomicBoolean = new AtomicBoolean(false);


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to