/* This code is part of Freenet. It is distributed under the GNU General
* Public License, version 2 (or at your option any later version). See
* http://www.gnu.org/ for further details of the GPL. */
package freenet.node;
import junit.framework.TestCase;
public class PeerMessageQueueTest extends TestCase {
public void testUrgentTimeEmpty() {
PeerMessageQueue pmq = new PeerMessageQueue();
assertEquals(Long.MAX_VALUE, pmq.getNextUrgentTime(Long.MAX_VALUE, System.currentTimeMillis()));
}
public void testUrgentTime() {
PeerMessageQueue pmq = new PeerMessageQueue();
//Constructor might take some time, so grab a range
long start = System.currentTimeMillis();
MessageItem item = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false);
long end = System.currentTimeMillis();
pmq.queueAndEstimateSize(item, 1024);
//The timeout for item should be within (start + 100) and (end + 100)
long urgentTime = pmq.getNextUrgentTime(Long.MAX_VALUE, System.currentTimeMillis());
if(!((urgentTime >= (start + 100)) && (urgentTime <= (end + 100)))) {
fail("Timeout not in expected range. Expected: " + (start + 100) + "->" + (end + 100) + ", actual: " + urgentTime);
}
}
/* Test that getNextUrgentTime() returns the correct value, even when the items on the queue
* aren't ordered by their timeout value, eg. when an item was readded because we couldn't send
* it. */
public void testUrgentTimeQueuedWrong() {
PeerMessageQueue pmq = new PeerMessageQueue();
//Constructor might take some time, so grab a range
long start = System.currentTimeMillis();
MessageItem itemUrgent = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false);
long end = System.currentTimeMillis();
//Sleep for a little while to get a later timeout
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
MessageItem itemNonUrgent = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false);
//Queue the least urgent item first to get the wrong order
pmq.queueAndEstimateSize(itemNonUrgent, 1024);
pmq.queueAndEstimateSize(itemUrgent, 1024);
//getNextUrgentTime() should return the timeout of itemUrgent, which is within (start + 100)
//and (end + 100)
long urgentTime = pmq.getNextUrgentTime(Long.MAX_VALUE, System.currentTimeMillis());
if(!((urgentTime >= (start + 100)) && (urgentTime <= (end + 100)))) {
fail("Timeout not in expected range. Expected: " + (start + 100) + "->" + (end + 100) + ", actual: " + urgentTime);
}
}
public void testGrabQueuedMessageItem() {
PeerMessageQueue pmq = new PeerMessageQueue();
MessageItem itemUrgent = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false);
//Sleep for a little while to get a later timeout
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
MessageItem itemNonUrgent = new MessageItem(new byte[1024], null, false, null, (short) 0, false, false);
//Queue the least urgent item first to get the wrong order
pmq.queueAndEstimateSize(itemNonUrgent, 1024);
pmq.queueAndEstimateSize(itemUrgent, 1024);
//grabQueuedMessageItem() should return the most urgent item, even though it was queued last
assertSame(itemUrgent, pmq.grabQueuedMessageItem(0));
}
}