View Javadoc

1   /*
2    * $Id: JmsAcknowledgementTestCase.java 22433 2011-07-18 10:18:21Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.jms.reliability;
12  
13  import javax.jms.JMSException;
14  import javax.jms.Message;
15  import javax.jms.MessageListener;
16  import javax.jms.Session;
17  
18  import org.junit.Test;
19  
20  import static org.junit.Assert.assertNotNull;
21  import static org.junit.Assert.assertNull;
22  import static org.junit.Assert.fail;
23  
24  public class JmsAcknowledgementTestCase extends AbstractJmsReliabilityTestCase
25  {
26      @Override
27      protected String getConfigResources()
28      {
29          return "reliability/activemq-config.xml";
30      }
31  
32      @Test
33      public void testAutoAckSync() throws Exception
34      {
35          acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
36          putMessageOnQueue("sanity");
37          // Read message from queue
38          Message msg = readMessageFromQueue("sanity");
39          assertNotNull(msg);
40          // No more messages
41          msg = readMessageFromQueue("sanity");
42          assertNull(msg);
43      }
44  
45      @Test
46      public void testClientAckSync() throws Exception
47      {
48          acknowledgeMode = Session.CLIENT_ACKNOWLEDGE;
49          putMessageOnQueue("sanity");
50          // Read message but don't acknowledge
51          Message msg = readMessageFromQueue("sanity");
52          assertNotNull(msg);
53          closeConsumer();
54  
55          // Message is still on queue
56          msg = readMessageFromQueue("sanity");
57          assertNotNull(msg);
58          // Acknowledge
59          msg.acknowledge();
60          closeConsumer();
61  
62          // Now message is gone
63          msg = readMessageFromQueue("sanity");
64          assertNull(msg);
65      }
66  
67      @Test
68      public void testAutoAckAsync() throws Exception
69      {
70          acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
71  
72          listenOnQueue("sanity", new MessageListener()
73          {
74              @Override
75              public void onMessage(Message message)
76              {
77                  // Message is processed normally
78              }
79          });
80          putMessageOnQueue("sanity");
81          Thread.sleep(500);
82          closeConsumer();
83  
84          // Delivery was successful so message should be gone
85          Message msg = readMessageFromQueue("sanity");
86          assertNull(msg);
87      }
88  
89      @Test
90      public void testAutoAckAsyncWithException() throws Exception
91      {
92          acknowledgeMode = Session.AUTO_ACKNOWLEDGE;
93  
94          listenOnQueue("sanity", new MessageListener()
95          {
96              @Override
97              public void onMessage(Message message)
98              {
99                  try
100                 {
101                     session.recover();
102                 }
103                 catch (JMSException e)
104                 {
105                     fail(e.getMessage());
106                 }
107             }
108         });
109         putMessageOnQueue("sanity");
110         Thread.sleep(500);
111         closeConsumer();
112 
113         // Delivery failed so message should be back on the queue
114         Message msg = readMessageFromQueue("sanity");
115         assertNotNull(msg);
116     }
117 
118     @Test
119     public void testClientAckAsync() throws Exception
120     {
121         acknowledgeMode = Session.CLIENT_ACKNOWLEDGE;
122 
123         listenOnQueue("sanity", new MessageListener()
124         {
125             @Override
126             public void onMessage(Message message)
127             {
128                 try
129                 {
130                     // Message is processed and acknowledged
131                     message.acknowledge();
132                 }
133                 catch (JMSException e)
134                 {
135                     fail(e.getMessage());
136                 }
137             }
138         });
139         putMessageOnQueue("sanity");
140         Thread.sleep(500);
141         closeConsumer();
142 
143         // Delivery was successful so message should be gone
144         Message msg = readMessageFromQueue("sanity");
145         assertNull(msg);
146     }
147 
148     @Test
149     public void testClientAckAsyncWithException() throws Exception
150     {
151         acknowledgeMode = Session.CLIENT_ACKNOWLEDGE;
152 
153         listenOnQueue("sanity", new MessageListener()
154         {
155             @Override
156             public void onMessage(Message message)
157             {
158                 // Exception occured, message is not acknowledged
159             }
160         });
161         putMessageOnQueue("sanity");
162         Thread.sleep(500);
163         closeConsumer();
164 
165         // Delivery failed so message should be back on the queue
166         Message msg = readMessageFromQueue("sanity");
167         assertNotNull(msg);
168     }
169 }