Fix a FB warning
[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.assertFalse;
12 import static org.junit.Assert.assertNotEquals;
13 import static org.junit.Assert.assertTrue;
14
15 import com.google.common.testing.FakeTicker;
16 import java.util.concurrent.TimeUnit;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
20
21 public class AveragingProgressTrackerTest {
22     private static final long CHECKER = TimeUnit.MILLISECONDS.toNanos(500);
23     private static final long TICKER_STEP = 100;
24
25     private FakeTicker ticker;
26
27     private AveragingProgressTracker averagingProgressTracker;
28
29     @Before
30     public void setUp() {
31         ticker = new FakeTicker();
32         ticker.setAutoIncrementStep(TICKER_STEP, TimeUnit.MILLISECONDS);
33         averagingProgressTracker = new AveragingProgressTracker(3);
34     }
35
36     @Test
37     public void estimateIsolatedDelayTest() {
38         long time = ticker.read();
39         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
40
41         // less than half
42         time = ticker.read();
43         assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
44         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
45
46         // more than half but less than limit
47         time = ticker.read();
48         assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
49         assertTrue(averagingProgressTracker.estimateIsolatedDelay(time) < CHECKER);
50
51         // limit reached
52         time = ticker.read();
53         assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
54         assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
55
56         // above limit, no higher isolated delays than CHECKER
57         time = ticker.read();
58         assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
59         assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
60
61         // close tasks to get under the half
62         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
63         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
64         averagingProgressTracker.closeTask(ticker.read(), 0, 0, 0);
65
66         assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(ticker.read()));
67     }
68
69     @Test
70     public void copyObjectTest() {
71         final AveragingProgressTracker copyAverageProgressTracker = new AveragingProgressTracker(
72                 averagingProgressTracker);
73
74         // copied object is the same as original
75         assertTrue(new ReflectionEquals(averagingProgressTracker).matches(copyAverageProgressTracker));
76
77         // afterwards work of copied tracker is independent
78         averagingProgressTracker.openTask(ticker.read());
79
80         final long time = ticker.read();
81         assertNotEquals("Trackers are expected to return different results for tracking",
82                 averagingProgressTracker.openTask(time), copyAverageProgressTracker.openTask(time));
83         assertNotEquals("Trackers are expected to encounter different amount of tasks",
84                 averagingProgressTracker.tasksEncountered(), copyAverageProgressTracker.tasksEncountered());
85
86         // and copied object is then no more the same as original
87         assertFalse(new ReflectionEquals(averagingProgressTracker).matches(copyAverageProgressTracker));
88     }
89 }