Repository: logging-log4j2 Updated Branches: refs/heads/release-2.x 4a4b60abb -> 5718f6047
New test to assert that Log4j MapMessages are mapped to JMS MapMessages. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5718f604 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5718f604 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5718f604 Branch: refs/heads/release-2.x Commit: 5718f6047bcf632ae8f450cd6f21fd81b6db74cd Parents: 4a4b60a Author: Gary Gregory <[email protected]> Authored: Tue Oct 30 11:19:45 2018 -0600 Committer: Gary Gregory <[email protected]> Committed: Tue Oct 30 11:19:45 2018 -0600 ---------------------------------------------------------------------- .../core/appender/mom/JmsAppenderTest.java | 88 ++++++++++++++------ .../src/test/resources/JmsAppenderTest.xml | 5 ++ 2 files changed, 66 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5718f604/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java index d48167e..8696089 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderTest.java @@ -17,12 +17,23 @@ package org.apache.logging.log4j.core.appender.mom; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isA; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; + import java.io.Serializable; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; + import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; +import javax.jms.MapMessage; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Session; @@ -34,6 +45,7 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.junit.JndiRule; import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.SimpleMessage; import org.junit.Before; import org.junit.Rule; @@ -41,15 +53,6 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.rules.RuleChain; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; - @Category(Appenders.Jms.class) public class JmsAppenderTest { @@ -57,6 +60,7 @@ public class JmsAppenderTest { private static final String QUEUE_FACTORY_NAME = "jms/queues"; private static final String TOPIC_FACTORY_NAME = "jms/topics"; private static final String DESTINATION_NAME = "jms/destination"; + private static final String DESTINATION_NAME_ML = "jms/destination-ml"; private static final String QUEUE_NAME = "jms/queue"; private static final String TOPIC_NAME = "jms/topic"; private static final String LOG_MESSAGE = "Hello, world!"; @@ -65,9 +69,12 @@ public class JmsAppenderTest { private final Connection connection = mock(Connection.class); private final Session session = mock(Session.class); private final Destination destination = mock(Destination.class); + private final Destination destinationMl = mock(Destination.class); private final MessageProducer messageProducer = mock(MessageProducer.class); + private final MessageProducer messageProducerMl = mock(MessageProducer.class); private final TextMessage textMessage = mock(TextMessage.class); private final ObjectMessage objectMessage = mock(ObjectMessage.class); + private final MapMessage mapMessage = mock(MapMessage.class); private final JndiRule jndiRule = new JndiRule(createBindings()); private final LoggerContextRule ctx = new LoggerContextRule("JmsAppenderTest.xml"); @@ -75,10 +82,23 @@ public class JmsAppenderTest { @Rule public RuleChain rules = RuleChain.outerRule(jndiRule).around(ctx); + public JmsAppenderTest() throws Exception { + // this needs to set up before LoggerContextRule + given(connectionFactory.createConnection()).willReturn(connection); + given(connectionFactory.createConnection(anyString(), anyString())).willThrow(IllegalArgumentException.class); + given(connection.createSession(eq(false), eq(Session.AUTO_ACKNOWLEDGE))).willReturn(session); + given(session.createProducer(eq(destination))).willReturn(messageProducer); + given(session.createProducer(eq(destinationMl))).willReturn(messageProducerMl); + given(session.createTextMessage(anyString())).willReturn(textMessage); + given(session.createObjectMessage(isA(Serializable.class))).willReturn(objectMessage); + given(session.createMapMessage()).willReturn(mapMessage); + } + private Map<String, Object> createBindings() { final ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(); map.put(CONNECTION_FACTORY_NAME, connectionFactory); map.put(DESTINATION_NAME, destination); + map.put(DESTINATION_NAME_ML, destinationMl); map.put(QUEUE_FACTORY_NAME, connectionFactory); map.put(QUEUE_NAME, destination); map.put(TOPIC_FACTORY_NAME, connectionFactory); @@ -86,20 +106,30 @@ public class JmsAppenderTest { return map; } - public JmsAppenderTest() throws Exception { - // this needs to set up before LoggerContextRule - given(connectionFactory.createConnection()).willReturn(connection); - given(connectionFactory.createConnection(anyString(), anyString())).willThrow(IllegalArgumentException.class); - given(connection.createSession(eq(false), eq(Session.AUTO_ACKNOWLEDGE))).willReturn(session); - given(session.createProducer(eq(destination))).willReturn(messageProducer); - given(session.createTextMessage(anyString())).willReturn(textMessage); - given(session.createObjectMessage(isA(Serializable.class))).willReturn(objectMessage); + private Log4jLogEvent createLogEvent() { + return createLogEvent(new SimpleMessage(LOG_MESSAGE)); + } + + private Log4jLogEvent createLogEvent(final Message message) { + // @formatter:off + return Log4jLogEvent.newBuilder() + .setLoggerName(JmsAppenderTest.class.getName()) + .setLoggerFqcn(JmsAppenderTest.class.getName()) + .setLevel(Level.INFO) + .setMessage(message) + .build(); + // @formatter:on + } + + private Log4jLogEvent createMapMessageLogEvent() { + org.apache.logging.log4j.message.MapMessage<?, String> mapMessage = new org.apache.logging.log4j.message.MapMessage<>(); + return createLogEvent(mapMessage.with("testMesage", LOG_MESSAGE)); } @Before public void setUp() throws Exception { // we have 3 appenders all connecting to the same ConnectionFactory - then(connection).should(times(3)).start(); + then(connection).should(times(4)).start(); } @Test @@ -116,6 +146,19 @@ public class JmsAppenderTest { } @Test + public void testAppendToQueueWithMessageLayout() throws Exception { + final JmsAppender appender = (JmsAppender) ctx.getRequiredAppender("JmsAppender-MessageLayout"); + final LogEvent event = createMapMessageLogEvent(); + appender.append(event); + then(session).should().createMapMessage(); + then(mapMessage).should().setJMSTimestamp(anyLong()); + then(messageProducerMl).should().send(mapMessage); + appender.stop(); + then(session).should().close(); + then(connection).should().close(); + } + + @Test public void testJmsQueueAppenderCompatibility() throws Exception { final JmsAppender appender = (JmsAppender) ctx.getRequiredAppender("JmsQueueAppender"); final LogEvent expected = createLogEvent(); @@ -141,13 +184,4 @@ public class JmsAppenderTest { then(connection).should().close(); } - private static Log4jLogEvent createLogEvent() { - return Log4jLogEvent.newBuilder() - .setLoggerName(JmsAppenderTest.class.getName()) - .setLoggerFqcn(JmsAppenderTest.class.getName()) - .setLevel(Level.INFO) - .setMessage(new SimpleMessage(LOG_MESSAGE)) - .build(); - } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5718f604/log4j-core/src/test/resources/JmsAppenderTest.xml ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/resources/JmsAppenderTest.xml b/log4j-core/src/test/resources/JmsAppenderTest.xml index 9a5f951..f275ac4 100644 --- a/log4j-core/src/test/resources/JmsAppenderTest.xml +++ b/log4j-core/src/test/resources/JmsAppenderTest.xml @@ -22,6 +22,11 @@ destinationBindingName="jms/destination"> <PatternLayout pattern="%m"/> </JMS> + <JMS name="JmsAppender-MessageLayout" + factoryBindingName="jms/connectionFactory" + destinationBindingName="jms/destination-ml"> + <MessageLayout /> + </JMS> <!-- backwards compatibility tests --> <JMSQueue name="JmsQueueAppender" factoryBindingName="jms/queues"
