@Override public long getMessageCount() { if (pageSubscription != null) { // messageReferences will have depaged messages which we need to discount from the counter as they are // counted on the pageSubscription as well return pendingMetrics.getMessageCount() + getScheduledCount() + getDeliveringCount() + pageSubscription.getMessageCount(); } else { return pendingMetrics.getMessageCount() + getScheduledCount() + getDeliveringCount(); } }
@Test public void testSimpleadd() { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); queue.addTail(ref); } Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); }
@Test public void testBusyConsumer() throws Exception { QueueImpl queue = getTemporaryQueue(); FakeConsumer consumer = new FakeConsumer(); consumer.setStatusImmediate(HandleStatus.BUSY); queue.addConsumer(consumer); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); queue.deliverNow(); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); consumer.setStatusImmediate(HandleStatus.HANDLED); queue.deliverNow(); assertRefListsIdenticalRefs(refs, consumer.getReferences()); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(10, queue.getDeliveringCount()); }
@Test public void testSimpleNonDirectDelivery() throws Exception { QueueImpl queue = getTemporaryQueue(); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); // Now add a consumer FakeConsumer consumer = new FakeConsumer(); queue.addConsumer(consumer); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); queue.deliverNow(); assertRefListsIdenticalRefs(refs, consumer.getReferences()); Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(numMessages, queue.getDeliveringCount()); }
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(numMessages, queue.getDeliveringCount());
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(30, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(30, queue.getDeliveringCount());
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(numMessages, queue.getDeliveringCount()); Assert.assertEquals(numMessages * 2, queue.getDeliveringCount()); Assert.assertEquals(numMessages * 3, queue.getDeliveringCount()); Assert.assertEquals(numMessages * 2, queue.getDeliveringCount()); Assert.assertEquals(numMessages, queue.getDeliveringCount());
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(10, queue.getDeliveringCount()); Assert.assertEquals(30, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(20, queue.getDeliveringCount());
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(numMessages, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(numMessages, queue.getDeliveringCount());
Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(0, queue.getDeliveringCount()); Assert.assertTrue(consumer.getReferences().isEmpty()); Assert.assertEquals(30, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(10, queue.getDeliveringCount());
Assert.assertEquals(1, queue.getDeliveringCount()); Assert.assertEquals(1, queue.getDeliveringCount());
@Test public void testBusyConsumerWithFilterFirstCallBusy() throws Exception { QueueImpl queue = getTemporaryQueue(); FakeConsumer consumer = new FakeConsumer(FilterImpl.createFilter("color = 'green'")); consumer.setStatusImmediate(HandleStatus.BUSY); queue.addConsumer(consumer); final int numMessages = 10; List<MessageReference> refs = new ArrayList<>(); for (int i = 0; i < numMessages; i++) { MessageReference ref = generateReference(queue, i); ref.getMessage().putStringProperty("color", "green"); refs.add(ref); queue.addTail(ref); } Assert.assertEquals(10, getMessageCount(queue)); Assert.assertEquals(0, queue.getScheduledCount()); Assert.assertEquals(0, queue.getDeliveringCount()); queue.deliverNow(); consumer.setStatusImmediate(null); queue.deliverNow(); List<MessageReference> receeivedRefs = consumer.getReferences(); int currId = 0; for (MessageReference receeivedRef : receeivedRefs) { Assert.assertEquals("messages received out of order", receeivedRef.getMessage().getMessageID(), currId++); } }
Assert.assertEquals(2, queue.getDeliveringCount()); Assert.assertEquals(4, queue.getDeliveringCount());