package org.intracetest.agent; import static org.junit.Assert.assertEquals; import java.util.concurrent.Delayed; import org.intrace.output.BatchScheduler; import org.intrace.output.IBatchSchedulerConfig; import org.junit.Test; public class DelayQueueBatchTest { @Test public void canCalculateDepartureTimes_currentInterval() { final int INTERVAL = 250; // I N T E R V A L =======> Z E R O t o 2 4 9 final int DEPARTURE_TIME_MILLIS = INTERVAL; IBatchSchedulerConfig config1 = new IBatchSchedulerConfig() { @Override public int getDrainInterval() {return INTERVAL;} @Override public int getDrainIntervalMultiplier() { return 1; } }; //First milli of the interval BatchScheduler batchScheduler = new BatchScheduler(0L, config1); assertEquals("Departure time was not calculated correctcly", DEPARTURE_TIME_MILLIS, batchScheduler.getDepartureTimeMillis() ); //Last milli of the interval batchScheduler = new BatchScheduler( (INTERVAL-1), config1); assertEquals("Departure time was not calculated correctcly", DEPARTURE_TIME_MILLIS, batchScheduler.getDepartureTimeMillis() ); //First milli of subsequent interval batchScheduler = new BatchScheduler( INTERVAL, config1); assertEquals("Departure time was not calculated correctcly", 2*DEPARTURE_TIME_MILLIS, batchScheduler.getDepartureTimeMillis() ); } @Test public void canCalculateDepartureTimes_subsequentInterval() { final int INTERVAL = 250; // I N T E R V A L =======> Z E R O t o 2 4 9 final int DEPARTURE = INTERVAL; final int MULTIPLIER = 2; IBatchSchedulerConfig config1 = new IBatchSchedulerConfig() { @Override public int getDrainInterval() {return INTERVAL;} @Override public int getDrainIntervalMultiplier() { return MULTIPLIER; } }; BatchScheduler batchScheduler = new BatchScheduler(0L, config1); assertEquals("Departure time was not calculated correctcly", MULTIPLIER*DEPARTURE, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler( (INTERVAL-1), config1); assertEquals("Departure time was not calculated correctcly", MULTIPLIER*DEPARTURE, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler( INTERVAL, config1); assertEquals("Departure time was not calculated correctcly", MULTIPLIER*DEPARTURE+INTERVAL, batchScheduler.getDepartureTimeMillis() ); } IBatchSchedulerConfig config2 = new IBatchSchedulerConfig() { @Override public int getDrainInterval() {return 1000;} @Override public int getDrainIntervalMultiplier() { return 2; } }; /** * First num goes in one batch, 2nd two numbers go in the subsequent batch. */ @Test public void canCalculateSubsequentBatchedDepartureTimes() { BatchScheduler batchScheduler = new BatchScheduler(2352819999L, this.config2); assertEquals("Departure time was not calculated correctcly", 2352821000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2352820000L, this.config2); assertEquals("Departure time was not calculated correctcly", 2352822000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2352820001L, this.config2); assertEquals("Departure time was not calculated correctcly", 2352822000L, batchScheduler.getDepartureTimeMillis() ); } @Test public void canCalculateBatchedDepartureTimes() { BatchScheduler batchScheduler = new BatchScheduler(899079228, this.config2); assertEquals("Departure time was not calculated correctcly", 899081000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(899079473L, this.config2); assertEquals("Departure time was not calculated correctcly", 899081000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2293479377L, this.config2); assertEquals("Departure time was not calculated correctcly", 2293481000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(902521357L, this.config2); assertEquals("Departure time was not calculated correctcly", 902523000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(902756592L, this.config2); assertEquals("Departure time was not calculated correctcly", 902758000L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2294063215L, this.config2); assertEquals("Departure time was not calculated correctcly", 2294065000L, batchScheduler.getDepartureTimeMillis() ); } /** * First num goes in one batch, 2nd two numbers go in the subsequent batch. * */ @Test public void canCalculateSubsequentBatchedDepartureTimes_smallerInterval() { IBatchSchedulerConfig config1 = new IBatchSchedulerConfig() { @Override public int getDrainInterval() {return 250;} @Override public int getDrainIntervalMultiplier() { return 2; } }; BatchScheduler batchScheduler = new BatchScheduler(2352819999L, config1); assertEquals("Departure time was not calculated correctcly", 2352820250L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2352820000L, config1); assertEquals("Departure time was not calculated correctcly", 2352820500L, batchScheduler.getDepartureTimeMillis() ); batchScheduler = new BatchScheduler(2352820001L, config1); assertEquals("Departure time was not calculated correctcly", 2352820500L, batchScheduler.getDepartureTimeMillis() ); } }