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      //make sure the append method does not work
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      //let's leave only what's in the setup()
80      //method, minus the providerURL
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 }