summaryrefslogtreecommitdiff
path: root/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java')
-rw-r--r--qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java153
1 files changed, 81 insertions, 72 deletions
diff --git a/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java b/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java
index 7136f07ca5..f3ba6a5495 100644
--- a/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java
+++ b/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/SimpleQueueEntryListTest.java
@@ -22,21 +22,28 @@ package org.apache.qpid.server.queue;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-
import org.apache.qpid.AMQException;
import org.apache.qpid.server.message.AMQMessage;
+import org.apache.qpid.server.message.ServerMessage;
-import junit.framework.TestCase;
-
-public class SimpleQueueEntryListTest extends TestCase
+public class SimpleQueueEntryListTest extends QueueEntryListTestBase
{
+ private SimpleQueueEntryList _sqel;
+
private static final String SCAVENGE_PROP = "qpid.queue.scavenge_count";
String oldScavengeValue = null;
-
+
@Override
protected void setUp()
{
oldScavengeValue = System.setProperty(SCAVENGE_PROP, "9");
+ _sqel = new SimpleQueueEntryList(_testQueue);
+ for(int i = 1; i <= 100; i++)
+ {
+ final ServerMessage msg = new MockAMQMessage(i);
+ final QueueEntry bleh = _sqel.add(msg);
+ assertNotNull("QE should not have been null", bleh);
+ }
}
@Override
@@ -52,19 +59,28 @@ public class SimpleQueueEntryListTest extends TestCase
}
}
- /**
- * Tests the behavior of the next(QueuyEntry) method.
- */
- public void testNext() throws Exception
+ @Override
+ public QueueEntryList getTestList()
{
- SimpleQueueEntryList sqel = new SimpleQueueEntryList(null);
- int i = 0;
+ return _sqel;
+ }
+
+ @Override
+ public long getExpectedFirstMsgId()
+ {
+ return 1;
+ }
- QueueEntry queueEntry1 = sqel.add(new MockAMQMessage(i++));
- QueueEntry queueEntry2 = sqel.add(new MockAMQMessage(i++));
+ @Override
+ public int getExpectedListLength()
+ {
+ return 100;
+ }
- assertSame(queueEntry2, sqel.next(queueEntry1));
- assertNull(sqel.next(queueEntry2));
+ @Override
+ public AMQMessage getTestMessageToAdd() throws AMQException
+ {
+ return new MockAMQMessage(1l);
}
public void testScavenge() throws Exception
@@ -82,7 +98,7 @@ public class SimpleQueueEntryListTest extends TestCase
entriesMap.put(i,bleh);
}
- QueueEntryImpl head = ((QueueEntryImpl) sqel.getHead());
+ SimpleQueueEntryImpl head = sqel.getHead();
//We shall now delete some specific messages mid-queue that will lead to
//requiring a scavenge once the requested threshold of 9 deletes is passed
@@ -99,11 +115,10 @@ public class SimpleQueueEntryListTest extends TestCase
assertTrue("Failed to delete QueueEntry", entriesMap.remove(14).delete());
verifyDeletedButPresentBeforeScavenge(head, 14);
-
//Delete message 20 only
assertTrue("Failed to delete QueueEntry", entriesMap.remove(20).delete());
verifyDeletedButPresentBeforeScavenge(head, 20);
-
+
//Delete messages 81 to 84
assertTrue("Failed to delete QueueEntry", entriesMap.remove(81).delete());
verifyDeletedButPresentBeforeScavenge(head, 81);
@@ -113,35 +128,35 @@ public class SimpleQueueEntryListTest extends TestCase
verifyDeletedButPresentBeforeScavenge(head, 83);
assertTrue("Failed to delete QueueEntry", entriesMap.remove(84).delete());
verifyDeletedButPresentBeforeScavenge(head, 84);
-
+
//Delete message 99 - this is the 10th message deleted that is after the queue head
//and so will invoke the scavenge() which is set to go after 9 previous deletions
assertTrue("Failed to delete QueueEntry", entriesMap.remove(99).delete());
verifyAllDeletedMessagedNotPresent(head, entriesMap);
}
-
- private void verifyDeletedButPresentBeforeScavenge(QueueEntryImpl head, long messageId)
+
+ private void verifyDeletedButPresentBeforeScavenge(SimpleQueueEntryImpl head, long messageId)
{
//Use the head to get the initial entry in the queue
- QueueEntryImpl entry = head._next;
-
+ SimpleQueueEntryImpl entry = head.getNextNode();
+
for(long i = 1; i < messageId ; i++)
{
assertEquals("Expected QueueEntry was not found in the list", i, (long) entry.getMessage().getMessageNumber());
- entry = entry._next;
+ entry = entry.getNextNode();
}
-
+
assertTrue("Entry should have been deleted", entry.isDeleted());
}
-
- private void verifyAllDeletedMessagedNotPresent(QueueEntryImpl head, Map<Integer,QueueEntry> remainingMessages)
+
+ private void verifyAllDeletedMessagedNotPresent(SimpleQueueEntryImpl head, Map<Integer,QueueEntry> remainingMessages)
{
//Use the head to get the initial entry in the queue
- QueueEntryImpl entry = head._next;
-
+ SimpleQueueEntryImpl entry = head.getNextNode();
+
assertNotNull("Initial entry should not have been null", entry);
-
+
int count = 0;
while (entry != null)
@@ -149,62 +164,56 @@ public class SimpleQueueEntryListTest extends TestCase
assertFalse("Entry " + entry.getMessage().getMessageNumber() + " should not have been deleted", entry.isDeleted());
assertNotNull("QueueEntry was not found in the list of remaining entries",
remainingMessages.get(entry.getMessage().getMessageNumber().intValue()));
-
+
count++;
- entry = entry._next;
+ entry = entry.getNextNode();
}
-
+
assertEquals("Count should have been equal",count,remainingMessages.size());
}
- public void testDequedMessagedNotPresentInIterator()
+ public void testGettingNextElement()
{
- int numberOfMessages = 10;
- SimpleQueueEntryList entryList = new SimpleQueueEntryList(new MockAMQQueue("test"));
- QueueEntry[] entries = new QueueEntry[numberOfMessages];
+ final int numberOfEntries = 5;
+ final SimpleQueueEntryImpl[] entries = new SimpleQueueEntryImpl[numberOfEntries];
+ final SimpleQueueEntryList queueEntryList = new SimpleQueueEntryList(new MockAMQQueue("test"));
- for(int i = 0; i < numberOfMessages ; i++)
+ // create test entries
+ for(int i = 0; i < numberOfEntries; i++)
{
- AMQMessage message = null;;
- try
- {
- message = new MockAMQMessage(i);
- }
- catch (AMQException e)
- {
- fail("Failure to create a mock message:" + e.getMessage());
- }
- QueueEntry entry = entryList.add(message);
- assertNotNull("QE should not be null", entry);
- entries[i]= entry;
+ AMQMessage message = new MockAMQMessage(i);
+ entries[i] = queueEntryList.add(message);
}
- // dequeue all even messages
- for (QueueEntry queueEntry : entries)
+ // test getNext for not acquired entries
+ for(int i = 0; i < numberOfEntries; i++)
{
- long i = ((AMQMessage)queueEntry.getMessage()).getMessageId().longValue();
- if (i%2 == 0)
+ final SimpleQueueEntryImpl next = entries[i].getNextValidEntry();
+
+ if(i < numberOfEntries - 1)
+ {
+ assertEquals("Unexpected entry from QueueEntryImpl#getNext()", entries[i + 1], next);
+ }
+ else
{
- queueEntry.acquire();
- queueEntry.dequeue();
+ assertNull("The next entry after the last should be null", next);
}
}
- // iterate and check that dequeued messages are not returned by iterator
- QueueEntryIterator it = entryList.iterator();
- int counter = 0;
- int i = 1;
- while (it.advance())
- {
- QueueEntry entry = it.getNode();
- Long id = ((AMQMessage)entry.getMessage()).getMessageId();
- assertEquals("Expected message with id " + i + " but got message with id "
- + id, new Long(i), id);
- counter++;
- i += 2;
- }
- int expectedNumber = numberOfMessages / 2;
- assertEquals("Expected " + expectedNumber + " number of entries in iterator but got " + counter,
- expectedNumber, counter);
+ // delete second
+ entries[1].acquire();
+ entries[1].delete();
+
+ // dequeue third
+ entries[2].acquire();
+ entries[2].dequeue();
+
+ SimpleQueueEntryImpl next = entries[2].getNextValidEntry();
+ assertEquals("expected forth entry", entries[3], next);
+ next = next.getNextValidEntry();
+ assertEquals("expected fifth entry", entries[4], next);
+ next = next.getNextValidEntry();
+ assertNull("The next entry after the last should be null", next);
}
+
}