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); } }
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)); } }
public void testEmptyCreation() throws BlockedTooLongException { NewPacketFormat npf = new NewPacketFormat(null, 0, 0); PeerMessageQueue pmq = new PeerMessageQueue(); SessionKey s = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); NPFPacket p = npf.createPacket(1400, pmq, s, false); if(p != null) fail("Created packet from nothing"); }
public void testAckOnlyCreation() throws BlockedTooLongException, InterruptedException { BasePeerNode pn = new NullBasePeerNode(); NewPacketFormat npf = new NewPacketFormat(pn, 0, 0); PeerMessageQueue pmq = new PeerMessageQueue(); SessionKey s = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); NPFPacket p = null; //Packet that should be acked p = new NPFPacket(); p.addMessageFragment(new MessageFragment(true, false, true, 0, 8, 8, 0, new byte[] {(byte) 0x01, (byte) 0x23, (byte) 0x45, (byte) 0x67, (byte) 0x89, (byte) 0xAB, (byte) 0xCD, (byte) 0xEF }, null)); assertEquals(1, npf.handleDecryptedPacket(p, s).size()); Thread.sleep(NewPacketFormatKeyContext.MAX_ACK_DELAY*2); p = npf.createPacket(1400, pmq, s, false); assertEquals(1, p.getAcks().size()); }
new NewPacketFormat(receiverNode, receiverStartSeq, senderStartSeq); PeerMessageQueue senderQueue = new PeerMessageQueue();
public void testLoadStatsLowLevel() throws BlockedTooLongException, InterruptedException { final byte[] loadMessage = new byte[] { (byte)0xFF, (byte)0xEE, (byte)0xDD, (byte)0xCC, (byte)0xBB, (byte)0xAA}; final SessionKey senderKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); NullBasePeerNode senderNode = new NullBasePeerNode() { @Override public MessageItem makeLoadStats(boolean realtime, boolean highPriority, boolean noRemember) { return new MessageItem(loadMessage, null, false, null, (short) 0, false, false); } @Override public SessionKey getCurrentKeyTracker() { return senderKey; } }; NewPacketFormat sender = new NewPacketFormat(senderNode, 0, 0); PeerMessageQueue senderQueue = new PeerMessageQueue(); senderQueue.queueAndEstimateSize(new MessageItem(new byte[128], null, false, null, (short) 0, false, true), 1024); Thread.sleep(PacketSender.MAX_COALESCING_DELAY*2); NPFPacket packet1 = sender.createPacket(512, senderQueue, senderKey, false); assertTrue(packet1 != null); assertEquals(1, packet1.getFragments().size()); assertEquals(1, packet1.getLossyMessages().size()); NPFPacketTest.checkEquals(loadMessage, packet1.getLossyMessages().get(0)); // Don't decode the packet because it's not a real message. }
public void testResendAlreadyCompleted() throws BlockedTooLongException, InterruptedException { NullBasePeerNode senderNode = new NullBasePeerNode(); NewPacketFormat sender = new NewPacketFormat(senderNode, 0, 0); PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode(); NewPacketFormat receiver = new NewPacketFormat(receiverNode, 0, 0); SessionKey senderKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); SessionKey receiverKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); senderQueue.queueAndEstimateSize(new MessageItem(new byte[128], null, false, null, (short) 0, false, false), 1024); Thread.sleep(PacketSender.MAX_COALESCING_DELAY*2); NPFPacket packet1 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, receiver.handleDecryptedPacket(packet1, receiverKey).size()); //Receiving the same packet twice should work assertEquals(0, receiver.handleDecryptedPacket(packet1, receiverKey).size()); //Same message, new sequence number ie. resend assertEquals(0, receiver.handleDecryptedPacket(packet1, receiverKey).size()); }
public void testLostLastAck() throws BlockedTooLongException, InterruptedException { NullBasePeerNode senderNode = new NullBasePeerNode(); NewPacketFormat sender = new NewPacketFormat(senderNode, 0, 0); PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode(); NewPacketFormat receiver = new NewPacketFormat(receiverNode, 0, 0); PeerMessageQueue receiverQueue = new PeerMessageQueue(); SessionKey senderKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); senderNode.currentKey = senderKey;
public void testOutOfOrderDelivery() throws BlockedTooLongException { NullBasePeerNode senderNode = new NullBasePeerNode(); NewPacketFormat sender = new NewPacketFormat(senderNode, 0, 0); PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode(); NewPacketFormat receiver = new NewPacketFormat(receiverNode, 0, 0); SessionKey senderKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); SessionKey receiverKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); senderQueue.queueAndEstimateSize(new MessageItem(new byte[1024], null, false, null, (short) 0, false, false), 1024); NPFPacket fragment1 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment1.getFragments().size()); NPFPacket fragment2 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment2.getFragments().size()); NPFPacket fragment3 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment3.getFragments().size()); receiver.handleDecryptedPacket(fragment1, receiverKey); receiver.handleDecryptedPacket(fragment3, receiverKey); assertEquals(1, receiver.handleDecryptedPacket(fragment2, receiverKey).size()); }
public void testReceiveUnknownMessageLength() throws BlockedTooLongException { NullBasePeerNode senderNode = new NullBasePeerNode(); NewPacketFormat sender = new NewPacketFormat(senderNode, 0, 0); PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode(); NewPacketFormat receiver = new NewPacketFormat(receiverNode, 0, 0); SessionKey senderKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); SessionKey receiverKey = new SessionKey(null, null, null, null, null, null, null, null, new NewPacketFormatKeyContext(0, 0), 1); senderQueue.queueAndEstimateSize(new MessageItem(new byte[1024], null, false, null, (short) 0, false, false), 1024); NPFPacket fragment1 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment1.getFragments().size()); NPFPacket fragment2 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment2.getFragments().size()); NPFPacket fragment3 = sender.createPacket(512, senderQueue, senderKey, false); assertEquals(1, fragment3.getFragments().size()); receiver.handleDecryptedPacket(fragment3, receiverKey); receiver.handleDecryptedPacket(fragment2, receiverKey); assertEquals(1, receiver.handleDecryptedPacket(fragment1, receiverKey).size()); }
PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode() {
PeerMessageQueue senderQueue = new PeerMessageQueue(); NullBasePeerNode receiverNode = new NullBasePeerNode() {
probeRequestsInterval = new SimpleRunningAverage(50, Node.MIN_INTERVAL_BETWEEN_INCOMING_PROBE_REQUESTS); messageQueue = new PeerMessageQueue();