Skip to content

Commit a65b943

Browse files
authored
Merge pull request #235
test: Improve test coverage for logging package to 92%
2 parents 31130ab + 0f12f54 commit a65b943

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed

src/test/java/de/rub/nds/modifiablevariable/logging/ExtendedPatternLayoutTest.java

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
import de.rub.nds.modifiablevariable.util.DataConverter;
1313
import java.nio.charset.Charset;
1414
import java.nio.charset.StandardCharsets;
15+
import java.util.List;
16+
import java.util.regex.Pattern;
1517
import org.apache.logging.log4j.Level;
1618
import org.apache.logging.log4j.core.LogEvent;
1719
import org.apache.logging.log4j.core.config.Configuration;
1820
import org.apache.logging.log4j.core.config.DefaultConfiguration;
21+
import org.apache.logging.log4j.core.impl.LocationAware;
1922
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
2023
import org.apache.logging.log4j.core.layout.AbstractStringLayout;
2124
import org.apache.logging.log4j.core.layout.PatternSelector;
2225
import org.apache.logging.log4j.core.pattern.PatternFormatter;
26+
import org.apache.logging.log4j.core.pattern.PatternParser;
2327
import org.apache.logging.log4j.core.pattern.RegexReplacement;
2428
import org.apache.logging.log4j.message.ParameterizedMessage;
2529
import org.apache.logging.log4j.message.SimpleMessage;
@@ -499,6 +503,156 @@ void testSerializerBuilderWithPatternSelector() {
499503
assertNotNull(serializer);
500504
}
501505

