@Test public void testGetQueueNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString anotherQueue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, true); CoreMessagingProxy proxy = createProxy(address); Object[] queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(1, queueNames.length); Assert.assertEquals(queue.toString(), queueNames[0]); session.createQueue(address, anotherQueue, false); queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(2, queueNames.length); session.deleteQueue(queue); queueNames = (Object[]) proxy.retrieveAttributeValue("queueNames"); Assert.assertEquals(1, queueNames.length); Assert.assertEquals(anotherQueue.toString(), queueNames[0]); session.deleteQueue(anotherQueue); }
@Test public void testBasicSend() throws Exception { SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); SimpleString adName = new SimpleString("ad1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(adName.toString(), addressSettings); SimpleString dlq = new SimpleString("DLQ1"); clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(adName, qName, null, false); ClientProducer producer = clientSession.createProducer(adName); producer.send(createTextMessage(clientSession, "heyho!")); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); clientConsumer = clientSession.createConsumer(dlq); m = clientConsumer.receive(500); Assert.assertNotNull(m); assertEquals("q1", m.getStringProperty(Message.HDR_ORIGINAL_QUEUE)); assertEquals("ad1", m.getStringProperty(Message.HDR_ORIGINAL_ADDRESS)); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); }
@Test public void testDeadLetterAddressWithOverridenSublevelAddressSettings() throws Exception { int defaultDeliveryAttempt = 3; int specificeDeliveryAttempt = defaultDeliveryAttempt + 1; SimpleString address = new SimpleString("prefix.address"); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString defaultDeadLetterAddress = RandomUtil.randomSimpleString(); SimpleString defaultDeadLetterQueue = RandomUtil.randomSimpleString(); SimpleString specificDeadLetterAddress = RandomUtil.randomSimpleString(); SimpleString specificDeadLetterQueue = RandomUtil.randomSimpleString(); AddressSettings defaultAddressSettings = new AddressSettings() .setMaxDeliveryAttempts(defaultDeliveryAttempt) .setDeadLetterAddress(defaultDeadLetterAddress); server.getAddressSettingsRepository().addMatch("*", defaultAddressSettings); AddressSettings specificAddressSettings = new AddressSettings() .setMaxDeliveryAttempts(specificeDeliveryAttempt) .setDeadLetterAddress(specificDeadLetterAddress); server.getAddressSettingsRepository().addMatch(address.toString(), specificAddressSettings); clientSession.createQueue(address, queue, false); clientSession.createQueue(defaultDeadLetterAddress, defaultDeadLetterQueue, false); clientSession.createQueue(specificDeadLetterAddress, specificDeadLetterQueue, false); ClientProducer producer = clientSession.createProducer(address); ClientMessage clientMessage = createTextMessage(clientSession, "heyho!"); producer.send(clientMessage); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(queue); ClientConsumer defaultDeadLetterConsumer = clientSession.createConsumer(defaultDeadLetterQueue); ClientConsumer specificDeadLetterConsumer = clientSession.createConsumer(specificDeadLetterQueue); for (int i = 0; i < defaultDeliveryAttempt; i++) { ClientMessage m = clientConsumer.receive(500); Assert.assertNotNull(m); Assert.assertEquals(i + 1, m.getDeliveryCount()); m.acknowledge(); clientSession.rollback(); } Assert.assertNull(defaultDeadLetterConsumer.receiveImmediate()); Assert.assertNull(specificDeadLetterConsumer.receiveImmediate()); // one more redelivery attempt: ClientMessage m = clientConsumer.receive(500); Assert.assertNotNull(m); Assert.assertEquals(specificeDeliveryAttempt, m.getDeliveryCount()); m.acknowledge(); clientSession.rollback(); Assert.assertNull(defaultDeadLetterConsumer.receiveImmediate()); Assert.assertNotNull(specificDeadLetterConsumer.receive(500)); }
@Test public void testConsumerBrowserWithStringSelector() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); if (i % 2 == 0) { message.putStringProperty(new SimpleString("color"), new SimpleString("RED")); } producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, new SimpleString("color = 'RED'"), true); for (int i = 0; i < numMessages; i += 2) { ClientMessage message2 = consumer.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } session.close(); }
@Test public void testBody2() throws Exception { final String QUEUE_NAME = "A1"; ActiveMQServer server = createServer(true); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory factory = locator.createSessionFactory(); ClientSession session = factory.createSession(false, true, true); session.createQueue(QUEUE_NAME, QUEUE_NAME, true); ClientProducer producer = session.createProducer(QUEUE_NAME); ClientMessage msg = session.createMessage(true); byte[] bodyTst = new byte[10]; for (int i = 0; i < 10; i++) { bodyTst[i] = (byte) (i + 1); } msg.getBodyBuffer().writeBytes(bodyTst); assertEquals(bodyTst.length, msg.getBodySize()); producer.send(msg); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = locator.createSessionFactory(); session = factory.createSession(false, false, true); ClientSession managementSession = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session, managementSession); ClientConsumer consumer = session.createConsumer(QUEUE_NAME); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); assertEquals(msg.getBodySize(), bodyTst.length); byte[] bodyRead = new byte[bodyTst.length]; msg.getBodyBuffer().readBytes(bodyRead); assertEqualsByteArrays(bodyTst, bodyRead); session.close(); locator.close(); server.stop(); }
@Test public void testReceiveImmediate() throws Exception { // forces perfect round robin locator.setConsumerWindowSize(1); ClientSessionFactory cf = createSessionFactory(locator); ClientSession sendSession = cf.createSession(false, true, true); ClientProducer cp = sendSession.createProducer(addressA); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); ClientConsumer cc2 = session.createConsumer(queueA); session.start(); cp.send(sendSession.createMessage(false)); cp.send(sendSession.createMessage(false)); cp.send(sendSession.createMessage(false)); sendSession.commit(); Assert.assertNotNull(cc2.receive(5000)); Assert.assertNotNull(cc.receive(5000)); if (cc.receiveImmediate() == null) { Assert.assertNotNull(cc2.receiveImmediate()); } session.close(); sendSession.close(); }
private void setupServer(final JournalType journalType) throws Exception { Configuration config = createDefaultNettyConfig() .setJournalType(journalType) .setJournalFileSize(ActiveMQDefaultConfiguration.getDefaultJournalFileSize()) .setJournalMinFiles(ActiveMQDefaultConfiguration.getDefaultJournalMinFiles()) .setJournalCompactMinFiles(2) .setJournalCompactPercentage(50); server = createServer(true, config); server.start(); ServerLocator locator = createNettyNonHALocator() .setBlockOnDurableSend(false) .setBlockOnNonDurableSend(false) .setBlockOnAcknowledge(false); sf = createSessionFactory(locator); ClientSession sess = sf.createSession(); try { sess.createQueue(ADDRESS, QUEUE, true); } catch (Exception ignored) { } sess.close(); locator.close(); locator = createInVMNonHALocator(); sf = createSessionFactory(locator); }
// HORNETQ- 1084 @Test public void testBasicSendWithDLAButNoBinding() throws Exception { SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(qName.toString(), addressSettings); // SimpleString dlq = new SimpleString("DLQ1"); // clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(qName, qName, null, false); ClientProducer producer = clientSession.createProducer(qName); producer.send(createTextMessage(clientSession, "heyho!")); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); Queue q = (Queue) server.getPostOffice().getBinding(qName).getBindable(); Assert.assertEquals(0, q.getDeliveringCount()); }
@Test public void testGetBindingNames() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); String divertName = RandomUtil.randomString(); session.createQueue(address, queue, false); CoreMessagingProxy proxy = createProxy(address); Object[] bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(1, bindingNames.length); assertEquals(queue.toString(), bindingNames[0]); server .getActiveMQServerControl() .createDivert( divertName, randomString(), address.toString(), RandomUtil.randomString(), false, null, null); bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(2, bindingNames.length); session.deleteQueue(queue); bindingNames = (Object[]) proxy.retrieveAttributeValue("bindingNames"); assertEquals(1, bindingNames.length); assertEquals(divertName.toString(), bindingNames[0]); }
@Test public void testConsumerBrowserMessageAckDoesNothing() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, null, true); for (int i = 0; i < numMessages; i++) { ClientMessage message2 = consumer.receive(1000); message2.acknowledge(); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } // assert that all the messages are there and none have been acked Assert.assertEquals( 0, ((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()).getDeliveringCount()); Assert.assertEquals( 100, getMessageCount(((Queue) server.getPostOffice().getBinding(QUEUE).getBindable()))); session.close(); }
@Test public void testConsumerMultipleBrowser() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, null, true); ClientConsumer consumer2 = session.createConsumer(QUEUE, null, true); ClientConsumer consumer3 = session.createConsumer(QUEUE, null, true); for (int i = 0; i < numMessages; i++) { ClientMessage message2 = consumer.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); message2 = consumer2.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); message2 = consumer3.receive(1000); Assert.assertEquals("m" + i, message2.getBodyBuffer().readString()); } session.close(); }
@Test public void testBindingAttributes() throws Exception { ClientSession session = basicSetUp(); session.createQueue("addressName1", "queueName1", true); session.createQueue("addressName1", "queueName2", "bob", true); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = createSessionFactory(locator); session = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session); ClientSession.QueueQuery queueQuery = session.queueQuery(new SimpleString("queueName1")); assertEquals("addressName1", queueQuery.getAddress().toString()); assertNull(queueQuery.getFilterString()); queueQuery = session.queueQuery(new SimpleString("queueName2")); assertEquals("addressName1", queueQuery.getAddress().toString()); assertEquals("bob", queueQuery.getFilterString().toString()); assertEquals(true, queueQuery.isDurable()); }
@Test public void testLargeMessageFileLeak() throws Exception { OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); // only run this on *nix systems which will have the // com.sun.management.UnixOperatingSystemMXBean (needed to check open file count) Assume.assumeTrue(os instanceof UnixOperatingSystemMXBean); long fdBaseline = ((UnixOperatingSystemMXBean) os).getOpenFileDescriptorCount(); final int SIZE = 2 * 1024; SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); SimpleString adName = new SimpleString("ad1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(adName.toString(), addressSettings); SimpleString dlq = new SimpleString("DLQ1"); clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(adName, qName, null, false); for (int i = 0; i < 10; i++) { ClientProducer producer = clientSession.createProducer(adName); ClientMessage clientFile = clientSession.createMessage(true); clientFile.setBodyInputStream(ActiveMQTestBase.createFakeLargeStream(SIZE)); producer.send(clientFile); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); } assertEquals( "File descriptors are leaking", 0, ((UnixOperatingSystemMXBean) os).getOpenFileDescriptorCount() - fdBaseline); }
@Test public void testSetMessageHandlerWithMessagesPending() throws Exception { ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE, null, true); session.start(); Thread.sleep(100); // Message should be in consumer class MyHandler implements MessageHandler { @Override public void onMessage(final ClientMessage message) { try { Thread.sleep(10); message.acknowledge(); } catch (Exception e) { } } } consumer.setMessageHandler(new MyHandler()); // Let a few messages get processed Thread.sleep(100); // Now set null consumer.setMessageHandler(null); // Give a bit of time for some queued executors to run Thread.sleep(500); // Make sure no exceptions were thrown from onMessage Assert.assertNull(consumer.getLastException()); session.close(); }
@Test public void testDeadlLetterAddressWithDefaultAddressSettings() throws Exception { int deliveryAttempt = 3; SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); SimpleString deadLetterAddress = RandomUtil.randomSimpleString(); SimpleString deadLetterQueue = RandomUtil.randomSimpleString(); AddressSettings addressSettings = new AddressSettings() .setMaxDeliveryAttempts(deliveryAttempt) .setDeadLetterAddress(deadLetterAddress); server.getAddressSettingsRepository().setDefault(addressSettings); clientSession.createQueue(address, queue, false); clientSession.createQueue(deadLetterAddress, deadLetterQueue, false); ClientProducer producer = clientSession.createProducer(address); ClientMessage clientMessage = createTextMessage(clientSession, "heyho!"); producer.send(clientMessage); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(queue); for (int i = 0; i < deliveryAttempt; i++) { ClientMessage m = clientConsumer.receive(500); Assert.assertNotNull(m); DeadLetterAddressTest.log.info("i is " + i); DeadLetterAddressTest.log.info("delivery cout is " + m.getDeliveryCount()); Assert.assertEquals(i + 1, m.getDeliveryCount()); m.acknowledge(); clientSession.rollback(); } ClientMessage m = clientConsumer.receive(500); Assert.assertNull("not expecting a message", m); clientConsumer.close(); clientConsumer = clientSession.createConsumer(deadLetterQueue); m = clientConsumer.receive(500); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); }
@Override @Before public void setUp() throws Exception { super.setUp(); Configuration configuration = createDefaultInVMConfig(); server = addServer(ActiveMQServers.newActiveMQServer(configuration, false)); server.start(); locator = createInVMNonHALocator(); clientSessionFactory = createSessionFactory(locator); clientSession = addClientSession(clientSessionFactory.createSession(false, true, true)); clientSession.createQueue(qName, qName, null, false); }
@Test public void testStopStartMultipleConsumers() throws Exception { locator.setConsumerWindowSize(getMessageEncodeSize(QUEUE) * 33); ClientSessionFactory sf = createSessionFactory(locator); final ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); message.putIntProperty(new SimpleString("i"), i); producer.send(message); } ClientConsumer consumer = session.createConsumer(QUEUE); ClientConsumer consumer2 = session.createConsumer(QUEUE); ClientConsumer consumer3 = session.createConsumer(QUEUE); session.start(); ClientMessage cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); cm = consumer2.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); cm = consumer3.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); session.stop(); cm = consumer.receiveImmediate(); Assert.assertNull(cm); cm = consumer2.receiveImmediate(); Assert.assertNull(cm); cm = consumer3.receiveImmediate(); Assert.assertNull(cm); session.start(); cm = consumer.receive(5000); Assert.assertNotNull(cm); cm = consumer2.receive(5000); Assert.assertNotNull(cm); cm = consumer3.receive(5000); Assert.assertNotNull(cm); session.close(); }
@Test public void testBody() throws Exception { final String QUEUE_NAME = "A1"; ActiveMQServer server = createServer(true); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory factory = locator.createSessionFactory(); ClientSession session = factory.createSession(false, true, true); session.createQueue(QUEUE_NAME, QUEUE_NAME, true); ClientProducer producer = session.createProducer(QUEUE_NAME); ClientMessage msg = session.createMessage(Message.TEXT_TYPE, true); msg.getBodyBuffer().writeString("bob123"); producer.send(msg); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = locator.createSessionFactory(); session = factory.createSession(false, false, true); ClientSession managementSession = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session, managementSession); ClientConsumer consumer = session.createConsumer(QUEUE_NAME); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); assertEquals("bob123", msg.getBodyBuffer().readString()); session.close(); locator.close(); server.stop(); }
@Test public void testPartialQueue() throws Exception { ClientSession session = basicSetUp(); session.createQueue("myAddress", "myQueue1", true); session.createQueue("myAddress", "myQueue2", true); ClientProducer producer = session.createProducer("myAddress"); ClientMessage msg = session.createMessage(true); producer.send(msg); ClientConsumer consumer = session.createConsumer("myQueue1"); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); msg.acknowledge(); consumer.close(); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = createSessionFactory(locator); session = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session); consumer = session.createConsumer("myQueue1"); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertNull(msg); consumer.close(); consumer = session.createConsumer("myQueue2"); msg = consumer.receive(CONSUMER_TIMEOUT); assertNotNull(msg); }
@Test public void testReceiveTimesoutCorrectly() throws Exception { ClientSessionFactory cf = createSessionFactory(locator); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); session.start(); long time = System.currentTimeMillis(); cc.receive(1000); Assert.assertTrue(System.currentTimeMillis() - time >= 1000); session.close(); }
@Test public void testGetAddress() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); session.createQueue(address, queue, false); CoreMessagingProxy proxy = createProxy(address); Assert.assertEquals(address.toString(), proxy.retrieveAttributeValue("address")); session.deleteQueue(queue); }
@Test public void testBasicReceive() throws Exception { ClientSessionFactory cf = createSessionFactory(locator); ClientSession sendSession = cf.createSession(false, true, true); ClientProducer cp = sendSession.createProducer(addressA); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); session.start(); cp.send(sendSession.createMessage(false)); Assert.assertNotNull(cc.receive()); session.close(); sendSession.close(); }
@Test public void testReceiveWithListeners() throws Exception { SimpleString dla = new SimpleString("DLA"); SimpleString qName = new SimpleString("q1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(2).setDeadLetterAddress(dla); server.getAddressSettingsRepository().addMatch(qName.toString(), addressSettings); SimpleString dlq = new SimpleString("DLQ1"); clientSession.createQueue(dla, dlq, null, false); clientSession.createQueue(qName, qName, null, false); ClientProducer producer = clientSession.createProducer(qName); producer.send(createTextMessage(clientSession, "heyho!")); ClientConsumer clientConsumer = clientSession.createConsumer(qName); final CountDownLatch latch = new CountDownLatch(2); TestHandler handler = new TestHandler(latch, clientSession); clientConsumer.setMessageHandler(handler); clientSession.start(); assertTrue(latch.await(5, TimeUnit.SECONDS)); assertEquals(handler.count, 2); clientConsumer = clientSession.createConsumer(dlq); Message m = clientConsumer.receive(5000); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); }
@Test public void testMessageAttributes() throws Exception { ClientSession session = basicSetUp(); session.createQueue(QUEUE_NAME, QUEUE_NAME, true); ClientProducer producer = session.createProducer(QUEUE_NAME); ClientMessage msg = session.createMessage(Message.BYTES_TYPE, true); msg.setExpiration(Long.MAX_VALUE); msg.setPriority((byte) 0); msg.setTimestamp(Long.MAX_VALUE - 1); msg.setUserID(UUIDGenerator.getInstance().generateUUID()); producer.send(msg); session.close(); locator.close(); server.stop(); ByteArrayOutputStream xmlOutputStream = new ByteArrayOutputStream(); XmlDataExporter xmlDataExporter = new XmlDataExporter(); xmlDataExporter.process( xmlOutputStream, server.getConfiguration().getBindingsDirectory(), server.getConfiguration().getJournalDirectory(), server.getConfiguration().getPagingDirectory(), server.getConfiguration().getLargeMessagesDirectory()); System.out.print(new String(xmlOutputStream.toByteArray())); clearDataRecreateServerDirs(); server.start(); locator = createInVMNonHALocator(); factory = createSessionFactory(locator); session = factory.createSession(false, true, true); ByteArrayInputStream xmlInputStream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); XmlDataImporter xmlDataImporter = new XmlDataImporter(); xmlDataImporter.process(xmlInputStream, session); ClientConsumer consumer = session.createConsumer(QUEUE_NAME); session.start(); msg = consumer.receive(CONSUMER_TIMEOUT); assertEquals(Long.MAX_VALUE, msg.getExpiration()); assertEquals((byte) 0, msg.getPriority()); assertEquals(Long.MAX_VALUE - 1, msg.getTimestamp()); assertNotNull(msg.getUserID()); }
@Test public void testSECURITY_PERMISSION_VIOLATION() throws Exception { SimpleString queue = RandomUtil.randomSimpleString(); SimpleString address = RandomUtil.randomSimpleString(); // guest can not create queue Role role = new Role( "roleCanNotCreateQueue", true, true, false, true, false, true, true, true, true, true); Set<Role> roles = new HashSet<>(); roles.add(role); server.getSecurityRepository().addMatch(address.toString(), roles); ActiveMQJAASSecurityManager securityManager = (ActiveMQJAASSecurityManager) server.getSecurityManager(); securityManager.getConfiguration().addRole("guest", "roleCanNotCreateQueue"); SecurityNotificationTest.flush(notifConsumer); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory sf = createSessionFactory(locator); ClientSession guestSession = sf.createSession("guest", "guest", false, true, true, false, 1); try { guestSession.createQueue(address, queue, true); Assert.fail( "session creation must fail and a notification of security violation must be sent"); } catch (Exception e) { } ClientMessage[] notifications = SecurityNotificationTest.consumeMessages(1, notifConsumer); Assert.assertEquals( SECURITY_PERMISSION_VIOLATION.toString(), notifications[0].getObjectProperty(ManagementHelper.HDR_NOTIFICATION_TYPE).toString()); Assert.assertEquals( "guest", notifications[0].getObjectProperty(ManagementHelper.HDR_USER).toString()); Assert.assertEquals( address.toString(), notifications[0].getObjectProperty(ManagementHelper.HDR_ADDRESS).toString()); Assert.assertEquals( CheckType.CREATE_DURABLE_QUEUE.toString(), notifications[0].getObjectProperty(ManagementHelper.HDR_CHECK_TYPE).toString()); guestSession.close(); }
@Test public void testLoad() throws Throwable { ActiveMQServer server2 = createServer(true, false); server2.getConfiguration().setJournalFileSize(10 * 1024 * 1024); server2.getConfiguration().setJournalMinFiles(10); server2.getConfiguration().setJournalCompactMinFiles(3); server2.getConfiguration().setJournalCompactPercentage(50); for (int i = 0; i < 10; i++) { server2.start(); ServerLocator locator = createInVMNonHALocator().setMinLargeMessageSize(1024 * 1024).setBlockOnDurableSend(false); ClientSessionFactory sf = createSessionFactory(locator); ClientSession session = sf.createSession(true, true); try { session.createQueue("slow-queue", "slow-queue"); } catch (Exception ignored) { } session.start(); ClientConsumer consumer = session.createConsumer("slow-queue"); while (true) { System.out.println("Received message from previous"); ClientMessage msg = consumer.receiveImmediate(); if (msg == null) { break; } msg.acknowledge(); } session.close(); produceMessages(sf, 30000); server2.stop(); } }
@Test public void testStopStartConsumerSyncReceive() throws Exception { ClientSessionFactory sf = createSessionFactory(locator); final ClientSession session = sf.createSession(false, true, true); session.createQueue(QUEUE, QUEUE, null, false); ClientProducer producer = session.createProducer(QUEUE); final int numMessages = 100; for (int i = 0; i < numMessages; i++) { ClientMessage message = createTextMessage(session, "m" + i); message.putIntProperty(new SimpleString("i"), i); producer.send(message); } final ClientConsumer consumer = session.createConsumer(QUEUE); session.start(); for (int i = 0; i < numMessages / 2; i++) { ClientMessage cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); } session.stop(); long time = System.currentTimeMillis(); ClientMessage cm = consumer.receive(1000); long taken = System.currentTimeMillis() - time; Assert.assertTrue(taken >= 1000); Assert.assertNull(cm); session.start(); for (int i = 0; i < numMessages / 2; i++) { cm = consumer.receive(5000); Assert.assertNotNull(cm); cm.acknowledge(); } session.close(); }
@Test public void testReceiveOnClosedException() throws Exception { ClientSessionFactory cf = createSessionFactory(locator); ClientSession session = cf.createSession(false, true, true); session.createQueue(addressA, queueA, false); ClientConsumer cc = session.createConsumer(queueA); session.start(); session.close(); try { cc.receive(); Assert.fail("should throw exception"); } catch (ActiveMQObjectClosedException oce) { // ok } catch (ActiveMQException e) { Assert.fail("Invalid Exception type:" + e.getType()); } session.close(); }
@Test public void testGetRoles() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString(); Role role = new Role( RandomUtil.randomString(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean(), RandomUtil.randomBoolean()); session.createQueue(address, queue, true); CoreMessagingProxy proxy = createProxy(address); Object[] roles = (Object[]) proxy.retrieveAttributeValue("roles"); for (Object role2 : roles) { System.out.println(((Object[]) role2)[0]); } Assert.assertEquals(0, roles.length); Set<Role> newRoles = new HashSet<>(); newRoles.add(role); server.getSecurityRepository().addMatch(address.toString(), newRoles); roles = (Object[]) proxy.retrieveAttributeValue("roles"); Assert.assertEquals(1, roles.length); Object[] r = (Object[]) roles[0]; Assert.assertEquals(role.getName(), r[0]); Assert.assertEquals(CheckType.SEND.hasRole(role), r[1]); Assert.assertEquals(CheckType.CONSUME.hasRole(role), r[2]); Assert.assertEquals(CheckType.CREATE_DURABLE_QUEUE.hasRole(role), r[3]); Assert.assertEquals(CheckType.DELETE_DURABLE_QUEUE.hasRole(role), r[4]); Assert.assertEquals(CheckType.CREATE_NON_DURABLE_QUEUE.hasRole(role), r[5]); Assert.assertEquals(CheckType.DELETE_NON_DURABLE_QUEUE.hasRole(role), r[6]); Assert.assertEquals(CheckType.MANAGE.hasRole(role), r[7]); session.deleteQueue(queue); }
@Override @Before public void setUp() throws Exception { super.setUp(); server = createServer(false); server.start(); ServerLocator locator = createInVMNonHALocator(); ClientSessionFactory sf = createSessionFactory(locator); session = sf.createSession(); session.start(); session.createQueue("foo", RoutingType.ANYCAST, "foo"); producer = session.createProducer("foo"); consumer = session.createConsumer("foo", "animal='giraffe'"); }