From 79de9b5f31b21f278994b9d7eef9daabe02602ad Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 10 Mar 2017 17:53:20 +0100 Subject: [PATCH] Use guava-testlib's FakeTicker Rather than rolling our own, use the Ticker class available in guava-testlib. Change-Id: If3d1abec6aad20b439e19fbd48d961b7582aa607 Signed-off-by: Robert Varga --- opendaylight/md-sal/cds-access-client/pom.xml | 4 +++ .../client/AbstractClientActorTest.java | 4 +-- .../ConnectingClientConnectionTest.java | 26 ++++++++--------- .../access/client/ConnectionEntryTest.java | 8 ++--- .../md-sal/sal-clustering-commons/pom.xml | 4 +++ .../common/actor/MessageTrackerTest.java | 18 ++++++------ .../cluster/common/actor/TestTicker.java | 29 ------------------- 7 files changed, 36 insertions(+), 57 deletions(-) delete mode 100644 opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/TestTicker.java diff --git a/opendaylight/md-sal/cds-access-client/pom.xml b/opendaylight/md-sal/cds-access-client/pom.xml index 10f8fe7240..7ba9f54756 100644 --- a/opendaylight/md-sal/cds-access-client/pom.xml +++ b/opendaylight/md-sal/cds-access-client/pom.xml @@ -65,6 +65,10 @@ akka-testkit_${scala.version} test + + com.google.guava + guava-testlib + org.opendaylight.controller sal-clustering-commons diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientActorTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientActorTest.java index d9e95b6951..889bd58990 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientActorTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/AbstractClientActorTest.java @@ -10,6 +10,7 @@ package org.opendaylight.controller.cluster.access.client; import static org.mockito.Mockito.doReturn; import akka.actor.ActorRef; +import com.google.common.testing.FakeTicker; import org.junit.Before; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -17,7 +18,6 @@ import org.opendaylight.controller.cluster.access.concepts.ClientIdentifier; import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier; import org.opendaylight.controller.cluster.access.concepts.FrontendType; import org.opendaylight.controller.cluster.access.concepts.MemberName; -import org.opendaylight.controller.cluster.common.actor.TestTicker; /** * Abstract base class for client actors and their components. @@ -32,7 +32,7 @@ public abstract class AbstractClientActorTest { @Mock private ActorRef mockSelf; - protected final TestTicker ticker = new TestTicker(); + protected final FakeTicker ticker = new FakeTicker(); @Before public void setup() { diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java index 2d5b696271..8274d24ce2 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectingClientConnectionTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.testkit.TestProbe; +import com.google.common.testing.FakeTicker; import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; @@ -43,7 +44,6 @@ import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope; import org.opendaylight.controller.cluster.access.concepts.RequestException; import org.opendaylight.controller.cluster.access.concepts.RequestFailure; import org.opendaylight.controller.cluster.access.concepts.Response; -import org.opendaylight.controller.cluster.common.actor.TestTicker; import org.opendaylight.yangtools.concepts.WritableIdentifier; import scala.concurrent.duration.FiniteDuration; @@ -109,7 +109,7 @@ public class ConnectingClientConnectionTest { @Mock private ClientActorContext mockContext; - private TestTicker ticker; + private FakeTicker ticker; private BackendInfo mockBackendInfo; private MockRequest mockRequest; private MockRequest mockRequest2; @@ -138,8 +138,8 @@ public class ConnectingClientConnectionTest { doNothing().when(mockCallback).accept(any(MockFailure.class)); - ticker = new TestTicker(); - ticker.increment(ThreadLocalRandom.current().nextLong()); + ticker = new FakeTicker(); + ticker.advance(ThreadLocalRandom.current().nextLong()); doReturn(ticker).when(mockContext).ticker(); mockActor = TestProbe.apply(actorSystem); @@ -232,7 +232,7 @@ public class ConnectingClientConnectionTest { public void testRunTimeoutWithTimeoutLess() throws NoProgressException { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(AbstractClientConnection.REQUEST_TIMEOUT_NANOS - 1); + ticker.advance(AbstractClientConnection.REQUEST_TIMEOUT_NANOS - 1); Optional ret = queue.checkTimeout(ticker.read()); assertNotNull(ret); @@ -245,7 +245,7 @@ public class ConnectingClientConnectionTest { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(AbstractClientConnection.REQUEST_TIMEOUT_NANOS); + ticker.advance(AbstractClientConnection.REQUEST_TIMEOUT_NANOS); Optional ret = queue.checkTimeout(ticker.read()); assertNull(ret); @@ -257,7 +257,7 @@ public class ConnectingClientConnectionTest { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(AbstractClientConnection.REQUEST_TIMEOUT_NANOS + 1); + ticker.advance(AbstractClientConnection.REQUEST_TIMEOUT_NANOS + 1); Optional ret = queue.checkTimeout(ticker.read()); assertNull(ret); @@ -267,7 +267,7 @@ public class ConnectingClientConnectionTest { public void testRunTimeoutWithoutProgressExact() throws NoProgressException { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS); + ticker.advance(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS); // Kaboom queue.runTimer((ClientActorBehavior) mockBehavior); @@ -278,7 +278,7 @@ public class ConnectingClientConnectionTest { public void testRunTimeoutWithoutProgressMore() throws NoProgressException { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS + 1); + ticker.advance(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS + 1); // Kaboom queue.runTimer((ClientActorBehavior) mockBehavior); @@ -287,7 +287,7 @@ public class ConnectingClientConnectionTest { @Test public void testRunTimeoutEmptyWithoutProgressExact() throws NoProgressException { - ticker.increment(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS); + ticker.advance(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS); // No problem Optional ret = queue.checkTimeout(ticker.read()); @@ -297,7 +297,7 @@ public class ConnectingClientConnectionTest { @Test public void testRunTimeoutEmptyWithoutProgressMore() throws NoProgressException { - ticker.increment(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS + 1); + ticker.advance(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS + 1); // No problem Optional ret = queue.checkTimeout(ticker.read()); @@ -342,11 +342,11 @@ public class ConnectingClientConnectionTest { queue.sendRequest(mockRequest, mockCallback); - ticker.increment(10); + ticker.advance(10); queue.sendRequest(mockRequest2, mockCallback); queue.receiveResponse(mockResponseEnvelope); - ticker.increment(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS - 11); + ticker.advance(AbstractClientConnection.NO_PROGRESS_TIMEOUT_NANOS - 11); Optional ret = queue.checkTimeout(ticker.read()); assertNull(ret); diff --git a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectionEntryTest.java b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectionEntryTest.java index a772ddcc7b..a76a36950a 100644 --- a/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectionEntryTest.java +++ b/opendaylight/md-sal/cds-access-client/src/test/java/org/opendaylight/controller/cluster/access/client/ConnectionEntryTest.java @@ -14,6 +14,7 @@ import static org.mockito.Mockito.verify; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.testkit.TestProbe; +import com.google.common.testing.FakeTicker; import java.util.concurrent.ThreadLocalRandom; import java.util.function.Consumer; import org.junit.After; @@ -30,7 +31,6 @@ import org.opendaylight.controller.cluster.access.concepts.Request; import org.opendaylight.controller.cluster.access.concepts.RequestException; import org.opendaylight.controller.cluster.access.concepts.RequestFailure; import org.opendaylight.controller.cluster.access.concepts.Response; -import org.opendaylight.controller.cluster.common.actor.TestTicker; import org.opendaylight.yangtools.concepts.WritableIdentifier; /** @@ -92,7 +92,7 @@ public class ConnectionEntryTest { @Mock private ClientActorBehavior mockBehavior; - private TestTicker ticker; + private FakeTicker ticker; private Request mockRequest; private Response mockResponse; @@ -117,8 +117,8 @@ public class ConnectionEntryTest { doNothing().when(mockCallback).accept(any(MockFailure.class)); - ticker = new TestTicker(); - ticker.increment(ThreadLocalRandom.current().nextLong()); + ticker = new FakeTicker(); + ticker.advance(ThreadLocalRandom.current().nextLong()); mockActor = TestProbe.apply(actorSystem); mockRequest = new MockRequest(mockIdentifier, mockReplyTo); diff --git a/opendaylight/md-sal/sal-clustering-commons/pom.xml b/opendaylight/md-sal/sal-clustering-commons/pom.xml index 029641b507..a7b6b5f7c1 100644 --- a/opendaylight/md-sal/sal-clustering-commons/pom.xml +++ b/opendaylight/md-sal/sal-clustering-commons/pom.xml @@ -105,6 +105,10 @@ com.google.protobuf protobuf-java + + com.google.guava + guava-testlib + diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/MessageTrackerTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/MessageTrackerTest.java index 896fd3c939..3bead64be8 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/MessageTrackerTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/MessageTrackerTest.java @@ -12,6 +12,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; +import com.google.common.testing.FakeTicker; import java.util.List; import org.junit.Assert; import org.junit.Before; @@ -26,12 +27,12 @@ public class MessageTrackerTest { private static final Logger LOG = LoggerFactory.getLogger(MessageTrackerTest.class); - private TestTicker ticker; + private FakeTicker ticker; private MessageTracker messageTracker; @Before public void setup() { - ticker = new TestTicker(); + ticker = new FakeTicker(); messageTracker = new MessageTracker(Foo.class, 10, ticker); } @@ -40,7 +41,7 @@ public class MessageTrackerTest { MessageTracker.Context context1 = messageTracker.received(new Foo()); context1.close(); - ticker.increment(MILLISECONDS.toNanos(20)); + ticker.advance(20, MILLISECONDS); MessageTracker.Context context2 = messageTracker.received(new Foo()); context2.close(); } @@ -52,7 +53,7 @@ public class MessageTrackerTest { MessageTracker.Context context1 = messageTracker.received(new Foo()); context1.close(); - ticker.increment(MILLISECONDS.toNanos(20)); + ticker.advance(20, MILLISECONDS); MessageTracker.Context context2 = messageTracker.received(new Foo()); Assert.assertEquals(true, context2.error().isPresent()); @@ -71,7 +72,7 @@ public class MessageTrackerTest { messageTracker.received(10L).close(); MessageTracker.Context context = messageTracker.received(100); - ticker.increment(MILLISECONDS.toNanos(20)); + ticker.advance(20, MILLISECONDS); context.close(); @@ -96,7 +97,6 @@ public class MessageTrackerTest { LOG.error("An error occurred : {}" , error); } - @Test public void testMetExpectationOnTracking() { messageTracker.begin(); @@ -104,7 +104,7 @@ public class MessageTrackerTest { MessageTracker.Context context1 = messageTracker.received(new Foo()); context1.close(); - ticker.increment(MILLISECONDS.toNanos(1)); + ticker.advance(1, MILLISECONDS); MessageTracker.Context context2 = messageTracker.received(new Foo()); Assert.assertEquals(false, context2.error().isPresent()); @@ -135,7 +135,7 @@ public class MessageTrackerTest { public void testDelayInFirstExpectedMessageArrival() { messageTracker.begin(); - ticker.increment(MILLISECONDS.toNanos(20)); + ticker.advance(20, MILLISECONDS); MessageTracker.Context context = messageTracker.received(new Foo()); @@ -156,7 +156,7 @@ public class MessageTrackerTest { public void testCallingBeginDoesNotResetWatch() { messageTracker.begin(); - ticker.increment(MILLISECONDS.toNanos(20)); + ticker.advance(20, MILLISECONDS); messageTracker.begin(); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/TestTicker.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/TestTicker.java deleted file mode 100644 index 3387eca0e6..0000000000 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/common/actor/TestTicker.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.cluster.common.actor; - -import com.google.common.base.Ticker; - -/** - * Utility {@link Ticker} where passage of time is explicitly controlled via {@link #increment(long)}. - * - * @author Robert Varga - */ -public final class TestTicker extends Ticker { - private long counter = 0; - - @Override - public long read() { - return counter; - } - - public long increment(final long ticks) { - counter += ticks; - return counter; - } -} -- 2.36.6