You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2017/01/07 23:29:06 UTC
[3/4] logging-log4j2 git commit: [LOG4J2-1774]: Refactor
JmsAppenderTest to use JndiRule and Mockito
[LOG4J2-1774]: Refactor JmsAppenderTest to use JndiRule and Mockito
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/50609f9c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/50609f9c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/50609f9c
Branch: refs/heads/master
Commit: 50609f9c70679c03bc94229ea4fdd3d11337bb92
Parents: 3c7a91f
Author: Matt Sicker <ma...@spr.com>
Authored: Sat Jan 7 17:26:48 2017 -0600
Committer: Matt Sicker <ma...@spr.com>
Committed: Sat Jan 7 17:26:48 2017 -0600
----------------------------------------------------------------------
.../core/appender/mom/JmsAppenderTest.java | 139 ++++++++++---------
.../src/test/resources/JmsAppenderTest.xml | 2 +-
2 files changed, 76 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/50609f9c/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 9d1c65a..ddd87cc 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,114 +17,125 @@
package org.apache.logging.log4j.core.appender.mom;
-import javax.jms.Message;
+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.MessageProducer;
import javax.jms.ObjectMessage;
+import javax.jms.Session;
import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
-import org.apache.logging.log4j.core.util.JndiCloser;
+import org.apache.logging.log4j.junit.JndiRule;
import org.apache.logging.log4j.junit.LoggerContextRule;
import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
-import org.mockejb.jms.MockQueue;
-import org.mockejb.jms.MockTopic;
-import org.mockejb.jms.QueueConnectionFactoryImpl;
-import org.mockejb.jms.TopicConnectionFactoryImpl;
-import org.mockejb.jndi.MockContextFactory;
+import org.junit.rules.RuleChain;
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.junit.Assert.*;
+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;
public class JmsAppenderTest {
- private static final String CONNECTION_FACTORY_NAME = "jms/queues";
+ private static final String CONNECTION_FACTORY_NAME = "jms/connectionFactory";
+ 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 QUEUE_NAME = "jms/queue";
private static final String TOPIC_NAME = "jms/topic";
private static final String LOG_MESSAGE = "Hello, world!";
- private static Context context;
-
- private static MockQueue destination;
- private static MockQueue queue;
- private static MockTopic topic;
-
- @BeforeClass
- public static void setUpClass() throws Exception {
- MockContextFactory.setAsInitial();
- context = new InitialContext();
- context.rebind(CONNECTION_FACTORY_NAME, new QueueConnectionFactoryImpl());
- context.rebind(TOPIC_FACTORY_NAME, new TopicConnectionFactoryImpl());
- destination = new MockQueue(DESTINATION_NAME);
- context.rebind(DESTINATION_NAME, destination);
- queue = new MockQueue(QUEUE_NAME);
- context.rebind(QUEUE_NAME, queue);
- topic = new MockTopic(TOPIC_NAME);
- context.rebind(TOPIC_NAME, topic);
+ private ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
+ private Connection connection = mock(Connection.class);
+ private Session session = mock(Session.class);
+ private Destination destination = mock(Destination.class);
+ private MessageProducer messageProducer = mock(MessageProducer.class);
+ private TextMessage textMessage = mock(TextMessage.class);
+ private ObjectMessage objectMessage = mock(ObjectMessage.class);
+
+ private JndiRule jndiRule = new JndiRule(createBindings());
+ private LoggerContextRule ctx = new LoggerContextRule("JmsAppenderTest.xml");
+
+ @Rule
+ public RuleChain rules = RuleChain.outerRule(jndiRule).around(ctx);
+
+ 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(QUEUE_FACTORY_NAME, connectionFactory);
+ map.put(QUEUE_NAME, destination);
+ map.put(TOPIC_FACTORY_NAME, connectionFactory);
+ map.put(TOPIC_NAME, destination);
+ return map;
}
- @AfterClass
- public static void tearDownClass() throws Exception {
- JndiCloser.close(context);
+ 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);
}
- @Rule
- public LoggerContextRule ctx = new LoggerContextRule("JmsAppenderTest.xml");
+ @Before
+ public void setUp() throws Exception {
+ // we have 3 appenders all connecting to the same ConnectionFactory
+ then(connection).should(times(3)).start();
+ }
@Test
public void testAppendToQueue() throws Exception {
- assertEquals(0, destination.size());
final JmsAppender appender = (JmsAppender) ctx.getRequiredAppender("JmsAppender");
final LogEvent event = createLogEvent();
appender.append(event);
- assertEquals(1, destination.size());
- final Message message = destination.getMessageAt(0);
- assertNotNull(message);
- assertThat(message, instanceOf(TextMessage.class));
- final TextMessage textMessage = (TextMessage) message;
- assertEquals(LOG_MESSAGE, textMessage.getText());
+ then(session).should().createTextMessage(eq(LOG_MESSAGE));
+ then(textMessage).should().setJMSTimestamp(anyLong());
+ then(messageProducer).should().send(textMessage);
+ appender.stop();
+ then(session).should().close();
+ then(connection).should().close();
}
@Test
public void testJmsQueueAppenderCompatibility() throws Exception {
- assertEquals(0, queue.size());
final JmsAppender appender = (JmsAppender) ctx.getRequiredAppender("JmsQueueAppender");
final LogEvent expected = createLogEvent();
appender.append(expected);
- assertEquals(1, queue.size());
- final Message message = queue.getMessageAt(0);
- assertNotNull(message);
- assertThat(message, instanceOf(ObjectMessage.class));
- final ObjectMessage objectMessage = (ObjectMessage) message;
- final Object o = objectMessage.getObject();
- assertThat(o, instanceOf(LogEvent.class));
- final LogEvent actual = (LogEvent) o;
- assertEquals(expected.getMessage().getFormattedMessage(), actual.getMessage().getFormattedMessage());
+ then(session).should().createObjectMessage(eq(expected));
+ then(objectMessage).should().setJMSTimestamp(anyLong());
+ then(messageProducer).should().send(objectMessage);
+ appender.stop();
+ then(session).should().close();
+ then(connection).should().close();
}
@Test
public void testJmsTopicAppenderCompatibility() throws Exception {
- assertEquals(0, topic.size());
final JmsAppender appender = (JmsAppender) ctx.getRequiredAppender("JmsTopicAppender");
final LogEvent expected = createLogEvent();
appender.append(expected);
- assertEquals(1, topic.size());
- final Message message = topic.getMessageAt(0);
- assertNotNull(message);
- assertThat(message, instanceOf(ObjectMessage.class));
- final ObjectMessage objectMessage = (ObjectMessage) message;
- final Object o = objectMessage.getObject();
- assertThat(o, instanceOf(LogEvent.class));
- final LogEvent actual = (LogEvent) o;
- assertEquals(expected.getMessage().getFormattedMessage(), actual.getMessage().getFormattedMessage());
+ then(session).should().createObjectMessage(eq(expected));
+ then(objectMessage).should().setJMSTimestamp(anyLong());
+ then(messageProducer).should().send(objectMessage);
+ appender.stop();
+ then(session).should().close();
+ then(connection).should().close();
}
private static Log4jLogEvent createLogEvent() {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/50609f9c/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 b4f1d3c..9a5f951 100644
--- a/log4j-core/src/test/resources/JmsAppenderTest.xml
+++ b/log4j-core/src/test/resources/JmsAppenderTest.xml
@@ -18,7 +18,7 @@
<Configuration name="JmsAppenderTest" status="OFF">
<Appenders>
<JMS name="JmsAppender"
- factoryBindingName="jms/queues"
+ factoryBindingName="jms/connectionFactory"
destinationBindingName="jms/destination">
<PatternLayout pattern="%m"/>
</JMS>