PageRenderTime 44ms CodeModel.GetById 15ms 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. package org.jboss.as.test.integration.messaging.mgmt;
  23. import java.io.IOException;
  24. import java.util.HashMap;
  25. import java.util.HashSet;
  26. import java.util.Set;
  27. import javax.jms.Message;
  28. import javax.jms.MessageProducer;
  29. import javax.jms.Queue;
  30. import javax.jms.QueueConnection;
  31. import javax.jms.QueueSession;
  32. import javax.jms.TopicSession;
  33. import junit.framework.Assert;
  34. import org.hornetq.api.core.TransportConfiguration;
  35. import org.hornetq.api.jms.HornetQJMSClient;
  36. import org.hornetq.api.jms.JMSFactoryType;
  37. import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory;
  38. import org.hornetq.jms.client.HornetQConnectionFactory;
  39. import org.jboss.arquillian.container.test.api.RunAsClient;
  40. import org.jboss.arquillian.junit.Arquillian;
  41. import org.jboss.as.arquillian.api.ContainerResource;
  42. import org.jboss.as.arquillian.container.ManagementClient;
  43. import org.jboss.as.test.shared.TestSuiteEnvironment;
  44. import org.jboss.as.test.integration.common.jms.JMSOperations;
  45. import org.jboss.as.test.integration.common.jms.JMSOperationsProvider;
  46. import org.jboss.dmr.ModelNode;
  47. import org.jboss.dmr.ModelType;
  48. import org.junit.After;
  49. import org.junit.AfterClass;
  50. import org.junit.Before;
  51. import org.junit.BeforeClass;
  52. import org.junit.Test;
  53. import org.junit.runner.RunWith;
  54. /**
  55. * Tests the management API for JMS queues.
  56. *
  57. * @author Brian Stansberry (c) 2011 Red Hat Inc.
  58. */
  59. @RunAsClient()
  60. @RunWith(Arquillian.class)
  61. public class JMSQueueManagementTestCase {
  62. private static long count = System.currentTimeMillis();
  63. private static HornetQConnectionFactory connectionFactory;
  64. @BeforeClass
  65. public static void beforeClass() throws Exception {HashMap<String, Object> map = new HashMap<String, Object>();
  66. map.put("host", TestSuiteEnvironment.getServerAddress());
  67. TransportConfiguration transportConfiguration =
  68. new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
  69. connectionFactory = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
  70. connectionFactory.setClientID("sender");
  71. connectionFactory.setBlockOnDurableSend(true);
  72. connectionFactory.setBlockOnNonDurableSend(true);
  73. }
  74. @AfterClass
  75. public static void afterClass() throws Exception {
  76. if (connectionFactory != null) {
  77. connectionFactory.close();
  78. }
  79. }
  80. @ContainerResource
  81. private ManagementClient managementClient;
  82. private JMSOperations adminSupport;
  83. private QueueConnection conn;
  84. private Queue queue;
  85. private Queue otherQueue;
  86. private QueueSession session;
  87. private QueueConnection consumerConn;
  88. private QueueSession consumerSession;
  89. @Before
  90. public void addQueues() throws Exception {
  91. adminSupport = JMSOperationsProvider.getInstance(managementClient);
  92. count++;
  93. adminSupport.createJmsQueue(getQueueName(), getQueueJndiName());
  94. adminSupport.createJmsQueue(getOtherQueueName(), getOtherQueueJndiName());
  95. conn = connectionFactory.createQueueConnection("guest", "guest");
  96. conn.start();
  97. queue = HornetQJMSClient.createQueue(getQueueName());
  98. otherQueue = HornetQJMSClient.createQueue(getOtherQueueName());
  99. session = conn.createQueueSession(false, TopicSession.AUTO_ACKNOWLEDGE);
  100. }
  101. @After
  102. public void removeQueues() throws Exception {
  103. if (conn != null) {
  104. conn.stop();
  105. }
  106. if (session != null) {
  107. session.close();
  108. }
  109. if (conn != null) {
  110. conn.close();
  111. }
  112. if (consumerConn != null) {
  113. consumerConn.stop();
  114. }
  115. if (consumerSession != null) {
  116. consumerSession.close();
  117. }
  118. if (consumerConn != null) {
  119. consumerConn.close();
  120. }
  121. if (adminSupport != null) {
  122. adminSupport.removeJmsQueue(getQueueName());
  123. adminSupport.removeJmsQueue(getOtherQueueName());
  124. adminSupport.close();
  125. }
  126. }
  127. @Test
  128. public void testListAndCountMessages() throws Exception {
  129. MessageProducer producer = session.createProducer(queue);
  130. producer.send(session.createTextMessage("A"));
  131. producer.send(session.createTextMessage("B"));
  132. ModelNode result = execute(getQueueOperation("list-messages"), true);
  133. Assert.assertTrue(result.isDefined());
  134. Assert.assertEquals(2, result.asList().size());
  135. result = execute(getQueueOperation("count-messages"), true);
  136. Assert.assertTrue(result.isDefined());
  137. Assert.assertEquals(2, result.asInt());
  138. }
  139. @Test
  140. public void testMessageCounters() throws Exception {
  141. MessageProducer producer = session.createProducer(queue);
  142. producer.send(session.createTextMessage("A"));
  143. producer.send(session.createTextMessage("B"));
  144. ModelNode result = execute(getQueueOperation("list-message-counter-as-json"), true);
  145. Assert.assertTrue(result.isDefined());
  146. Assert.assertEquals(ModelType.STRING, result.getType());
  147. result = execute(getQueueOperation("list-message-counter-as-html"), true);
  148. Assert.assertTrue(result.isDefined());
  149. Assert.assertEquals(ModelType.STRING, result.getType());
  150. result = execute(getQueueOperation("list-message-counter-history-as-json"), true);
  151. Assert.assertTrue(result.isDefined());
  152. Assert.assertEquals(ModelType.STRING, result.getType());
  153. result = execute(getQueueOperation("list-message-counter-history-as-html"), true);
  154. Assert.assertTrue(result.isDefined());
  155. Assert.assertEquals(ModelType.STRING, result.getType());
  156. result = execute(getQueueOperation("reset-message-counter"), true);
  157. Assert.assertFalse(result.isDefined());
  158. result = execute(getQueueOperation("list-message-counter-history-as-json"), true);
  159. Assert.assertTrue(result.isDefined());
  160. Assert.assertEquals(ModelType.STRING, result.getType());
  161. }
  162. @Test
  163. public void testPauseAndResume() throws Exception {
  164. final ModelNode readAttr = getQueueOperation("read-attribute");
  165. readAttr.get("name").set("paused");
  166. ModelNode result = execute(readAttr, true);
  167. Assert.assertTrue(result.isDefined());
  168. Assert.assertFalse(result.asBoolean());
  169. result = execute(getQueueOperation("pause"), true);
  170. Assert.assertFalse(result.isDefined());
  171. result = execute(readAttr, true);
  172. Assert.assertTrue(result.isDefined());
  173. Assert.assertTrue(result.asBoolean());
  174. result = execute(getQueueOperation("resume"), true);
  175. Assert.assertFalse(result.isDefined());
  176. result = execute(readAttr, true);
  177. Assert.assertTrue(result.isDefined());
  178. Assert.assertFalse(result.asBoolean());
  179. }
  180. // @org.junit.Ignore("AS7-2480")
  181. @Test
  182. public void testMessageRemoval() throws Exception {
  183. MessageProducer producer = session.createProducer(queue);
  184. Message msgA = session.createTextMessage("A");
  185. producer.send(msgA);
  186. producer.send(session.createTextMessage("B"));
  187. producer.send(session.createTextMessage("C"));
  188. final ModelNode op = getQueueOperation("remove-message");
  189. op.get("message-id").set(msgA.getJMSMessageID());
  190. ModelNode result = execute(op, true);
  191. Assert.assertTrue(result.isDefined());
  192. Assert.assertTrue(result.asBoolean());
  193. result = execute(getQueueOperation("count-messages"), true);
  194. Assert.assertTrue(result.isDefined());
  195. Assert.assertEquals(2, result.asInt());
  196. result = execute(getQueueOperation("remove-messages"), true);
  197. Assert.assertTrue(result.isDefined());
  198. Assert.assertEquals(2, result.asInt());
  199. result = execute(getQueueOperation("count-messages"), true);
  200. Assert.assertTrue(result.isDefined());
  201. Assert.assertEquals(0, result.asInt());
  202. }
  203. // @org.junit.Ignore("AS7-2480")
  204. @Test
  205. public void testMessageMovement() throws Exception {
  206. MessageProducer producer = session.createProducer(queue);
  207. Message msgA = session.createTextMessage("A");
  208. producer.send(msgA);
  209. producer.send(session.createTextMessage("B"));
  210. producer.send(session.createTextMessage("C"));
  211. ModelNode op = getQueueOperation("move-message");
  212. op.get("message-id").set(msgA.getJMSMessageID());
  213. op.get("other-queue-name").set(getOtherQueueName());
  214. ModelNode result = execute(op, true);
  215. Assert.assertTrue(result.isDefined());
  216. Assert.assertTrue(result.asBoolean());
  217. result = execute(getQueueOperation("count-messages"), true);
  218. Assert.assertTrue(result.isDefined());
  219. Assert.assertEquals(2, result.asInt());
  220. op = getQueueOperation("move-messages");
  221. op.get("other-queue-name").set(getOtherQueueName());
  222. result = execute(op, true);
  223. Assert.assertTrue(result.isDefined());
  224. Assert.assertEquals(2, result.asInt());
  225. result = execute(getQueueOperation("count-messages"), true);
  226. Assert.assertTrue(result.isDefined());
  227. Assert.assertEquals(0, result.asInt());
  228. }
  229. @Test
  230. public void testChangeMessagePriority() throws Exception {
  231. MessageProducer producer = session.createProducer(queue);
  232. Message msgA = session.createTextMessage("A");
  233. producer.send(msgA);
  234. producer.send(session.createTextMessage("B"));
  235. producer.send(session.createTextMessage("C"));
  236. Set<Integer> priorities = new HashSet<Integer>();
  237. ModelNode result = execute(getQueueOperation("list-messages"), true);
  238. Assert.assertEquals(3, result.asInt());
  239. for (ModelNode node : result.asList()) {
  240. priorities.add(node.get("JMSPriority").asInt());
  241. }
  242. int newPriority = -1;
  243. for (int i = 0; i < 10; i++) {
  244. if (!priorities.contains(i)) {
  245. newPriority = i;
  246. break;
  247. }
  248. }
  249. ModelNode op = getQueueOperation("change-message-priority");
  250. op.get("message-id").set(msgA.getJMSMessageID());
  251. op.get("new-priority").set(newPriority);
  252. result = execute(op, true);
  253. Assert.assertTrue(result.isDefined());
  254. Assert.assertTrue(result.asBoolean());
  255. result = execute(getQueueOperation("list-messages"), true);
  256. boolean found = false;
  257. for (ModelNode node : result.asList()) {
  258. if (msgA.getJMSMessageID().equals(node.get("JMSMessageID").asString())) {
  259. Assert.assertEquals(newPriority, node.get("JMSPriority").asInt());
  260. found = true;
  261. break;
  262. }
  263. }
  264. Assert.assertTrue(found);
  265. op = getQueueOperation("change-messages-priority");
  266. op.get("new-priority").set(newPriority);
  267. result = execute(op, true);
  268. Assert.assertTrue(result.isDefined());
  269. Assert.assertTrue(result.asInt() > 1 && result.asInt() < 4);
  270. result = execute(getQueueOperation("list-messages"), true);
  271. for (ModelNode node : result.asList()) {
  272. Assert.assertEquals(newPriority, node.get("JMSPriority").asInt());
  273. }
  274. }
  275. @Test
  276. public void testListConsumers() throws Exception {
  277. HashMap<String, Object> map = new HashMap<String, Object>();
  278. map.put("host", TestSuiteEnvironment.getServerAddress());
  279. TransportConfiguration transportConfiguration =
  280. new TransportConfiguration(NettyConnectorFactory.class.getName(), map);
  281. HornetQConnectionFactory cf = HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
  282. cf.setClientID("consumer");
  283. consumerConn = cf.createQueueConnection("guest", "guest");
  284. consumerConn.start();
  285. consumerSession = consumerConn.createQueueSession(false, TopicSession.AUTO_ACKNOWLEDGE);
  286. ModelNode result = execute(getQueueOperation("list-consumers-as-json"), true);
  287. Assert.assertTrue(result.isDefined());
  288. Assert.assertEquals(ModelType.STRING, result.getType());
  289. }
  290. @Test
  291. public void testAddJndi() throws Exception {
  292. ModelNode op = getQueueOperation("add-jndi");
  293. op.get("jndi-binding").set("queue/added" + count);
  294. ModelNode result = execute(op, true);
  295. Assert.assertFalse(result.isDefined());
  296. op = getQueueOperation("read-attribute");
  297. op.get("name").set("entries");
  298. result = execute(op, true);
  299. Assert.assertTrue(result.isDefined());
  300. for (ModelNode binding : result.asList()) {
  301. if (binding.asString().equals("queue/added" + count))
  302. return;
  303. }
  304. Assert.fail("queue/added" + count + " was not found");
  305. }
  306. private ModelNode getQueueOperation(String operationName) {
  307. final ModelNode address = new ModelNode();
  308. address.add("subsystem", "messaging");
  309. address.add("hornetq-server", "default");
  310. address.add("jms-queue", getQueueName());
  311. return org.jboss.as.controller.operations.common.Util.getEmptyOperation(operationName, address);
  312. }
  313. private ModelNode execute(final ModelNode op, final boolean expectSuccess) throws IOException {
  314. ModelNode response = managementClient.getControllerClient().execute(op);
  315. final String outcome = response.get("outcome").asString();
  316. if (expectSuccess) {
  317. if (!"success".equals(outcome)) {
  318. System.out.println(response);
  319. }
  320. Assert.assertEquals("success", outcome);
  321. return response.get("result");
  322. } else {
  323. if ("success".equals(outcome)) {
  324. System.out.println(response);
  325. }
  326. Assert.assertEquals("failed", outcome);
  327. return response.get("failure-description");
  328. }
  329. }
  330. private String getQueueName() {
  331. return getClass().getSimpleName() + count;
  332. }
  333. private String getQueueJndiName() {
  334. return "queue/" + getQueueName();
  335. }
  336. private String getOtherQueueName() {
  337. return getClass().getSimpleName() + "other" + count;
  338. }
  339. private String getOtherQueueJndiName() {
  340. return "queue/" + getOtherQueueName();
  341. }
  342. }