/jboss-as-7.1.1.Final/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/messaging/mgmt/JMSQueueManagementTestCase.java
Java | 424 lines | 314 code | 82 blank | 28 comment | 29 complexity | c8bd30733c6919a5db5c48f6c25f14c6 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
1/*
2 * JBoss, Home of Professional Open Source.
3 * Copyright 2011, Red Hat, Inc., and individual contributors
4 * as indicated by the @author tags. See the copyright.txt file in the
5 * distribution for a full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */
22
23package org.jboss.as.test.integration.messaging.mgmt;
24
25import java.io.IOException;
26import java.util.HashMap;
27import java.util.HashSet;
28import java.util.Set;
29
30import javax.jms.Message;
31import javax.jms.MessageProducer;
32import javax.jms.Queue;
33import javax.jms.QueueConnection;
34import javax.jms.QueueSession;
35import javax.jms.TopicSession;
36
37import junit.framework.Assert;
38import org.hornetq.api.core.TransportConfiguration;
39import org.hornetq.api.jms.HornetQJMSClient;
40import org.hornetq.api.jms.JMSFactoryType;
41import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory;
42import org.hornetq.jms.client.HornetQConnectionFactory;
43import org.jboss.arquillian.container.test.api.RunAsClient;
44import org.jboss.arquillian.junit.Arquillian;
45import org.jboss.as.arquillian.api.ContainerResource;
46import org.jboss.as.arquillian.container.ManagementClient;
47import org.jboss.as.test.shared.TestSuiteEnvironment;
48import org.jboss.as.test.integration.common.jms.JMSOperations;
49import org.jboss.as.test.integration.common.jms.JMSOperationsProvider;
50import org.jboss.dmr.ModelNode;
51import org.jboss.dmr.ModelType;
52import org.junit.After;
53import org.junit.AfterClass;
54import org.junit.Before;
55import org.junit.BeforeClass;
56import org.junit.Test;
57import org.junit.runner.RunWith;
58
59/**
60 * Tests the management API for JMS queues.
61 *
62 * @author Brian Stansberry (c) 2011 Red Hat Inc.
63 */
64@RunAsClient()
65@RunWith(Arquillian.class)
66public class JMSQueueManagementTestCase {
67
68 private static long count = System.currentTimeMillis();
69
70 private static HornetQConnectionFactory connectionFactory;
71
72 @BeforeClass
73 public static void beforeClass() throws Exception {HashMap<String, Object> map = new HashMap<String, Object>();
74 map.put("host", TestSuiteEnvironment.getServerAddress());
75 TransportConfiguration transportConfiguration =
76 new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
77 connectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
78 connectionFactory.setClientID("sender");
79 connectionFactory.setBlockOnDurableSend(true);
80 connectionFactory.setBlockOnNonDurableSend(true);
81 }
82
83 @AfterClass
84 public static void afterClass() throws Exception {
85
86 if (connectionFactory != null) {
87 connectionFactory.close();
88 }
89 }
90
91 @ContainerResource
92 private ManagementClient managementClient;
93
94 private JMSOperations adminSupport;
95
96 private QueueConnection conn;
97 private Queue queue;
98 private Queue otherQueue;
99 private QueueSession session;
100
101 private QueueConnection consumerConn;
102 private QueueSession consumerSession;
103
104 @Before
105 public void addQueues() throws Exception {
106
107 adminSupport = JMSOperationsProvider.getInstance(managementClient);
108
109 count++;
110 adminSupport.createJmsQueue(getQueueName(), getQueueJndiName());
111 adminSupport.createJmsQueue(getOtherQueueName(), getOtherQueueJndiName());
112
113 conn = connectionFactory.createQueueConnection("guest", "guest");
114 conn.start();
115 queue = HornetQJMSClient.createQueue(getQueueName());
116 otherQueue = HornetQJMSClient.createQueue(getOtherQueueName());
117 session = conn.createQueueSession(false, TopicSession.AUTO_ACKNOWLEDGE);
118 }
119
120 @After
121 public void removeQueues() throws Exception {
122
123 if (conn != null) {
124 conn.stop();
125 }
126 if (session != null) {
127 session.close();
128 }
129 if (conn != null) {
130 conn.close();
131 }
132
133 if (consumerConn != null) {
134 consumerConn.stop();
135 }
136 if (consumerSession != null) {
137 consumerSession.close();
138 }
139 if (consumerConn != null) {
140 consumerConn.close();
141 }
142
143 if (adminSupport != null) {
144 adminSupport.removeJmsQueue(getQueueName());
145 adminSupport.removeJmsQueue(getOtherQueueName());
146 adminSupport.close();
147 }
148 }
149
150 @Test
151 public void testListAndCountMessages() throws Exception {
152
153 MessageProducer producer = session.createProducer(queue);
154 producer.send(session.createTextMessage("A"));
155 producer.send(session.createTextMessage("B"));
156
157 ModelNode result = execute(getQueueOperation("list-messages"), true);
158 Assert.assertTrue(result.isDefined());
159 Assert.assertEquals(2, result.asList().size());
160
161 result = execute(getQueueOperation("count-messages"), true);
162 Assert.assertTrue(result.isDefined());
163 Assert.assertEquals(2, result.asInt());
164 }
165
166 @Test
167 public void testMessageCounters() throws Exception {
168
169 MessageProducer producer = session.createProducer(queue);
170 producer.send(session.createTextMessage("A"));
171 producer.send(session.createTextMessage("B"));
172
173 ModelNode result = execute(getQueueOperation("list-message-counter-as-json"), true);
174 Assert.assertTrue(result.isDefined());
175 Assert.assertEquals(ModelType.STRING, result.getType());
176
177 result = execute(getQueueOperation("list-message-counter-as-html"), true);
178 Assert.assertTrue(result.isDefined());
179 Assert.assertEquals(ModelType.STRING, result.getType());
180
181 result = execute(getQueueOperation("list-message-counter-history-as-json"), true);
182 Assert.assertTrue(result.isDefined());
183 Assert.assertEquals(ModelType.STRING, result.getType());
184
185 result = execute(getQueueOperation("list-message-counter-history-as-html"), true);
186 Assert.assertTrue(result.isDefined());
187 Assert.assertEquals(ModelType.STRING, result.getType());
188
189 result = execute(getQueueOperation("reset-message-counter"), true);
190 Assert.assertFalse(result.isDefined());
191
192 result = execute(getQueueOperation("list-message-counter-history-as-json"), true);
193 Assert.assertTrue(result.isDefined());
194 Assert.assertEquals(ModelType.STRING, result.getType());
195
196 }
197
198 @Test
199 public void testPauseAndResume() throws Exception {
200
201 final ModelNode readAttr = getQueueOperation("read-attribute");
202 readAttr.get("name").set("paused");
203
204 ModelNode result = execute(readAttr, true);
205 Assert.assertTrue(result.isDefined());
206 Assert.assertFalse(result.asBoolean());
207
208 result = execute(getQueueOperation("pause"), true);
209 Assert.assertFalse(result.isDefined());
210
211 result = execute(readAttr, true);
212 Assert.assertTrue(result.isDefined());
213 Assert.assertTrue(result.asBoolean());
214
215 result = execute(getQueueOperation("resume"), true);
216 Assert.assertFalse(result.isDefined());
217
218 result = execute(readAttr, true);
219 Assert.assertTrue(result.isDefined());
220 Assert.assertFalse(result.asBoolean());
221 }
222
223// @org.junit.Ignore("AS7-2480")
224 @Test
225 public void testMessageRemoval() throws Exception {
226
227 MessageProducer producer = session.createProducer(queue);
228 Message msgA = session.createTextMessage("A");
229 producer.send(msgA);
230 producer.send(session.createTextMessage("B"));
231 producer.send(session.createTextMessage("C"));
232
233 final ModelNode op = getQueueOperation("remove-message");
234 op.get("message-id").set(msgA.getJMSMessageID());
235
236 ModelNode result = execute(op, true);
237 Assert.assertTrue(result.isDefined());
238 Assert.assertTrue(result.asBoolean());
239
240 result = execute(getQueueOperation("count-messages"), true);
241 Assert.assertTrue(result.isDefined());
242 Assert.assertEquals(2, result.asInt());
243
244 result = execute(getQueueOperation("remove-messages"), true);
245 Assert.assertTrue(result.isDefined());
246 Assert.assertEquals(2, result.asInt());
247
248 result = execute(getQueueOperation("count-messages"), true);
249 Assert.assertTrue(result.isDefined());
250 Assert.assertEquals(0, result.asInt());
251
252 }
253
254// @org.junit.Ignore("AS7-2480")
255 @Test
256 public void testMessageMovement() throws Exception {
257
258 MessageProducer producer = session.createProducer(queue);
259 Message msgA = session.createTextMessage("A");
260 producer.send(msgA);
261 producer.send(session.createTextMessage("B"));
262 producer.send(session.createTextMessage("C"));
263
264 ModelNode op = getQueueOperation("move-message");
265 op.get("message-id").set(msgA.getJMSMessageID());
266 op.get("other-queue-name").set(getOtherQueueName());
267
268 ModelNode result = execute(op, true);
269 Assert.assertTrue(result.isDefined());
270 Assert.assertTrue(result.asBoolean());
271
272 result = execute(getQueueOperation("count-messages"), true);
273 Assert.assertTrue(result.isDefined());
274 Assert.assertEquals(2, result.asInt());
275
276 op = getQueueOperation("move-messages");
277 op.get("other-queue-name").set(getOtherQueueName());
278
279 result = execute(op, true);
280 Assert.assertTrue(result.isDefined());
281 Assert.assertEquals(2, result.asInt());
282
283 result = execute(getQueueOperation("count-messages"), true);
284 Assert.assertTrue(result.isDefined());
285 Assert.assertEquals(0, result.asInt());
286
287 }
288
289 @Test
290 public void testChangeMessagePriority() throws Exception {
291
292 MessageProducer producer = session.createProducer(queue);
293 Message msgA = session.createTextMessage("A");
294 producer.send(msgA);
295 producer.send(session.createTextMessage("B"));
296 producer.send(session.createTextMessage("C"));
297
298 Set<Integer> priorities = new HashSet<Integer>();
299 ModelNode result = execute(getQueueOperation("list-messages"), true);
300 Assert.assertEquals(3, result.asInt());
301 for (ModelNode node : result.asList()) {
302 priorities.add(node.get("JMSPriority").asInt());
303 }
304 int newPriority = -1;
305 for (int i = 0; i < 10; i++) {
306 if (!priorities.contains(i)) {
307 newPriority = i;
308 break;
309 }
310 }
311
312 ModelNode op = getQueueOperation("change-message-priority");
313 op.get("message-id").set(msgA.getJMSMessageID());
314 op.get("new-priority").set(newPriority);
315
316 result = execute(op, true);
317 Assert.assertTrue(result.isDefined());
318 Assert.assertTrue(result.asBoolean());
319
320 result = execute(getQueueOperation("list-messages"), true);
321 boolean found = false;
322 for (ModelNode node : result.asList()) {
323 if (msgA.getJMSMessageID().equals(node.get("JMSMessageID").asString())) {
324 Assert.assertEquals(newPriority, node.get("JMSPriority").asInt());
325 found = true;
326 break;
327 }
328 }
329 Assert.assertTrue(found);
330
331 op = getQueueOperation("change-messages-priority");
332 op.get("new-priority").set(newPriority);
333
334 result = execute(op, true);
335 Assert.assertTrue(result.isDefined());
336 Assert.assertTrue(result.asInt() > 1 && result.asInt() < 4);
337
338 result = execute(getQueueOperation("list-messages"), true);
339 for (ModelNode node : result.asList()) {
340 Assert.assertEquals(newPriority, node.get("JMSPriority").asInt());
341 }
342
343 }
344
345 @Test
346 public void testListConsumers() throws Exception {
347
348
349 HashMap<String, Object> map = new HashMap<String, Object>();
350 map.put("host", TestSuiteEnvironment.getServerAddress());
351 TransportConfiguration transportConfiguration =
352 new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
353 HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
354 cf.setClientID("consumer");
355 consumerConn = cf.createQueueConnection("guest", "guest");
356 consumerConn.start();
357 consumerSession = consumerConn.createQueueSession(false, TopicSession.AUTO_ACKNOWLEDGE);
358
359 ModelNode result = execute(getQueueOperation("list-consumers-as-json"), true);
360 Assert.assertTrue(result.isDefined());
361 Assert.assertEquals(ModelType.STRING, result.getType());
362 }
363
364 @Test
365 public void testAddJndi() throws Exception {
366 ModelNode op = getQueueOperation("add-jndi");
367 op.get("jndi-binding").set("queue/added" + count);
368
369 ModelNode result = execute(op, true);
370 Assert.assertFalse(result.isDefined());
371
372 op = getQueueOperation("read-attribute");
373 op.get("name").set("entries");
374 result = execute(op, true);
375 Assert.assertTrue(result.isDefined());
376 for (ModelNode binding : result.asList()) {
377 if (binding.asString().equals("queue/added" + count))
378 return;
379 }
380 Assert.fail("queue/added" + count + " was not found");
381 }
382
383 private ModelNode getQueueOperation(String operationName) {
384 final ModelNode address = new ModelNode();
385 address.add("subsystem", "messaging");
386 address.add("hornetq-server", "default");
387 address.add("jms-queue", getQueueName());
388 return org.jboss.as.controller.operations.common.Util.getEmptyOperation(operationName, address);
389 }
390
391 private ModelNode execute(final ModelNode op, final boolean expectSuccess) throws IOException {
392 ModelNode response = managementClient.getControllerClient().execute(op);
393 final String outcome = response.get("outcome").asString();
394 if (expectSuccess) {
395 if (!"success".equals(outcome)) {
396 System.out.println(response);
397 }
398 Assert.assertEquals("success", outcome);
399 return response.get("result");
400 } else {
401 if ("success".equals(outcome)) {
402 System.out.println(response);
403 }
404 Assert.assertEquals("failed", outcome);
405 return response.get("failure-description");
406 }
407 }
408
409 private String getQueueName() {
410 return getClass().getSimpleName() + count;
411 }
412
413 private String getQueueJndiName() {
414 return "queue/" + getQueueName();
415 }
416
417 private String getOtherQueueName() {
418 return getClass().getSimpleName() + "other" + count;
419 }
420
421 private String getOtherQueueJndiName() {
422 return "queue/" + getOtherQueueName();
423 }
424}