PageRenderTime 90ms CodeModel.GetById 45ms app.highlight 41ms RepoModel.GetById 0ms app.codeStats 1ms

/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}