Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / DataTreeCohortActorTest.java
index b1b3ff4b2742075c5ca2cc0f4e009dfc13232f6b..7a3e2683921c3a6d99f04ea5ef41e5fe34240de4 100644 (file)
@@ -9,7 +9,8 @@ package org.opendaylight.controller.cluster.datastore;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyCollection;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.reset;
@@ -18,14 +19,13 @@ import static org.mockito.Mockito.verify;
 import akka.actor.ActorRef;
 import akka.pattern.Patterns;
 import akka.util.Timeout;
+import com.google.common.util.concurrent.FluentFuture;
 import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.JdkFutureAdapters;
-import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.Uninterruptibles;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import org.junit.After;
@@ -44,9 +44,10 @@ import org.opendaylight.mdsal.common.api.PostPreCommitStep;
 import org.opendaylight.mdsal.common.api.ThreePhaseCommitStep;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCandidate;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort;
+import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import scala.concurrent.Await;
 
 /**
@@ -56,7 +57,7 @@ import scala.concurrent.Await;
  */
 public class DataTreeCohortActorTest extends AbstractActorTest {
     private static final Collection<DOMDataTreeCandidate> CANDIDATES = new ArrayList<>();
-    private static final SchemaContext MOCK_SCHEMA = mock(SchemaContext.class);
+    private static final EffectiveModelContext MOCK_SCHEMA = mock(EffectiveModelContext.class);
     private final TestActorFactory actorFactory = new TestActorFactory(getSystem());
     private final DOMDataTreeCommitCohort mockCohort = mock(DOMDataTreeCommitCohort.class);
     private final PostCanCommitStep mockPostCanCommit = mock(PostCanCommitStep.class);
@@ -78,7 +79,7 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
 
         TransactionIdentifier txId = nextTransactionId();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
 
         askAndAwait(cohortActor, new PreCommit(txId));
         verify(mockPostCanCommit).preCommit();
@@ -88,7 +89,7 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
 
         resetMockCohort();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
     }
 
     @Test
@@ -108,26 +109,22 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
         askAndAwait(cohortActor, new Commit(txId2));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testAsyncCohort() throws Exception {
-        ExecutorService executor = Executors.newSingleThreadExecutor();
+        ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
 
-        doReturn(Futures.makeChecked(executeWithDelay(executor, mockPostCanCommit),
-            ex -> new DataValidationFailedException(YangInstanceIdentifier.EMPTY, "mock")))
-                .when(mockCohort).canCommit(any(Object.class), any(Collection.class), any(SchemaContext.class));
+        doReturn(executeWithDelay(executor, mockPostCanCommit))
+                .when(mockCohort).canCommit(any(Object.class), any(EffectiveModelContext.class), anyCollection());
 
-        doReturn(JdkFutureAdapters.listenInPoolThread(executor.submit(() ->
-            mockPostPreCommit), MoreExecutors.directExecutor())).when(mockPostCanCommit).preCommit();
+        doReturn(executor.submit(() -> mockPostPreCommit)).when(mockPostCanCommit).preCommit();
 
-        doReturn(JdkFutureAdapters.listenInPoolThread(executor.submit(() ->
-            null), MoreExecutors.directExecutor())).when(mockPostPreCommit).commit();
+        doReturn(executor.submit(() -> null)).when(mockPostPreCommit).commit();
 
         ActorRef cohortActor = newCohortActor("testAsyncCohort");
 
         TransactionIdentifier txId = nextTransactionId();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
 
         askAndAwait(cohortActor, new PreCommit(txId));
         verify(mockPostCanCommit).preCommit();
@@ -138,12 +135,12 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
         executor.shutdownNow();
     }
 
