2 * Copyright (c) 2017 Pantheon Technologies s.r.o. and others. All rights reserved.
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
8 package org.opendaylight.controller.cluster.access.client;
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;
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;
21 public class AveragingProgressTrackerTest {
22 private static final long CHECKER = TimeUnit.MILLISECONDS.toNanos(500);
23 private static final long TICKER_STEP = 100;
25 private FakeTicker ticker;
27 private AveragingProgressTracker averagingProgressTracker;
31 ticker = new FakeTicker();
32 ticker.setAutoIncrementStep(TICKER_STEP, TimeUnit.MILLISECONDS);
33 averagingProgressTracker = new AveragingProgressTracker(3);
37 public void estimateIsolatedDelayTest() {
38 long time = ticker.read();
39 assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
43 assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
44 assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(time));
46 // more than half but less than limit
48 assertTrue(averagingProgressTracker.openTask(time) <= CHECKER);
49 assertTrue(averagingProgressTracker.estimateIsolatedDelay(time) < CHECKER);
53 assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
54 assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
56 // above limit, no higher isolated delays than CHECKER
58 assertTrue(averagingProgressTracker.openTask(time) >= CHECKER);
59 assertEquals(CHECKER, averagingProgressTracker.estimateIsolatedDelay(time));
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);
66 assertEquals(0, averagingProgressTracker.estimateIsolatedDelay(ticker.read()));
70 public void copyObjectTest() {
71 final AveragingProgressTracker copyAverageProgressTracker = new AveragingProgressTracker(
72 averagingProgressTracker);
74 // copied object is the same as original
75 assertTrue(new ReflectionEquals(averagingProgressTracker).matches(copyAverageProgressTracker));
77 // afterwards work of copied tracker is independent
78 averagingProgressTracker.openTask(ticker.read());
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());
86 // and copied object is then no more the same as original
87 assertFalse(new ReflectionEquals(averagingProgressTracker).matches(copyAverageProgressTracker));