Migrate AbstractProxyTransactionTest to MockitoJUnitRunner
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / databroker / actors / dds / AbstractProxyTransactionTest.java
index 92c996407a6d607c5e1e413705467f68f1d1d419..167c5bc348467ce6d09ac347aa349ce2aa5e2ac6 100644 (file)
@@ -7,16 +7,20 @@
  */
 package org.opendaylight.controller.cluster.databroker.actors.dds;
 
-import static org.hamcrest.CoreMatchers.both;
+import static org.hamcrest.CoreMatchers.allOf;
 import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.isA;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import akka.actor.ActorSystem;
-import akka.testkit.JavaTestKit;
 import akka.testkit.TestProbe;
+import akka.testkit.javadsl.TestKit;
 import com.google.common.base.Ticker;
 import com.google.common.primitives.UnsignedLong;
 import java.util.ArrayList;
@@ -27,11 +31,11 @@ import java.util.function.Consumer;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.controller.cluster.access.ABIVersion;
 import org.opendaylight.controller.cluster.access.client.AbstractClientConnection;
 import org.opendaylight.controller.cluster.access.client.AccessClientUtil;
@@ -63,6 +67,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.CursorAwareDataTreeM
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
 public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransaction> {
     protected static final TransactionIdentifier TRANSACTION_ID = TestUtils.TRANSACTION_ID;
     private static final ClientIdentifier CLIENT_ID = TestUtils.CLIENT_ID;
@@ -97,8 +102,7 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
     protected T transaction;
 
     @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
+    public void setUp() {
         system = ActorSystem.apply();
         clientContextProbe = new TestProbe(system, "clientContext");
         backendProbe = new TestProbe(system, "backend");
@@ -113,11 +117,12 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
         tester = new TransactionTester<>(transaction, connection, backendProbe);
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     protected abstract T createTransaction(ProxyHistory parent, TransactionIdentifier id, DataTreeSnapshot snapshot);
 
     @After
-    public void tearDown() throws Exception {
-        JavaTestKit.shutdownActorSystem(system);
+    public void tearDown() {
+        TestKit.shutdownActorSystem(system);
     }
 
     @Test
@@ -127,46 +132,46 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
     public abstract void testRead() throws Exception;
 
     @Test
-    public abstract void testWrite() throws Exception;
+    public abstract void testWrite();
 
     @Test
-    public abstract void testMerge() throws Exception;
+    public abstract void testMerge();
 
     @Test
-    public abstract void testDelete() throws Exception;
+    public abstract void testDelete();
 
     @Test
     public abstract void testDirectCommit() throws Exception;
 
     @Test
-    public abstract void testCanCommit() throws Exception;
+    public abstract void testCanCommit();
 
     @Test
-    public abstract void testPreCommit() throws Exception;
+    public abstract void testPreCommit();
 
     @Test
-    public abstract void testDoCommit() throws Exception;
+    public abstract void testDoCommit();
 
     @Test
-    public abstract void testForwardToRemoteAbort() throws Exception;
+    public abstract void testForwardToRemoteAbort();
 
     @Test
-    public abstract void testForwardToRemoteCommit() throws Exception;
+    public abstract void testForwardToRemoteCommit();
 
     @Test
-    public void testAbortVotingFuture() throws Exception {
+    public void testAbortVotingFuture() {
         testRequestResponse(f -> transaction.abort(f), TransactionAbortRequest.class, TransactionAbortSuccess::new);
     }
 
     @Test
-    public void testForwardToRemotePurge() throws Exception {
+    public void testForwardToRemotePurge() {
         final TestProbe probe = new TestProbe(system);
         final TransactionPurgeRequest request = new TransactionPurgeRequest(TRANSACTION_ID, 0L, probe.ref());
         testForwardToRemote(request, TransactionPurgeRequest.class);
     }
 
     @Test
-    public void testReplayMessages() throws Exception {
+    public void testReplayMessages() {
         final TestProbe probe = new TestProbe(system);
         final List<ConnectionEntry> entries = new ArrayList<>();
         final Consumer<Response<?, ?>> callback = createCallbackMock();
@@ -183,47 +188,53 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
                 new ReadTransactionRequest(TRANSACTION_ID, 1L, probe.ref(), PATH_1, true);
         transaction.recordSuccessfulRequest(successful2);
         transaction.startReconnect();
-        transaction.replayMessages(successor.getTransaction(), entries);
+
+        final ProxyHistory mockSuccessor = mock(ProxyHistory.class);
+        when(mockSuccessor.createTransactionProxy(TRANSACTION_ID, transaction.isSnapshotOnly(), false))
+            .thenReturn(successor.getTransaction());
+
+        transaction.replayMessages(mockSuccessor, entries);
 
         final ModifyTransactionRequest transformed = successor.expectTransactionRequest(ModifyTransactionRequest.class);
-        Assert.assertNotNull(transformed);
-        Assert.assertEquals(successful1.getSequence(), transformed.getSequence());
-        Assert.assertTrue(transformed.getPersistenceProtocol().isPresent());
-        Assert.assertEquals(PersistenceProtocol.ABORT, transformed.getPersistenceProtocol().get());
+        assertNotNull(transformed);
+        assertEquals(successful1.getSequence(), transformed.getSequence());
+        assertTrue(transformed.getPersistenceProtocol().isPresent());
+        assertEquals(PersistenceProtocol.ABORT, transformed.getPersistenceProtocol().get());
 
         ReadTransactionRequest tmpRead = successor.expectTransactionRequest(ReadTransactionRequest.class);
-        Assert.assertNotNull(tmpRead);
-        Assert.assertEquals(successful2.getTarget(), tmpRead.getTarget());
-        Assert.assertEquals(successful2.getSequence(), tmpRead.getSequence());
-        Assert.assertEquals(successful2.getPath(), tmpRead.getPath());
-        Assert.assertEquals(successor.localActor(), tmpRead.getReplyTo());
+        assertNotNull(tmpRead);
+        assertEquals(successful2.getTarget(), tmpRead.getTarget());
+        assertEquals(successful2.getSequence(), tmpRead.getSequence());
+        assertEquals(successful2.getPath(), tmpRead.getPath());
+        assertEquals(successor.localActor(), tmpRead.getReplyTo());
 
         tmpRead = successor.expectTransactionRequest(ReadTransactionRequest.class);
-        Assert.assertNotNull(tmpRead);
-        Assert.assertEquals(request1.getTarget(), tmpRead.getTarget());
-        Assert.assertEquals(request1.getSequence(), tmpRead.getSequence());
-        Assert.assertEquals(request1.getPath(), tmpRead.getPath());
-        Assert.assertEquals(successor.localActor(), tmpRead.getReplyTo());
+        assertNotNull(tmpRead);
+        assertEquals(request1.getTarget(), tmpRead.getTarget());
+        assertEquals(request1.getSequence(), tmpRead.getSequence());
+        assertEquals(request1.getPath(), tmpRead.getPath());
+        assertEquals(successor.localActor(), tmpRead.getReplyTo());
 
         final ExistsTransactionRequest tmpExist = successor.expectTransactionRequest(ExistsTransactionRequest.class);
-        Assert.assertNotNull(tmpExist);
-        Assert.assertEquals(request2.getTarget(), tmpExist.getTarget());
-        Assert.assertEquals(request2.getSequence(), tmpExist.getSequence());
-        Assert.assertEquals(request2.getPath(), tmpExist.getPath());
-        Assert.assertEquals(successor.localActor(), tmpExist.getReplyTo());
+        assertNotNull(tmpExist);
+        assertEquals(request2.getTarget(), tmpExist.getTarget());
+        assertEquals(request2.getSequence(), tmpExist.getSequence());
+        assertEquals(request2.getPath(), tmpExist.getPath());
+        assertEquals(successor.localActor(), tmpExist.getReplyTo());
     }
 
     protected void checkModifications(final ModifyTransactionRequest modifyRequest) {
         final List<TransactionModification> modifications = modifyRequest.getModifications();
-        Assert.assertEquals(3, modifications.size());
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionWrite.class)).and(hasPath(PATH_1))));
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionMerge.class)).and(hasPath(PATH_2))));
-        Assert.assertThat(modifications, hasItem(both(isA(TransactionDelete.class)).and(hasPath(PATH_3))));
+        assertEquals(3, modifications.size());
+        assertThat(modifications, hasItem(allOf(isA(TransactionWrite.class), hasPath(PATH_1))));
+        assertThat(modifications, hasItem(allOf(isA(TransactionMerge.class), hasPath(PATH_2))));
+        assertThat(modifications, hasItem(allOf(isA(TransactionDelete.class), hasPath(PATH_3))));
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     protected <R extends TransactionRequest<R>> void testRequestResponse(final Consumer<VotingFuture<Void>> consumer,
             final Class<R> expectedRequest,
-            final BiFunction<TransactionIdentifier, Long, TransactionSuccess<?>> replySupplier) throws Exception {
+            final BiFunction<TransactionIdentifier, Long, TransactionSuccess<?>> replySupplier) {
         final TransactionTester<T> tester = getTester();
         final VotingFuture<Void> future = mock(VotingFuture.class);
         transaction.seal();
@@ -233,13 +244,13 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
         verify(future).voteYes();
     }
 
