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
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
89
90
91
92
93
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 }