Skip to content

Commit b432d14

Browse files
committed
Updated InternalLoggerRegistryTest
* Adjusted test class file name and its package location. * Used MockLogger in logger suppliers to avoid nested computeIfAbsent. * Employed a local SimpleMessageFactory instance in tests.
1 parent 8b964a0 commit b432d14

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed
Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
package org.apache.logging.log4j.core.test.util;
17+
package org.apache.logging.log4j.core.util.internal;
1818

1919
import static java.util.concurrent.TimeUnit.MILLISECONDS;
2020
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -34,7 +34,6 @@
3434
import java.util.concurrent.Executors;
3535
import org.apache.logging.log4j.core.Logger;
3636
import org.apache.logging.log4j.core.LoggerContext;
37-
import org.apache.logging.log4j.core.util.internal.InternalLoggerRegistry;
3837
import org.apache.logging.log4j.message.MessageFactory;
3938
import org.apache.logging.log4j.message.SimpleMessageFactory;
4039
import org.junit.jupiter.api.AfterEach;
@@ -71,23 +70,23 @@ void testGetLoggerReturnsNullForNonExistentLogger() {
7170
@Test
7271
void testComputeIfAbsentCreatesLogger() {
7372
Logger logger = registry.computeIfAbsent(
74-
"testLogger", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
73+
"testLogger", messageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
7574
assertNotNull(logger);
7675
assertEquals("testLogger", logger.getName());
7776
}
7877

7978
@Test
8079
void testGetLoggerRetrievesExistingLogger() {
8180
Logger logger = registry.computeIfAbsent(
82-
"testLogger", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
81+
"testLogger", messageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
8382
assertSame(logger, registry.getLogger("testLogger", messageFactory));
8483
}
8584

8685
@Test
8786
void testHasLoggerReturnsCorrectStatus() {
8887
assertFalse(registry.hasLogger("testLogger", messageFactory));
8988
registry.computeIfAbsent(
90-
"testLogger", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
89+
"testLogger", messageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
9190
assertTrue(registry.hasLogger("testLogger", messageFactory));
9291
}
9392

@@ -98,15 +97,17 @@ void testExpungeStaleWeakReferenceEntries() {
9897

9998
for (int i = 0; i < numberOfLoggers; i++) {
10099
Logger logger = registry.computeIfAbsent(
101-
loggerNamePrefix + i, messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
100+
loggerNamePrefix + i,
101+
messageFactory,
102+
(name, factory) -> new MockLogger(loggerContext, name, factory));
102103
logger.info("Using logger {}", logger.getName());
103104
}
104105

105106
await().atMost(10, SECONDS).pollInterval(100, MILLISECONDS).untilAsserted(() -> {
106107
System.gc();
107108
System.runFinalization();
108109
registry.computeIfAbsent(
109-
"triggerExpunge", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
110+
"triggerExpunge", messageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
110111

111112
Map<MessageFactory, Map<String, WeakReference<Logger>>> loggerRefByNameByMessageFactory =
112113
reflectAndGetLoggerMapFromRegistry();
@@ -127,20 +128,21 @@ void testExpungeStaleWeakReferenceEntries() {
127128

128129
@Test
129130
void testExpungeStaleMessageFactoryEntry() {
131+
SimpleMessageFactory mockMessageFactory = new SimpleMessageFactory();
130132
Logger logger = registry.computeIfAbsent(
131-
"testLogger", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
133+
"testLogger", mockMessageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
132134
logger.info("Using logger {}", logger.getName());
133135
logger = null;
134136

135137
await().atMost(10, SECONDS).pollInterval(100, MILLISECONDS).untilAsserted(() -> {
136138
System.gc();
137139
System.runFinalization();
138-
registry.getLogger("testLogger", messageFactory);
140+
registry.getLogger("triggerExpunge", mockMessageFactory);
139141

140142
Map<MessageFactory, Map<String, WeakReference<Logger>>> loggerRefByNameByMessageFactory =
141143
reflectAndGetLoggerMapFromRegistry();
142144
assertNull(
143-
loggerRefByNameByMessageFactory.get(messageFactory),
145+
loggerRefByNameByMessageFactory.get(mockMessageFactory),
144146
"Stale MessageFactory entry was not removed from the outer map");
145147
});
146148
}
@@ -154,7 +156,7 @@ void testConcurrentAccess() throws InterruptedException {
154156
for (int i = 0; i < threadCount; i++) {
155157
executor.submit(() -> {
156158
registry.computeIfAbsent(
157-
"testLogger", messageFactory, (name, factory) -> loggerContext.getLogger(name, factory));
159+
"testLogger", messageFactory, (name, factory) -> new MockLogger(loggerContext, name, factory));
158160
latch.countDown();
159161
});
160162
}
@@ -177,4 +179,11 @@ private Map<MessageFactory, Map<String, WeakReference<Logger>>> reflectAndGetLog
177179
(Map<MessageFactory, Map<String, WeakReference<Logger>>>) loggerMapField.get(registry);
178180
return loggerMap;
179181
}
182+
183+
private class MockLogger extends Logger {
184+
185+
protected MockLogger(LoggerContext context, String name, MessageFactory messageFactory) {
186+
super(context, name, messageFactory);
187+
}
188+
}
180189
}

0 commit comments

Comments
 (0)