1   /***
2    * 
3    * Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.logicblaze.lingo.util;
19  
20  import edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue;
21  import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
22  
23  import org.apache.activemq.ActiveMQConnectionFactory;
24  import org.apache.activemq.command.ActiveMQQueue;
25  import org.logicblaze.lingo.jms.JmsClient;
26  import org.logicblaze.lingo.jms.JmsQueue;
27  
28  import java.util.ArrayList;
29  import java.util.Arrays;
30  import java.util.List;
31  import java.util.NoSuchElementException;
32  
33  import junit.framework.TestCase;
34  
35  /***
36   * 
37   * @version $Revision$
38   */
39  public class JmsQueueTest extends TestCase {
40  
41      protected BlockingQueue queue;
42  
43      public void testQueueOperations() throws Exception {
44          assertTrue("queue should be empty", queue.isEmpty());
45          assertEquals("size()", 0, queue.size());
46  
47          queue.add("1");
48          assertEquals("size()", 1, queue.size());
49          assertTrue("queue should be non empty", !queue.isEmpty());
50  
51          queue.offer("2");
52          assertEquals("size()", 2, queue.size());
53          assertTrue("queue should be non empty", !queue.isEmpty());
54  
55          queue.offer("3", 1000, TimeUnit.MILLISECONDS);
56          assertEquals("size()", 3, queue.size());
57          assertTrue("queue should be non empty", !queue.isEmpty());
58  
59          assertEquals("peek()", "1", queue.peek());
60          assertTrue("contains 1", queue.contains("1"));
61  
62          assertTrue("contains all of 2", queue.containsAll(Arrays.asList(new Object[] { "2" })));
63          assertTrue("contains all of 1, 2", queue.containsAll(Arrays.asList(new Object[] { "1", "2" })));
64          assertTrue("contains all of 2, 3", queue.containsAll(Arrays.asList(new Object[] { "2", "3" })));
65          assertTrue("contains all of 1, 2, 3", queue.containsAll(Arrays.asList(new Object[] { "1", "2", "3" })));
66  
67          assertTrue("contains all of 1, 2, 4", !queue.containsAll(Arrays.asList(new Object[] { "1", "2", "4" })));
68  
69          System.out.println("Created a queue: " + queue);
70  
71          // now lets remove some stuff
72          Object value = queue.remove();
73          assertEquals("remove()", "1", value);
74  
75          value = queue.poll();
76          assertEquals("poll()", "2", value);
77          assertEquals("size()", 1, queue.size());
78          assertTrue("queue should be non empty", !queue.isEmpty());
79  
80          queue.clear();
81          assertTrue("queue should be empty", queue.isEmpty());
82          assertEquals("size()", 0, queue.size());
83  
84          assertTrue("remainingCapacity", queue.remainingCapacity() > 0);
85      }
86  
87      /*
88      public void testRemoveAll() throws Exception {
89          List sample = Arrays.asList(new Object[] { "A", "B", "C" });
90          queue.addAll(sample);
91          assertEquals("size()", 3, queue.size());
92          queue.removeAll(sample);
93          assertEquals("size()", 0, queue.size());
94      }
95      */
96  
97      public void testDrain() throws Exception {
98          List sample = Arrays.asList(new Object[] { "A", "B", "C" });
99          queue.addAll(sample);
100         assertEquals("size()", 3, queue.size());
101 
102         List list = new ArrayList();
103         queue.drainTo(list);
104 
105         assertEquals("size()", 0, queue.size());
106 
107         assertEquals("size of drained list", 3, list.size());
108     }
109 
110     public void testDrainConstrained() throws Exception {
111         List sample = Arrays.asList(new Object[] { "A", "B", "C" });
112         queue.addAll(sample);
113         assertEquals("size()", 3, queue.size());
114 
115         List list = new ArrayList();
116         queue.drainTo(list, 2);
117 
118         assertEquals("size()", 1, queue.size());
119 
120         assertEquals("size of drained list", 2, list.size());
121     }
122 
123     public void testRemoveOnEmptyQueue() throws Exception {
124         assertEquals("poll()", null, queue.poll());
125         try {
126             queue.remove();
127             fail("Should have thrown exception: NoSuchElementException");
128         }
129         catch (NoSuchElementException e) {
130             System.out.println("Caught expected exception: " + e);
131         }
132 
133     }
134 
135     protected void setUp() throws Exception {
136         queue = createQueue();
137     }
138 
139     protected void tearDown() throws Exception {
140         if (queue instanceof JmsQueue) {
141             JmsQueue service = (JmsQueue) queue;
142             service.close();
143         }
144     }
145 
146     protected BlockingQueue createQueue() {
147         JmsClient client = new JmsClient(new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"), new ActiveMQQueue(getName()));
148         return new JmsQueue(client);
149     }
150 }