506+
@Test
507+
void testPatternSelectorSerializer() {
508+
// Test PatternSelectorSerializer functionality
509+
LocationAwarePatternSelector patternSelector = new LocationAwarePatternSelector(false);
510+
RegexReplacement regexReplacement =
511+
RegexReplacement.createRegexReplacement(Pattern.compile("test"), "TEST");
512+
513+
ExtendedPatternLayout layout =
514+
ExtendedPatternLayout.newBuilder()
515+
.withPattern("%m%n")
516+
.withPatternSelector(patternSelector)
517+
.withRegexReplacement(regexReplacement)
518+
.build();
519+
520+
String message = "This is a test message";
521+
LogEvent event = createLogEvent(new SimpleMessage(message));
522+
String result = layout.toSerializable(event);
523+
524+
// Should replace "test" with "TEST"
525+
assertTrue(result.contains("This is a TEST message"));
526+
}
527+
528+
@Test
529+
void testPatternSelectorSerializerToString() {
530+
// Test toString method of PatternSelectorSerializer
531+
LocationAwarePatternSelector patternSelector = new LocationAwarePatternSelector(false);
532+
RegexReplacement regexReplacement =
533+
RegexReplacement.createRegexReplacement(Pattern.compile("test"), "TEST");
534+
535+
ExtendedPatternLayout.SerializerBuilder builder =
536+
ExtendedPatternLayout.newSerializerBuilder();
537+
builder.setPattern("%m%n");
538+
builder.setPatternSelector(patternSelector);
539+
builder.setReplace(regexReplacement);
540+
541+
AbstractStringLayout.Serializer serializer = builder.build();
542+
assertNotNull(serializer);
543+
544+
// The serializer should have a meaningful toString
545+
String toStringResult = serializer.toString();
546+
assertNotNull(toStringResult);
547+
assertTrue(toStringResult.contains("patternSelector"));
548+
}
549+
550+
@Test
551+
void testLocationAwarePatternSelector() {
552+
// Test with LocationAware pattern selector that requires location
553+
LocationAwarePatternSelector patternSelector = new LocationAwarePatternSelector(true);
554+
555+
ExtendedPatternLayout layout =
556+
ExtendedPatternLayout.newBuilder()
557+
.withPattern("%m%n")
558+
.withPatternSelector(patternSelector)
559+
.build();
560+
561+
assertTrue(layout.requiresLocation());
562+
563+
// Test with LocationAware pattern selector that doesn't require location
564+
LocationAwarePatternSelector patternSelector2 = new LocationAwarePatternSelector(false);
565+
566+
ExtendedPatternLayout layout2 =
567+
ExtendedPatternLayout.newBuilder()
568+
.withPattern("%m%n")
569+
.withPatternSelector(patternSelector2)
570+
.build();
571+
572+
assertFalse(layout2.requiresLocation());
573+
}
574+
575+
@Test
576+
void testPatternSelectorSerializerWithoutReplace() {
577+
// Test PatternSelectorSerializer without regex replacement
578+
LocationAwarePatternSelector patternSelector = new LocationAwarePatternSelector(false);
579+
580+
ExtendedPatternLayout layout =
581+
ExtendedPatternLayout.newBuilder()
582+
.withPattern("%m%n")
583+
.withPatternSelector(patternSelector)
584+
.build();
585+
586+
String message = "This is a test message";
587+
LogEvent event = createLogEvent(new SimpleMessage(message));
588+
String result = layout.toSerializable(event);
589+
590+
// Should contain the original message
591+
assertTrue(result.contains("This is a test message"));
592+
}
593+
594+
@Test
595+
void testSerializerBuilderWithOnlyPatternSelector() {
596+
// Test creating serializer with pattern selector but no pattern
597+
PatternSelector patternSelector = new LocationAwarePatternSelector(false);
598+
599+
ExtendedPatternLayout.SerializerBuilder builder =
600+
ExtendedPatternLayout.newSerializerBuilder();
601+
builder.setPatternSelector(patternSelector);
602+
builder.setDefaultPattern("%m%n");
603+
604+
AbstractStringLayout.Serializer serializer = builder.build();
605+
assertNotNull(serializer);
606+
}
607+
608+
@Test
609+
void testBuilderConstants() {
610+
// Test the pattern constants
611+
assertEquals("%m%n", ExtendedPatternLayout.DEFAULT_CONVERSION_PATTERN);
612+
assertEquals(
613+
"%r [%t] %p %c %notEmpty{%x }- %m%n",
614+
ExtendedPatternLayout.TTCC_CONVERSION_PATTERN);
615+
assertEquals("%d [%t] %p %c - %m%n", ExtendedPatternLayout.SIMPLE_CONVERSION_PATTERN);
616+
assertEquals("Converter", ExtendedPatternLayout.KEY);
617+
}
618+
619+
@Test
620+
void testInvalidPatternInSerializerBuilder() {
621+
// Test with an invalid pattern that causes exception
622+
// Log4j will not throw an exception for invalid patterns, it will just log an error
623+
// So let's remove this test as it's not valid
624+
ExtendedPatternLayout.SerializerBuilder builder =
625+
ExtendedPatternLayout.newSerializerBuilder();
626+
builder.setPattern("%INVALID");
627+
builder.setConfiguration(new DefaultConfiguration());
628+
629+
// The build should not throw - invalid patterns are logged as errors
630+
AbstractStringLayout.Serializer serializer = builder.build();
631+
assertNotNull(serializer);
632+
}
633+
634+
@Test
635+
void testPatternSelectorSerializerDirectly() {
636+
// Test PatternSelectorSerializer's toSerializable(LogEvent) method directly
637+
LocationAwarePatternSelector patternSelector = new LocationAwarePatternSelector(false);
638+
639+
ExtendedPatternLayout.SerializerBuilder builder =
640+
ExtendedPatternLayout.newSerializerBuilder();
641+
builder.setPatternSelector(patternSelector);
642+
builder.setDefaultPattern("%m%n");
643+
644+
AbstractStringLayout.Serializer serializer = builder.build();
645+
assertNotNull(serializer);
646+
647+
// Test the toSerializable(LogEvent) method
648+
String message = "Test message";
649+
LogEvent event = createLogEvent(new SimpleMessage(message));
650+
String result = serializer.toSerializable(event);
651+
652+
assertNotNull(result);
653+
assertTrue(result.contains("Test message"));
654+
}
655+
502656
private LogEvent createLogEvent(org.apache.logging.log4j.message.Message message) {
503657
return Log4jLogEvent.newBuilder()
504658
.setLoggerName("TestLogger")
@@ -525,4 +679,32 @@ public String toString() {
525679
return name;
526680
}
527681
}
682+
683+
// LocationAware PatternSelector implementation for testing
684+
private static class LocationAwarePatternSelector implements PatternSelector, LocationAware {
685+
private final boolean requiresLocation;
686+
private final PatternFormatter[] formatters;
687+
688+
public LocationAwarePatternSelector(boolean requiresLocation) {
689+
this.requiresLocation = requiresLocation;
690+
PatternParser parser = ExtendedPatternLayout.createPatternParser(null);
691+
List<PatternFormatter> formatterList = parser.parse("%m%n");
692+
this.formatters = formatterList.toArray(new PatternFormatter[0]);
693+
}
694+
695+
@Override
696+
public PatternFormatter[] getFormatters(LogEvent event) {
697+
return formatters;
698+
}
699+
700+
@Override
701+
public boolean requiresLocation() {
702+
return requiresLocation;
703+
}
704+
705+
@Override
706+
public String toString() {
707+
return "LocationAwarePatternSelector";
708+
}
709+
}
528710
}

0 commit comments

Comments
 (0)