-    @SuppressWarnings("unchecked")
     @Test
     public void testFailureOnCanCommit() throws Exception {
-        DataValidationFailedException failure = new DataValidationFailedException(YangInstanceIdentifier.EMPTY, "mock");
-        doReturn(Futures.immediateFailedCheckedFuture(failure)).when(mockCohort).canCommit(any(Object.class),
-                any(Collection.class), any(SchemaContext.class));
+        DataValidationFailedException failure = new DataValidationFailedException(YangInstanceIdentifier.of(),
+                "mock");
+        doReturn(FluentFutures.immediateFailedFluentFuture(failure)).when(mockCohort).canCommit(any(Object.class),
+                any(EffectiveModelContext.class), anyCollection());
 
         ActorRef cohortActor = newCohortActor("testFailureOnCanCommit");
 
@@ -156,7 +153,7 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
 
         resetMockCohort();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
     }
 
     @Test
@@ -165,14 +162,14 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
 
         TransactionIdentifier txId = nextTransactionId();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
 
         askAndAwait(cohortActor, new Abort(txId));
         verify(mockPostCanCommit).abort();
 
         resetMockCohort();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
     }
 
     @Test
@@ -181,7 +178,7 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
 
         TransactionIdentifier txId = nextTransactionId();
         askAndAwait(cohortActor, new CanCommit(txId, CANDIDATES, MOCK_SCHEMA, cohortActor));
-        verify(mockCohort).canCommit(txId, CANDIDATES, MOCK_SCHEMA);
+        verify(mockCohort).canCommit(txId, MOCK_SCHEMA, CANDIDATES);
 
         askAndAwait(cohortActor, new PreCommit(txId));
         verify(mockPostCanCommit).preCommit();
@@ -190,30 +187,29 @@ public class DataTreeCohortActorTest extends AbstractActorTest {
         verify(mockPostPreCommit).abort();
     }
 
-    private <T> ListenableFuture<T> executeWithDelay(ExecutorService executor, T result) {
-        return JdkFutureAdapters.listenInPoolThread(executor.submit(() -> {
+    private static <T> FluentFuture<T> executeWithDelay(final ListeningExecutorService executor, final T result) {
+        return FluentFuture.from(executor.submit(() -> {
             Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
             return result;
-        }), MoreExecutors.directExecutor());
+        }));
     }
 
-    private ActorRef newCohortActor(String name) {
-        return actorFactory.createActor(DataTreeCohortActor.props(mockCohort, YangInstanceIdentifier.EMPTY), name);
+    private ActorRef newCohortActor(final String name) {
+        return actorFactory.createActor(DataTreeCohortActor.props(mockCohort, YangInstanceIdentifier.of()), name);
     }
 
-    @SuppressWarnings("unchecked")
     private void resetMockCohort() {
         reset(mockCohort);
         doReturn(ThreePhaseCommitStep.NOOP_ABORT_FUTURE).when(mockPostCanCommit).abort();
         doReturn(Futures.immediateFuture(mockPostPreCommit)).when(mockPostCanCommit).preCommit();
-        doReturn(Futures.immediateCheckedFuture(mockPostCanCommit)).when(mockCohort).canCommit(any(Object.class),
-                any(Collection.class), any(SchemaContext.class));
+        doReturn(FluentFutures.immediateFluentFuture(mockPostCanCommit)).when(mockCohort).canCommit(any(Object.class),
+                any(EffectiveModelContext.class), anyCollection());
 
         doReturn(ThreePhaseCommitStep.NOOP_ABORT_FUTURE).when(mockPostPreCommit).abort();
         doReturn(Futures.immediateFuture(null)).when(mockPostPreCommit).commit();
     }
 
-    private static void askAndAwait(ActorRef actor, CommitProtocolCommand<?> message) throws Exception {
+    private static void askAndAwait(final ActorRef actor, final CommitProtocolCommand<?> message) throws Exception {
         Timeout timeout = new Timeout(5, TimeUnit.SECONDS);
         Object result = Await.result(Patterns.ask(actor, message, timeout), timeout.duration());
         assertTrue("Expected Success but was " + result, result instanceof Success);