/** * Test if the notification was to early. Minimum delay is the sum of minimal timeouts (30000) * plus the delay for timeout notification (5000). The maximum delay is the sum of maximum * timeouts (45000) plus the delay for timeout notification (5000) plus a tolerance of 2000. */ @Test public void testClientReceivesTimeoutNotification() { assertFalse( "Client did not receive a timeout notification at all.", responseProcessor.getTransmissionTimeouts().isEmpty()); long minDelay = 247000; SortedSet<Long> transmissionTimes = (SortedSet<Long>) responseProcessor.getTransmissions().keySet(); long firstTransmissionTime = transmissionTimes.first(); SortedSet<Long> transmissionTimeoutTimes = (SortedSet<Long>) responseProcessor.getTransmissionTimeouts().keySet(); long transmissionTimeoutTime = transmissionTimeoutTimes.first(); long actualDelay = transmissionTimeoutTime - firstTransmissionTime; String format = "Internal transmission timeout notification (expected minimum delay: %d millis, actual: %d" + "millis)"; log.info(String.format(format, minDelay, actualDelay)); assertTrue( "Internal transmission timeout notification was too early!", minDelay <= actualDelay); }
/** * Resulting absolute intervals 1st retransmission should be received after 2 - 3 sec 2nd * retransmission should be received after 6 - 9 sec 3rd retransmission should be received after * 14 - 21 sec 4th retransmission should be received after 30 - 45 sec */ @Test public void testRetransmissionsWereSentInTime() { int expectedMessages = 5; SortedSetMultimap<Long, InternalMessageDataWrapper> tranmissions = responseProcessor.getTransmissions(); assertEquals("Wrong number of sent messages!", expectedMessages, tranmissions.size()); Iterator<Map.Entry<Long, InternalMessageDataWrapper>> transmissionIterator = tranmissions.entries().iterator(); // ignore first message... transmissionIterator.next(); long[][] delay = new long[][] { new long[] {2000, 3000}, new long[] {6000, 9000}, new long[] {14000, 21000}, new long[] {30000, 45000} }; int i = -1; while (transmissionIterator.hasNext()) { i += 1; long actualDelay = transmissionIterator.next().getKey() - timeRequestSent; String format = "Retransmission #%d (expected delay: %d - %d millis, actual delay: %d millis)"; log.info(String.format(format, i + 1, delay[i][0], delay[i][1], actualDelay)); assertTrue("Message was sent too early!", delay[i][0] <= actualDelay); assertTrue("Message was sent too late!", delay[i][1] >= actualDelay); } }