Skip to content

Commit c72576d

Browse files
authored
Merge pull request #2148 from jvz/issue-2147
Update DI system with DSL for configuring bindings
2 parents 4789503 + d9c623c commit c72576d

File tree

54 files changed

+1266
-1118
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1266
-1118
lines changed

log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.apache.logging.log4j.core.config.Configuration;
2424
import org.apache.logging.log4j.core.config.ConfigurationSource;
2525
import org.apache.logging.log4j.core.config.Reconfigurable;
26-
import org.apache.logging.log4j.plugins.di.Binding;
2726

2827
/**
2928
* Base Configuration for Log4j 1.
@@ -64,7 +63,7 @@ public BuilderManager getBuilderManager() {
6463
*/
6564
@Override
6665
public void initialize() {
67-
instanceFactory.registerBinding(Binding.from(Configuration.KEY).toInstance(this));
66+
instanceFactory.registerBinding(Configuration.KEY, () -> this);
6867
getStrSubstitutor().setConfiguration(this);
6968
getConfigurationStrSubstitutor().setConfiguration(this);
7069
super.getScheduler().start();

log4j-1.2-api/src/test/java/org/apache/log4j/CategoryTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929
import org.apache.log4j.spi.LoggingEvent;
3030
import org.apache.logging.log4j.core.Layout;
3131
import org.apache.logging.log4j.core.LogEvent;
32-
import org.apache.logging.log4j.core.impl.Log4jPropertyKey;
3332
import org.apache.logging.log4j.core.layout.PatternLayout;
3433
import org.apache.logging.log4j.core.test.appender.ListAppender;
34+
import org.apache.logging.log4j.core.test.junit.ConfigurationFactoryType;
3535
import org.apache.logging.log4j.message.MapMessage;
3636
import org.apache.logging.log4j.message.Message;
3737
import org.apache.logging.log4j.message.ObjectMessage;
@@ -47,6 +47,7 @@
4747
/**
4848
* Tests of Category.
4949
*/
50+
@ConfigurationFactoryType(BasicConfigurationFactory.class)
5051
public class CategoryTest {
5152

5253
private static final String VERSION1_APPENDER_NAME = "Version1List";
@@ -58,15 +59,11 @@ public class CategoryTest {
5859
public static void setupClass() {
5960
appender.start();
6061
version1Appender.setName(VERSION1_APPENDER_NAME);
61-
System.setProperty(
62-
Log4jPropertyKey.CONFIG_CONFIGURATION_FACTORY_CLASS_NAME.getSystemKey(),
63-
BasicConfigurationFactory.class.getName());
6462
}
6563

6664
@AfterAll
6765
public static void cleanupClass() {
6866
appender.stop();
69-
System.clearProperty(Log4jPropertyKey.CONFIG_CONFIGURATION_FACTORY_CLASS_NAME.getSystemKey());
7067
}
7168

7269
@BeforeEach

log4j-1.2-api/src/test/java/org/apache/log4j/LoggerTest.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@
3131
import org.apache.logging.log4j.core.LoggerContext;
3232
import org.apache.logging.log4j.core.appender.AbstractAppender;
3333
import org.apache.logging.log4j.core.config.Property;
34-
import org.apache.logging.log4j.core.impl.Log4jPropertyKey;
3534
import org.apache.logging.log4j.core.layout.PatternLayout;
3635
import org.apache.logging.log4j.core.test.appender.ListAppender;
37-
import org.junit.jupiter.api.AfterAll;
36+
import org.apache.logging.log4j.core.test.junit.ConfigurationFactoryType;
3837
import org.junit.jupiter.api.AfterEach;
3938
import org.junit.jupiter.api.BeforeAll;
4039
import org.junit.jupiter.api.Test;
4140

4241
/**
4342
* Used for internal unit testing the Logger class.
4443
*/
44+
@ConfigurationFactoryType(BasicConfigurationFactory.class)
4545
public class LoggerTest {
4646

4747
Appender a1;
@@ -64,15 +64,6 @@ public static void setUpClass() {
6464

6565
rbCH = ResourceBundle.getBundle("L7D", new Locale("fr", "CH"));
6666
assertNotNull(rbCH, "Got a null resource bundle.");
67-
68-
System.setProperty(
69-
Log4jPropertyKey.CONFIG_CONFIGURATION_FACTORY_CLASS_NAME.getSystemKey(),
70-
BasicConfigurationFactory.class.getName());
71-
}
72-
73-
@AfterAll
74-
public static void tearDownClass() {
75-
System.clearProperty(Log4jPropertyKey.CONFIG_CONFIGURATION_FACTORY_CLASS_NAME.getSystemKey());
7667
}
7768

7869
@AfterEach

log4j-1.2-api/src/test/java/org/apache/log4j/config/AutoConfigTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.apache.log4j.spi.LoggingEvent;
2929
import org.apache.logging.log4j.core.Appender;
3030
import org.apache.logging.log4j.core.config.Configuration;
31-
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
31+
import org.apache.logging.log4j.core.test.junit.LegacyLoggerContextSource;
3232
import org.junit.jupiter.api.Test;
3333

3434
/**
@@ -37,7 +37,7 @@
3737
public class AutoConfigTest {
3838

3939
@Test
40-
@LoggerContextSource(value = "log4j.xml", v1config = true)
40+
@LegacyLoggerContextSource("log4j.xml")
4141
public void testListAppender(final org.apache.logging.log4j.core.LoggerContext context) {
4242
final Logger logger = LogManager.getLogger("test");
4343
logger.debug("This is a test of the root logger");

log4j-1.2-api/src/test/java/org/apache/log4j/config/MapRewriteAppenderTest.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616
*/
1717
package org.apache.log4j.config;
1818

19-
import static org.junit.jupiter.api.Assertions.*;
19+
import static org.assertj.core.api.Assertions.as;
20+
import static org.assertj.core.api.Assertions.assertThat;
21+
import static org.assertj.core.api.InstanceOfAssertFactories.MAP;
22+
import static org.assertj.core.api.InstanceOfAssertFactories.STRING;
23+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2024

2125
import java.util.HashMap;
2226
import java.util.List;
@@ -29,7 +33,7 @@
2933
import org.apache.logging.log4j.core.Appender;
3034
import org.apache.logging.log4j.core.LoggerContext;
3135
import org.apache.logging.log4j.core.config.Configuration;
32-
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
36+
import org.apache.logging.log4j.core.test.junit.LegacyLoggerContextSource;
3337
import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
3438
import org.junit.jupiter.api.Test;
3539

@@ -40,14 +44,14 @@
4044
public class MapRewriteAppenderTest {
4145

4246
@Test
43-
@LoggerContextSource(value = "log4j1-mapRewrite.xml", v1config = true)
47+
@LegacyLoggerContextSource("log4j1-mapRewrite.xml")
4448
public void testRewrite() {
4549
final Logger logger = LogManager.getLogger("test");
4650
final Map<String, String> map = new HashMap<>();
4751
map.put("message", "This is a test");
4852
map.put("hello", "world");
4953
logger.debug(map);
50-
final LoggerContext context = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
54+
final LoggerContext context = LoggerContext.getContext(false);
5155
final Configuration configuration = context.getConfiguration();
5256
final Map<String, Appender> appenders = configuration.getAppenders();
5357
ListAppender eventAppender = null;
@@ -58,9 +62,13 @@ public void testRewrite() {
5862
}
5963
assertNotNull(eventAppender, "No Event Appender");
6064
final List<LoggingEvent> events = eventAppender.getEvents();
61-
assertTrue(events != null && events.size() > 0, "No events");
62-
assertNotNull(events.get(0).getProperties(), "No properties in the event");
63-
assertTrue(events.get(0).getProperties().containsKey("hello"), "Key was not inserted");
64-
assertEquals("world", events.get(0).getProperties().get("hello"), "Key value is incorrect");
65+
assertThat(events)
66+
.isNotNull()
67+
.isNotEmpty()
68+
.first()
69+
.extracting(LoggingEvent::getProperties, as(MAP))
70+
.containsKey("hello")
71+
.extractingByKey("hello", as(STRING))
72+
.isEqualTo("world");
6573
}
6674
}

log4j-1.2-api/src/test/java/org/apache/log4j/config/PropertiesRollingWithPropertiesTest.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@
2121
import java.nio.file.Paths;
2222
import org.apache.logging.log4j.Logger;
2323
import org.apache.logging.log4j.core.LoggerContext;
24-
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
24+
import org.apache.logging.log4j.core.test.junit.LegacyLoggerContextSource;
2525
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
26-
import org.junit.jupiter.api.AfterAll;
27-
import org.junit.jupiter.api.BeforeAll;
2826
import org.junit.jupiter.api.Test;
27+
import org.junitpioneer.jupiter.SetSystemProperty;
2928

3029
/**
3130
* Test configuration from Properties.
@@ -34,19 +33,10 @@ public class PropertiesRollingWithPropertiesTest {
3433

3534
private static final String TEST_DIR = "target/PropertiesRollingWithPropertiesTest";
3635

37-
@BeforeAll
38-
static void beforeAll() {
39-
System.setProperty("test.directory", TEST_DIR);
40-
}
41-
42-
@AfterAll
43-
static void afterAll() {
44-
System.clearProperty("test.directory");
45-
}
46-
4736
@Test
37+
@SetSystemProperty(key = "test.directory", value = TEST_DIR)
4838
@CleanUpDirectories(TEST_DIR)
49-
@LoggerContextSource(value = "log4j1-rolling-properties.properties", v1config = true)
39+
@LegacyLoggerContextSource("log4j1-rolling-properties.properties")
5040
public void testProperties(final LoggerContext context) throws Exception {
5141
final Logger logger = context.getLogger("test");
5242
logger.debug("This is a test of the root logger");

log4j-1.2-api/src/test/java/org/apache/log4j/config/RewriteAppenderTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
*/
1717
package org.apache.log4j.config;
1818

19-
import static org.junit.jupiter.api.Assertions.*;
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertNotNull;
21+
import static org.junit.jupiter.api.Assertions.assertTrue;
2022

2123
import java.util.List;
2224
import java.util.Map;
@@ -29,7 +31,7 @@
2931
import org.apache.logging.log4j.core.Appender;
3032
import org.apache.logging.log4j.core.LoggerContext;
3133
import org.apache.logging.log4j.core.config.Configuration;
32-
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
34+
import org.apache.logging.log4j.core.test.junit.LegacyLoggerContextSource;
3335
import org.apache.logging.log4j.test.junit.UsingThreadContextMap;
3436
import org.junit.jupiter.api.Test;
3537

@@ -40,7 +42,7 @@
4042
public class RewriteAppenderTest {
4143

4244
@Test
43-
@LoggerContextSource(value = "log4j1-rewrite.xml", v1config = true)
45+
@LegacyLoggerContextSource("log4j1-rewrite.xml")
4446
public void testRewrite(final LoggerContext context) {
4547
final Logger logger = LogManager.getLogger("test");
4648
ThreadContext.put("key1", "This is a test");

log4j-1.2-api/src/test/java/org/apache/log4j/config/XmlRollingWithPropertiesTest.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@
2121
import java.nio.file.Paths;
2222
import org.apache.logging.log4j.Logger;
2323
import org.apache.logging.log4j.core.LoggerContext;
24-
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
24+
import org.apache.logging.log4j.core.test.junit.LegacyLoggerContextSource;
2525
import org.apache.logging.log4j.test.junit.CleanUpDirectories;
26-
import org.junit.jupiter.api.AfterAll;
27-
import org.junit.jupiter.api.BeforeAll;
2826
import org.junit.jupiter.api.Test;
27+
import org.junitpioneer.jupiter.SetSystemProperty;
2928

3029
/**
3130
* Test configuration from Properties.
@@ -34,19 +33,10 @@ public class XmlRollingWithPropertiesTest {
3433

3534
private static final String TEST_DIR = "target/XmlRollingWithPropertiesTest";
3635

37-
@BeforeAll
38-
static void beforeAll() {
39-
System.setProperty("test.directory", TEST_DIR);
40-
}
41-
42-
@AfterAll
43-
static void afterAll() {
44-
System.clearProperty("test.directory");
45-
}
46-
4736
@Test
37+
@SetSystemProperty(key = "test.directory", value = TEST_DIR)
4838
@CleanUpDirectories(TEST_DIR)
49-
@LoggerContextSource(value = "log4j1-rolling-properties.xml", v1config = true)
39+
@LegacyLoggerContextSource("log4j1-rolling-properties.xml")
5040
public void testProperties(final LoggerContext context) {
5141
// ${test.directory}/logs/etl.log
5242
final Logger logger = context.getLogger("test");

log4j-api-test/src/main/java/org/apache/logging/log4j/test/ThreadContextUtilityClass.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,4 @@ public static void testPut() {
112112
ThreadContext.put("testKey", "testValue");
113113
assertEquals("testValue", ThreadContext.get("testKey"));
114114
}
115-
116-
public static void reset() {
117-
ThreadContext.init();
118-
}
119115
}

log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/ExtensionContextAnchor.java

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@
1616
*/
1717
package org.apache.logging.log4j.test.junit;
1818

19-
import static org.junit.jupiter.api.Assertions.assertNotNull;
20-
19+
import org.apache.logging.log4j.lang.NullMarked;
20+
import org.apache.logging.log4j.lang.Nullable;
2121
import org.junit.jupiter.api.extension.AfterAllCallback;
2222
import org.junit.jupiter.api.extension.AfterEachCallback;
2323
import org.junit.jupiter.api.extension.BeforeAllCallback;
2424
import org.junit.jupiter.api.extension.BeforeEachCallback;
2525
import org.junit.jupiter.api.extension.ExtensionContext;
2626
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
27+
import org.junit.platform.commons.PreconditionViolationException;
2728

29+
@NullMarked
2830
public class ExtensionContextAnchor
2931
implements BeforeAllCallback, BeforeEachCallback, AfterAllCallback, AfterEachCallback {
3032

3133
public static Namespace LOG4J2_NAMESPACE = Namespace.create("org.apache.logging.log4j.junit");
32-
private static final ThreadLocal<ExtensionContext> EXTENSION_CONTEXT = new InheritableThreadLocal<>();
34+
private static final ThreadLocal<@Nullable ExtensionContext> EXTENSION_CONTEXT = new InheritableThreadLocal<>();
3335

3436
private static void bind(final ExtensionContext context) {
3537
EXTENSION_CONTEXT.set(context);
@@ -39,27 +41,45 @@ private static void unbind(final ExtensionContext context) {
3941
EXTENSION_CONTEXT.set(context.getParent().orElse(null));
4042
}
4143

42-
public static ExtensionContext getContext() {
44+
public static @Nullable ExtensionContext getContext() {
4345
return EXTENSION_CONTEXT.get();
4446
}
4547

46-
public static ExtensionContext getContext(final ExtensionContext context) {
48+
public static @Nullable ExtensionContext getContext(final @Nullable ExtensionContext context) {
4749
return context != null ? context : EXTENSION_CONTEXT.get();
4850
}
4951

50-
public static <T> T getAttribute(final Object key, final Class<T> clazz, final ExtensionContext context) {
52+
public static ExtensionContext getRequiredContext(final @Nullable ExtensionContext context) {
5153
final ExtensionContext actualContext = getContext(context);
52-
assertNotNull(actualContext, "missing ExtensionContext");
53-
return actualContext.getStore(LOG4J2_NAMESPACE).get(key, clazz);
54+
if (actualContext == null) {
55+
throw new PreconditionViolationException("No ExtensionContext available");
56+
}
57+
return actualContext;
5458
}
5559

56-
public static void setAttribute(final Object key, final Object value, final ExtensionContext context) {
57-
final ExtensionContext actualContext = getContext(context);
58-
assertNotNull(actualContext, "missing ExtensionContext");
59-
actualContext.getStore(LOG4J2_NAMESPACE).put(key, value);
60+
public static ExtensionContext.Store getRequiredStore(final @Nullable ExtensionContext context) {
61+
return getRequiredContext(context).getStore(LOG4J2_NAMESPACE);
62+
}
63+
64+
public static <T> @Nullable T getAttribute(
65+
final Object key, final Class<T> clazz, final @Nullable ExtensionContext context) {
66+
return getRequiredStore(context).get(key, clazz);
67+
}
68+
69+
public static <T> T getRequiredAttribute(
70+
final Object key, final Class<T> clazz, final @Nullable ExtensionContext context) {
71+
final T attribute = getRequiredStore(context).get(key, clazz);
72+
if (attribute == null) {
73+
throw new PreconditionViolationException("Unable to find instance of " + clazz.getCanonicalName());
74+
}
75+
return attribute;
76+
}
77+
78+
public static void setAttribute(final Object key, final Object value, final @Nullable ExtensionContext context) {
79+
getRequiredStore(context).put(key, value);
6080
}
6181

62-
public static void removeAttribute(final Object key, final ExtensionContext context) {
82+
public static void removeAttribute(final Object key, final @Nullable ExtensionContext context) {
6383
final ExtensionContext actualContext = getContext(context);
6484
if (actualContext != null) {
6585
actualContext.getStore(LOG4J2_NAMESPACE).remove(key);

0 commit comments

Comments
 (0)