-    protected <R extends TransactionRequest<R>> R testHandleForwardedRemoteRequest(final R request) throws Exception {
+    protected <R extends TransactionRequest<R>> R testHandleForwardedRemoteRequest(final R request) {
         transaction.handleReplayedRemoteRequest(request, createCallbackMock(), Ticker.systemTicker().read());
         final RequestEnvelope envelope = backendProbe.expectMsgClass(RequestEnvelope.class);
         final R received = (R) envelope.getMessage();
-        Assert.assertTrue(received.getClass().equals(request.getClass()));
-        Assert.assertEquals(TRANSACTION_ID, received.getTarget());
-        Assert.assertEquals(clientContextProbe.ref(), received.getReplyTo());
+        assertTrue(received.getClass().equals(request.getClass()));
+        assertEquals(TRANSACTION_ID, received.getTarget());
+        assertEquals(clientContextProbe.ref(), received.getReplyTo());
         return received;
     }
 
@@ -262,7 +273,7 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
     }
 
     protected static BaseMatcher<TransactionModification> hasPath(final YangInstanceIdentifier path) {
-        return new BaseMatcher<TransactionModification>() {
+        return new BaseMatcher<>() {
 
             @Override
             public boolean matches(final Object item) {
@@ -286,6 +297,7 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
         return new TestProbe(system);
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     protected TransactionTester<LocalReadWriteProxyTransaction> createLocalProxy() {
         final TestProbe backendProbe = new TestProbe(system, "backend2");
         final TestProbe clientContextProbe = new TestProbe(system, "clientContext2");
@@ -304,6 +316,7 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
         return new TransactionTester<>(tx, connection, backendProbe);
     }
 
+    @SuppressWarnings("checkstyle:hiddenField")
     protected TransactionTester<RemoteProxyTransaction> createRemoteProxyTransactionTester() {
         final TestProbe clientContextProbe = new TestProbe(system, "remoteClientContext");
         final TestProbe backendProbe = new TestProbe(system, "remoteBackend");
@@ -316,7 +329,7 @@ public abstract class AbstractProxyTransactionTest<T extends AbstractProxyTransa
                 AccessClientUtil.createConnectedConnection(context, 0L, backend);
         final ProxyHistory proxyHistory = ProxyHistory.createClient(history, connection, HISTORY_ID);
         final RemoteProxyTransaction transaction =
-                new RemoteProxyTransaction(proxyHistory, TRANSACTION_ID, false, false);
+                new RemoteProxyTransaction(proxyHistory, TRANSACTION_ID, false, false, false);
         return new TransactionTester<>(transaction, connection, backendProbe);
     }
 }