1616 */
1717package org .apache .logging .log4j .jndi .lookup ;
1818
19- import static org .junit .Assert .assertEquals ;
2019import static org .junit .Assert .assertFalse ;
2120import static org .junit .Assert .assertNotNull ;
22- import static org .junit .Assert .assertNull ;
21+ import static org .junit .Assert .assertSame ;
22+ import static org .junit .jupiter .api .Assertions .assertEquals ;
23+ import static org .junit .jupiter .api .Assertions .assertNull ;
2324
25+ import java .lang .reflect .Field ;
2426import java .text .SimpleDateFormat ;
27+ import java .util .Collections ;
2528import java .util .Date ;
2629import java .util .HashMap ;
2730import java .util .Map ;
31+ import org .apache .logging .log4j .Level ;
2832import org .apache .logging .log4j .ThreadContext ;
33+ import org .apache .logging .log4j .core .LogEvent ;
34+ import org .apache .logging .log4j .core .Logger ;
35+ import org .apache .logging .log4j .core .impl .Log4jLogEvent ;
2936import org .apache .logging .log4j .core .lookup .Interpolator ;
3037import org .apache .logging .log4j .core .lookup .MapLookup ;
3138import org .apache .logging .log4j .core .lookup .StrLookup ;
3239import org .apache .logging .log4j .jndi .test .junit .JndiRule ;
40+ import org .apache .logging .log4j .message .StringMapMessage ;
3341import org .junit .ClassRule ;
3442import org .junit .Test ;
3543import org .junit .rules .ExternalResource ;
3644import org .junit .rules .RuleChain ;
3745
3846/**
39- *
47+ * Tests {@link Interpolator}.
4048 */
4149public class InterpolatorTest {
4250
@@ -48,7 +56,7 @@ public class InterpolatorTest {
4856 private static final String TEST_CONTEXT_NAME = "app-1" ;
4957
5058 @ ClassRule
51- public static RuleChain rules = RuleChain .outerRule (new ExternalResource () {
59+ public static final RuleChain RULES = RuleChain .outerRule (new ExternalResource () {
5260 @ Override
5361 protected void before () throws Throwable {
5462 System .setProperty (TESTKEY , TESTVAL );
@@ -66,6 +74,28 @@ protected void after() {
6674 .around (new JndiRule (
6775 JndiLookup .CONTAINER_JNDI_RESOURCE_PATH_PREFIX + TEST_CONTEXT_RESOURCE_NAME , TEST_CONTEXT_NAME ));
6876
77+ @ Test
78+ public void testGetDefaultLookup () {
79+ final Map <String , String > map = new HashMap <>();
80+ map .put (TESTKEY , TESTVAL );
81+ final MapLookup defaultLookup = new MapLookup (map );
82+ final Interpolator interpolator = new Interpolator (defaultLookup );
83+ assertEquals (getLookupMap (defaultLookup ), getLookupMap ((MapLookup ) interpolator .getDefaultLookup ()));
84+ assertSame (defaultLookup , interpolator .getDefaultLookup ());
85+ }
86+
87+ private static Map <String , String > getLookupMap (final MapLookup lookup ) {
88+ try {
89+ final Field mapField = lookup .getClass ().getDeclaredField ("map" );
90+ mapField .setAccessible (true );
91+ @ SuppressWarnings ("unchecked" )
92+ Map <String , String > map = (Map <String , String >) mapField .get (lookup );
93+ return map ;
94+ } catch (final Exception error ) {
95+ throw new RuntimeException (error );
96+ }
97+ }
98+
6999 @ Test
70100 public void testLookup () {
71101 final Map <String , String > map = new HashMap <>();
@@ -117,4 +147,50 @@ public void testLookupWithDefaultInterpolator() {
117147 assertLookupNotEmpty (lookup , "java:locale" );
118148 assertLookupNotEmpty (lookup , "java:hw" );
119149 }
150+
151+ @ Test
152+ public void testInterpolatorMapMessageWithNoPrefix () {
153+ final HashMap <String , String > configProperties = new HashMap <>();
154+ configProperties .put ("key" , "configProperties" );
155+ final Interpolator interpolator = new Interpolator (configProperties );
156+ final HashMap <String , String > map = new HashMap <>();
157+ map .put ("key" , "mapMessage" );
158+ final LogEvent event = Log4jLogEvent .newBuilder ()
159+ .setLoggerName (getClass ().getName ())
160+ .setLoggerFqcn (Logger .class .getName ())
161+ .setLevel (Level .INFO )
162+ .setMessage (new StringMapMessage (map ))
163+ .build ();
164+ assertEquals ("configProperties" , interpolator .lookup (event , "key" ));
165+ }
166+
167+ @ Test
168+ public void testInterpolatorMapMessageWithNoPrefixConfigDoesntMatch () {
169+ final Interpolator interpolator = new Interpolator (Collections .emptyMap ());
170+ final HashMap <String , String > map = new HashMap <>();
171+ map .put ("key" , "mapMessage" );
172+ final LogEvent event = Log4jLogEvent .newBuilder ()
173+ .setLoggerName (getClass ().getName ())
174+ .setLoggerFqcn (Logger .class .getName ())
175+ .setLevel (Level .INFO )
176+ .setMessage (new StringMapMessage (map ))
177+ .build ();
178+ assertNull (interpolator .lookup (event , "key" ), "Values without a map prefix should not match MapMessages" );
179+ }
180+
181+ @ Test
182+ public void testInterpolatorMapMessageWithMapPrefix () {
183+ final HashMap <String , String > configProperties = new HashMap <>();
184+ configProperties .put ("key" , "configProperties" );
185+ final Interpolator interpolator = new Interpolator (configProperties );
186+ final HashMap <String , String > map = new HashMap <>();
187+ map .put ("key" , "mapMessage" );
188+ final LogEvent event = Log4jLogEvent .newBuilder ()
189+ .setLoggerName (getClass ().getName ())
190+ .setLoggerFqcn (Logger .class .getName ())
191+ .setLevel (Level .INFO )
192+ .setMessage (new StringMapMessage (map ))
193+ .build ();
194+ assertEquals ("mapMessage" , interpolator .lookup (event , "map:key" ));
195+ }
120196}
0 commit comments