1 package ch.qos.logback.classic.net;
2
3 import javax.jms.ObjectMessage;
4
5 import junit.framework.TestCase;
6 import ch.qos.logback.classic.Level;
7 import ch.qos.logback.classic.net.mock.MockQueue;
8 import ch.qos.logback.classic.net.mock.MockQueueConnectionFactory;
9 import ch.qos.logback.classic.net.mock.MockQueueSender;
10 import ch.qos.logback.classic.spi.LoggingEvent;
11 import ch.qos.logback.classic.util.MockInitialContext;
12 import ch.qos.logback.classic.util.MockInitialContextFactory;
13 import ch.qos.logback.core.ContextBase;
14
15 public class JMSQueueAppenderTest extends TestCase {
16
17 ch.qos.logback.core.Context context;
18 JMSQueueAppender appender;
19
20 @Override
21 protected void setUp() throws Exception {
22 context = new ContextBase();
23 appender = new JMSQueueAppender();
24 appender.setContext(context);
25 appender.setName("jmsQueue");
26 appender.qcfBindingName = "queueCnxFactory";
27 appender.queueBindingName = "testQueue";
28 appender.setProviderURL("url");
29 appender.setInitialContextFactoryName(MockInitialContextFactory.class.getName());
30
31 MockInitialContext mic = MockInitialContextFactory.getContext();
32 mic.map.put(appender.qcfBindingName, new MockQueueConnectionFactory());
33 mic.map.put(appender.queueBindingName, new MockQueue(appender.queueBindingName));
34
35 super.setUp();
36 }
37
38 @Override
39 protected void tearDown() throws Exception {
40 appender = null;
41 context = null;
42 super.tearDown();
43 }
44
45 public void testAppendOk() {
46 appender.start();
47
48 LoggingEvent le = createLoggingEvent();
49 appender.append(le);
50
51 MockQueueSender qs = (MockQueueSender)appender.queueSender;
52 assertEquals(1, qs.getMessageList().size());
53 ObjectMessage message = (ObjectMessage) qs.getMessageList().get(0);
54 try {
55 assertEquals(le, message.getObject());
56 } catch (Exception e) {
57 fail();
58 }
59 }
60
61 public void testAppendFailure() {
62 appender.start();
63
64
65 appender.queueSender = null;
66
67 LoggingEvent le = createLoggingEvent();
68 for (int i = 1; i <= 3; i++) {
69 appender.append(le);
70 assertEquals(i, context.getStatusManager().getCount());
71 assertTrue(appender.isStarted());
72 }
73 appender.append(le);
74 assertEquals(4, context.getStatusManager().getCount());
75 assertFalse(appender.isStarted());
76 }
77
78 public void testStartMinimalInfo() {
79
80
81 appender.setProviderURL(null);
82 appender.start();
83
84 assertTrue(appender.isStarted());
85
86 try {
87 assertEquals(appender.queueBindingName, appender.queueSender.getQueue().getQueueName());
88 } catch (Exception e) {
89 fail();
90 }
91 }
92
93 public void testStartUserPass() {
94 appender.setUserName("test");
95 appender.setPassword("test");
96
97 appender.start();
98
99 assertTrue(appender.isStarted());
100
101 try {
102 assertEquals(appender.queueBindingName, appender.queueSender.getQueue().getQueueName());
103 } catch (Exception e) {
104 fail();
105 }
106 }
107
108 public void testStartFails() {
109 appender.queueBindingName = null;
110
111 appender.start();
112
113 assertFalse(appender.isStarted());
114 }
115
116 private LoggingEvent createLoggingEvent() {
117 LoggingEvent le = new LoggingEvent();
118 le.setLevel(Level.DEBUG);
119 le.setMessage("test message");
120 le.setTimeStamp(System.currentTimeMillis());
121 le.setThreadName(Thread.currentThread().getName());
122 return le;
123 }
124 }