Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / ShardDataTreeMocking.java
index d273910b6dea0498348c824d79798ed96f6ee7fc..234c69e011bd05a978d13b6927b418a191fb8cf5 100644 (file)
@@ -7,7 +7,8 @@
  */
 package org.opendaylight.controller.cluster.datastore;
 
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.inOrder;
@@ -20,7 +21,10 @@ import com.google.common.primitives.UnsignedLong;
 import com.google.common.util.concurrent.FutureCallback;
 import org.mockito.InOrder;
 import org.mockito.invocation.InvocationOnMock;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
+import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
+import org.opendaylight.controller.cluster.datastore.persisted.CommitTransactionPayload;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
 
 public final class ShardDataTreeMocking {
 
@@ -34,18 +38,18 @@ public final class ShardDataTreeMocking {
     }
 
     public static ShardDataTreeCohort immediateCanCommit(final ShardDataTreeCohort cohort) {
-        final FutureCallback<Void> callback = mockCallback();
-        doNothing().when(callback).onSuccess(null);
+        final FutureCallback<Empty> callback = mockCallback();
+        doNothing().when(callback).onSuccess(Empty.value());
         cohort.canCommit(callback);
 
-        verify(callback).onSuccess(null);
+        verify(callback).onSuccess(Empty.value());
         verifyNoMoreInteractions(callback);
         return cohort;
     }
 
-    public static FutureCallback<Void> coordinatedCanCommit(final ShardDataTreeCohort cohort) {
-        final FutureCallback<Void> callback = mockCallback();
-        doNothing().when(callback).onSuccess(null);
+    public static FutureCallback<Empty> coordinatedCanCommit(final ShardDataTreeCohort cohort) {
+        final FutureCallback<Empty> callback = mockCallback();
+        doNothing().when(callback).onSuccess(Empty.value());
         doNothing().when(callback).onFailure(any(Throwable.class));
         cohort.canCommit(callback);
         return callback;
@@ -87,46 +91,60 @@ public final class ShardDataTreeMocking {
         return callback;
     }
 
-    @SuppressWarnings("unchecked")
+    public static FutureCallback<UnsignedLong> immediate3PhaseCommit(final ShardDataTreeCohort cohort) {
+        final FutureCallback<UnsignedLong> commitCallback = mockCallback();
+        doNothing().when(commitCallback).onSuccess(any(UnsignedLong.class));
+        doNothing().when(commitCallback).onFailure(any(Throwable.class));
+
+        final FutureCallback<DataTreeCandidate> preCommitCallback = mockCallback();
+        doAnswer(invocation -> {
+            cohort.commit(commitCallback);
+            return null;
+        }).when(preCommitCallback).onSuccess(any(DataTreeCandidate.class));
+        doNothing().when(preCommitCallback).onFailure(any(Throwable.class));
+
+        final FutureCallback<Empty> canCommit = mockCallback();
+        doAnswer(invocation -> {
+            cohort.preCommit(preCommitCallback);
+            return null;
+        }).when(canCommit).onSuccess(Empty.value());
+        doNothing().when(canCommit).onFailure(any(Throwable.class));
+
+        cohort.canCommit(canCommit);
+        return commitCallback;
+    }
+
     private static <T> Object invokeSuccess(final InvocationOnMock invocation, final T value) {
-        invocation.getArgumentAt(0, FutureCallback.class).onSuccess(value);
+        invocation.<FutureCallback<T>>getArgument(0).onSuccess(value);
         return null;
     }
 
     private static Object invokeFailure(final InvocationOnMock invocation) {
-        invocation.getArgumentAt(0, FutureCallback.class).onFailure(mock(Exception.class));
+        invocation.<FutureCallback<?>>getArgument(0).onFailure(mock(Exception.class));
         return null;
     }
 
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort failedCanCommit(final ShardDataTreeCohort mock) {
-        doAnswer(invocation -> {
-            return invokeFailure(invocation);
-        }).when(mock).canCommit(any(FutureCallback.class));
+        doAnswer(ShardDataTreeMocking::invokeFailure).when(mock).canCommit(any(FutureCallback.class));
         return mock;
     }
 
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort failedPreCommit(final ShardDataTreeCohort mock) {
-        doAnswer(invocation -> {
-            return invokeFailure(invocation);
-        }).when(mock).preCommit(any(FutureCallback.class));
+        doAnswer(ShardDataTreeMocking::invokeFailure).when(mock).preCommit(any(FutureCallback.class));
         return mock;
     }
 
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort failedCommit(final ShardDataTreeCohort mock) {
-        doAnswer(invocation -> {
-            return invokeFailure(invocation);
-        }).when(mock).commit(any(FutureCallback.class));
+        doAnswer(ShardDataTreeMocking::invokeFailure).when(mock).commit(any(FutureCallback.class));
         return mock;
     }
 
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort successfulCanCommit(final ShardDataTreeCohort mock) {
-        doAnswer(invocation -> {
-            return invokeSuccess(invocation, null);
-        }).when(mock).canCommit(any(FutureCallback.class));
+        doAnswer(invocation -> invokeSuccess(invocation, null)).when(mock).canCommit(any(FutureCallback.class));
 
         return mock;
     }
@@ -138,9 +156,7 @@ public final class ShardDataTreeMocking {
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock,
             final DataTreeCandidate candidate) {
-        doAnswer(invocation -> {
-            return invokeSuccess(invocation, candidate);
-        }).when(mock).preCommit(any(FutureCallback.class));
+        doAnswer(invocation -> invokeSuccess(invocation, candidate)).when(mock).preCommit(any(FutureCallback.class));
 
         return mock;
     }
@@ -151,9 +167,7 @@ public final class ShardDataTreeMocking {
 
     @SuppressWarnings("unchecked")
     public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock, final UnsignedLong index) {
-        doAnswer(invocation -> {
-            return invokeSuccess(invocation, index);
-        }).when(mock).commit(any(FutureCallback.class));
+        doAnswer(invocation -> invokeSuccess(invocation, index)).when(mock).commit(any(FutureCallback.class));
 
         return mock;
     }
@@ -165,4 +179,12 @@ public final class ShardDataTreeMocking {
         inOrder.verify(mock).preCommit(any(FutureCallback.class));
         inOrder.verify(mock).commit(any(FutureCallback.class));
     }
+
+    public static void immediatePayloadReplication(final ShardDataTree shardDataTree, final Shard mockShard) {
+        doAnswer(invocation -> {
+            shardDataTree.applyReplicatedPayload(invocation.getArgument(0), invocation.getArgument(1));
+            return null;
+        }).when(mockShard).persistPayload(any(TransactionIdentifier.class), any(CommitTransactionPayload.class),
+                anyBoolean());
+    }
 }