Migrate cds-access-client
[controller.git] / opendaylight / md-sal / cds-access-client / src / test / java / org / opendaylight / controller / cluster / access / client / AveragingProgressTrackerTest.java
index fdaff6fb4a631174e126467b2ad146e855e71fb0..0e0089977d80f13b2223dbc26b8c971f4a7f0494 100644 (file)
@@ -8,52 +8,59 @@
 package org.opendaylight.controller.cluster.access.client;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
+import com.google.common.testing.FakeTicker;
+import java.util.concurrent.TimeUnit;
 import org.junit.Before;
 import org.junit.Test;
 
 public class AveragingProgressTrackerTest {
+    private static final long CHECKER = TimeUnit.MILLISECONDS.toNanos(500);
+    private static final long TICKER_STEP = 100;
 
-    private static final long NOW = 1000000000;
-    private static final long CHECKER = 500000000;
-    private ProgressTracker averagingProgressTracker;
+    private FakeTicker ticker;
+
+    private AveragingProgressTracker averagingProgressTracker;
 
     @Before
     public void setUp() {
-        averagingProgressTracker = new AveragingProgressTracker(4);
-        long delay = averagingProgressTracker.estimateIsolatedDelay(NOW);
-        assertEquals(0, delay);
-        for (int i = 0; i < 2; i++) {
-            delay = averagingProgressTracker.openTask(NOW);
-            assertEquals(0, delay);
-        }
+        ticker = new FakeTicker();
+        ticker.setAutoIncrementStep(TICKER_STEP, TimeUnit.MILLISECONDS);
+        averagingProgressTracker = new AveragingProgressTracker(3);
     }
 
     @Test
     public void estimateIsolatedDelayTest() {
-        long delay = averagingProgressTracker.openTask(NOW);
-        assertEquals(CHECKER, delay);
+        long time = ticker.read();
+        assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
 
-        delay = averagingProgressTracker.openTask(NOW);
-        assertEquals(NOW, delay);
+        // less than half
+        time = ticker.read();
+        assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
+        assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
 
-        delay = averagingProgressTracker.estimateIsolatedDelay(NOW);
-        assertEquals(CHECKER, delay);
+        // more than half but less than limit
+        time = ticker.read();
+        assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
+        assertTrue(averagingProgressTracker.estimateIsolatedDelay(time) < CHECKER);
 
-        averagingProgressTracker.closeTask(3000000000L, 0, 0, 0);
+        // limit reached
+        time = ticker.read();
+        assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
+        assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
 
-        delay = averagingProgressTracker.estimateIsolatedDelay(NOW);
-        assertEquals(0, delay);
-    }
+        // above limit, no higher isolated delays than CHECKER
+        time = ticker.read();
+        assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
+        assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
 
-    @Test
-    public void copyObjectTest() {
-        final ProgressTracker copyAverageProgressTracker =
-                new AveragingProgressTracker((AveragingProgressTracker) averagingProgressTracker);
-        assertEquals(copyAverageProgressTracker.openTask(NOW), averagingProgressTracker.openTask(NOW));
-        assertEquals(averagingProgressTracker.tasksClosed(), copyAverageProgressTracker.tasksClosed());
-        assertEquals(averagingProgressTracker.tasksEncountered(), copyAverageProgressTracker.tasksEncountered());
-        assertEquals(averagingProgressTracker.tasksOpen(), copyAverageProgressTracker.tasksOpen());
+        // close tasks to get under the half
+        averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
+        averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
+        averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
+
+        assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(ticker.read()));
     }
 
 }
\ No newline at end of file