Skip to content

Commit 40b26ea

Browse files
committed
Add tests for multiple URI configuration support
- Validate null/empty parameter handling - Test single and multiple URI behavior - Verify CompositeConfiguration creation - Add changelog xml file
1 parent 22ba22c commit 40b26ea

File tree

8 files changed

+88
-5
lines changed

8 files changed

+88
-5
lines changed

log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,19 @@
1919
import static org.apache.logging.log4j.util.Unbox.box;
2020
import static org.junit.jupiter.api.Assertions.assertAll;
2121
import static org.junit.jupiter.api.Assertions.assertEquals;
22+
import static org.junit.jupiter.api.Assertions.assertFalse;
2223
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
2324
import static org.junit.jupiter.api.Assertions.assertNotNull;
2425
import static org.junit.jupiter.api.Assertions.assertThrows;
2526
import static org.junit.jupiter.api.Assertions.assertTrue;
2627

2728
import java.io.IOException;
29+
import java.net.URI;
30+
import java.net.URL;
2831
import java.nio.file.Files;
2932
import java.nio.file.Path;
33+
import java.util.Arrays;
34+
import java.util.Collections;
3035
import java.util.Iterator;
3136
import java.util.List;
3237
import java.util.Map;
@@ -36,6 +41,7 @@
3641
import org.apache.logging.log4j.core.Logger;
3742
import org.apache.logging.log4j.core.LoggerContext;
3843
import org.apache.logging.log4j.core.appender.ConsoleAppender;
44+
import org.apache.logging.log4j.core.config.composite.CompositeConfiguration;
3945
import org.apache.logging.log4j.core.filter.ThreadContextMapFilter;
4046
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
4147
import org.apache.logging.log4j.test.junit.TempLoggingDir;
@@ -130,4 +136,63 @@ void properties(final LoggerContext context) throws IOException {
130136
final Path logFile = loggingPath.resolve("test-properties.log");
131137
checkFileLogger(context, logFile);
132138
}
139+
140+
@Test
141+
void testGetConfigurationWithNullUris() {
142+
final ConfigurationFactory factory = ConfigurationFactory.getInstance();
143+
try (final LoggerContext context = new LoggerContext("test")) {
144+
assertThrows(NullPointerException.class, () -> factory.getConfiguration(context, "test", (List<URI>) null));
145+
}
146+
}
147+
148+
@Test
149+
void testGetConfigurationWithEmptyUris() {
150+
final ConfigurationFactory factory = ConfigurationFactory.getInstance();
151+
try (final LoggerContext context = new LoggerContext("test")) {
152+
assertThrows(
153+
IllegalArgumentException.class,
154+
() -> factory.getConfiguration(context, "test", Collections.emptyList()));
155+
}
156+
}
157+
158+
@Test
159+
void testGetConfigurationWithNullInList() {
160+
final ConfigurationFactory factory = ConfigurationFactory.getInstance();
161+
try (final LoggerContext context = new LoggerContext("test")) {
162+
final List<URI> listWithNull = Collections.singletonList(null);
163+
assertThrows(ConfigurationException.class, () -> factory.getConfiguration(context, "test", listWithNull));
164+
}
165+
}
166+
167+
@Test
168+
void testGetConfigurationWithSingleUri() throws Exception {
169+
final ConfigurationFactory factory = ConfigurationFactory.getInstance();
170+
try (final LoggerContext context = new LoggerContext("test")) {
171+
final URL resource = getClass().getResource("/log4j-test1.xml");
172+
assertNotNull(resource);
173+
174+
final List<URI> singleUri = Collections.singletonList(resource.toURI());
175+
final Configuration config = factory.getConfiguration(context, "test", singleUri);
176+
177+
assertNotNull(config);
178+
assertFalse(config instanceof CompositeConfiguration);
179+
}
180+
}
181+
182+
@Test
183+
void testGetConfigurationWithMultipleUris() throws Exception {
184+
final ConfigurationFactory factory = ConfigurationFactory.getInstance();
185+
try (final LoggerContext context = new LoggerContext("test")) {
186+
final URL resource1 = getClass().getResource("/log4j-test1.xml");
187+
final URL resource2 = getClass().getResource("/log4j-xinclude.xml");
188+
assertNotNull(resource1);
189+
assertNotNull(resource2);
190+
191+
final List<URI> multipleUris = Arrays.asList(resource1.toURI(), resource2.toURI());
192+
final Configuration config = factory.getConfiguration(context, "test", multipleUris);
193+
194+
assertNotNull(config);
195+
assertTrue(config instanceof CompositeConfiguration);
196+
}
197+
}
133198
}

log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/builder/CustomConfigurationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static Configuration addTestFixtures(final String name, final ConfigurationBuild
7272

7373
@Override
7474
public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
75-
return getConfiguration(loggerContext, source.toString(), null);
75+
return getConfiguration(loggerContext, source.toString(), (URI) null);
7676
}
7777

7878
@Override

log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@ public Configuration getConfiguration(final LoggerContext loggerContext, final S
359359
final List<AbstractConfiguration> configurations = new ArrayList<>();
360360

361361
for (final URI uri : uris) {
362+
363+
if (uri == null) {
364+
throw new ConfigurationException("URI list contains null element");
365+
}
366+
362367
final Configuration config = getConfiguration(loggerContext, name, uri);
363368

364369
if (config == null) {

log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/package-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Classes and interfaces supporting configuration of Log4j 2 with JSON.
1919
*/
2020
@Export
21-
@Version("2.21.0")
21+
@Version("2.26.0")
2222
package org.apache.logging.log4j.core.config.json;
2323

2424
import org.osgi.annotation.bundle.Export;

log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/package-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Configuration using Properties files.
1919
*/
2020
@Export
21-
@Version("2.21.0")
21+
@Version("2.26.0")
2222
package org.apache.logging.log4j.core.config.properties;
2323

2424
import org.osgi.annotation.bundle.Export;

log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/package-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Classes and interfaces supporting configuration of Log4j 2 with XML.
1919
*/
2020
@Export
21-
@Version("2.21.0")
21+
@Version("2.26.0")
2222
package org.apache.logging.log4j.core.config.xml;
2323

2424
import org.osgi.annotation.bundle.Export;

log4j-core/src/main/java/org/apache/logging/log4j/core/config/yaml/package-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* Classes and interfaces supporting configuration of Log4j 2 with YAML.
1919
*/
2020
@Export
21-
@Version("2.21.0")
21+
@Version("2.26.0")
2222
package org.apache.logging.log4j.core.config.yaml;
2323

2424
import org.osgi.annotation.bundle.Export;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<entry xmlns="https://logging.apache.org/xml/ns"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="
5+
https://logging.apache.org/xml/ns
6+
https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
7+
type="added">
8+
<issue id="3775" link="https://github.com/apache/logging-log4j2/issues/3775"/>
9+
<issue id="3921" link="https://github.com/apache/logging-log4j2/pull/3921"/>
10+
<description format="asciidoc">
11+
Add a new `ConfigurationFactory::getConfiguration` method accepting multiple `URI`s
12+
</description>
13+
</entry>

0 commit comments

Comments
 (0)