2 * Copyright (c) 2014 Cisco Systems, Inc. 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.raft;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertTrue;
12 import com.google.common.base.Stopwatch;
13 import com.google.common.util.concurrent.Uninterruptibles;
14 import java.util.concurrent.TimeUnit;
15 import org.junit.Test;
16 import scala.concurrent.duration.FiniteDuration;
18 public class FollowerLogInformationImplTest {
21 public void testIsFollowerActive() {
23 MockRaftActorContext context = new MockRaftActorContext();
24 context.setCommitIndex(10);
26 DefaultConfigParamsImpl configParams = new DefaultConfigParamsImpl();
27 configParams.setHeartBeatInterval(new FiniteDuration(500, TimeUnit.MILLISECONDS));
28 configParams.setElectionTimeoutFactor(1);
29 context.setConfigParams(configParams);
31 FollowerLogInformation followerLogInformation =
32 new FollowerLogInformationImpl("follower1", 9, context);
34 assertFalse("Follower should be termed inactive before stopwatch starts",
35 followerLogInformation.isFollowerActive());
37 followerLogInformation.markFollowerActive();
38 if (sleepWithElaspsedTimeReturned(200) > 200) {
41 assertTrue("Follower should be active", followerLogInformation.isFollowerActive());
43 if (sleepWithElaspsedTimeReturned(400) > 400) {
46 assertFalse("Follower should be inactive after time lapsed",
47 followerLogInformation.isFollowerActive());
49 followerLogInformation.markFollowerActive();
50 assertTrue("Follower should be active from inactive",
51 followerLogInformation.isFollowerActive());
54 // we cannot rely comfortably that the sleep will indeed sleep for the desired time
55 // hence getting the actual elapsed time and do a match.
56 // if the sleep has spilled over, then return the test gracefully
57 private long sleepWithElaspsedTimeReturned(long millis) {
58 Stopwatch stopwatch = Stopwatch.createStarted();
59 Uninterruptibles.sleepUninterruptibly(millis, TimeUnit.MILLISECONDS);
61 return stopwatch.elapsed(TimeUnit.MILLISECONDS);