Bug 8619: Introduce inheritance of progress trackers
[controller.git] / opendaylight / md-sal / cds-access-client / src / test / java / org / opendaylight / controller / cluster / access / client / AveragingProgressTrackerTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.cluster.access.client;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12
13 import com.google.common.testing.FakeTicker;
14 import java.util.concurrent.TimeUnit;
15 import org.junit.Before;
16 import org.junit.Test;
17
18 public class AveragingProgressTrackerTest {
19     private static final long CHECKER = TimeUnit.MILLISECONDS.toNanos(500);
20     private static final long TICKER_STEP = 100;
21
22     private FakeTicker ticker;
23
24     private AveragingProgressTracker averagingProgressTracker;
25
26     @Before
27     public void setUp() {
28         ticker = new FakeTicker();
29         ticker.setAutoIncrementStep(TICKER_STEP, TimeUnit.MILLISECONDS);
30         averagingProgressTracker = new AveragingProgressTracker(3);
31     }
32
33     @Test
34     public void estimateIsolatedDelayTest() {
35         long time = ticker.read();
36         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
37
38         // less than half
39         time = ticker.read();
40         assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
41         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
42
43         // more than half but less than limit
44         time = ticker.read();
45         assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
46         assertTrue(averagingProgressTracker.estimateIsolatedDelay(time) < CHECKER);
47
48         // limit reached
49         time = ticker.read();
50         assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
51         assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
52
53         // above limit, no higher isolated delays than CHECKER
54         time = ticker.read();
55         assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
56         assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
57
58         // close tasks to get under the half
59         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
60         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
61         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
62
63         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(ticker.read()));
64     }
65
66 }