2 * Copyright (c) 2016 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.datastore;
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Mockito.doAnswer;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.inOrder;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.timeout;
16 import static org.mockito.Mockito.verify;
17 import static org.mockito.Mockito.verifyNoMoreInteractions;
18 import com.google.common.primitives.UnsignedLong;
19 import com.google.common.util.concurrent.FutureCallback;
20 import org.mockito.InOrder;
21 import org.mockito.invocation.InvocationOnMock;
22 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
24 public final class ShardDataTreeMocking {
26 private ShardDataTreeMocking() {
27 throw new UnsupportedOperationException();
30 @SuppressWarnings("unchecked")
31 private static <T> FutureCallback<T> mockCallback() {
32 return mock(FutureCallback.class);
35 public static ShardDataTreeCohort immediateCanCommit(final ShardDataTreeCohort cohort) {
36 final FutureCallback<Void> callback = mockCallback();
37 doNothing().when(callback).onSuccess(null);
38 cohort.canCommit(callback);
40 verify(callback).onSuccess(null);
41 verifyNoMoreInteractions(callback);
45 public static ShardDataTreeCohort immediatePreCommit(final ShardDataTreeCohort cohort) {
46 final FutureCallback<DataTreeCandidate> callback = mockCallback();
47 doNothing().when(callback).onSuccess(any(DataTreeCandidate.class));
48 cohort.preCommit(callback);
50 verify(callback).onSuccess(any(DataTreeCandidate.class));
51 verifyNoMoreInteractions(callback);
55 public static ShardDataTreeCohort immediateCommit(final ShardDataTreeCohort cohort) {
56 final FutureCallback<UnsignedLong> callback = mockCallback();
57 doNothing().when(callback).onSuccess(any(UnsignedLong.class));
58 cohort.commit(callback);
60 verify(callback, timeout(5000)).onSuccess(any(UnsignedLong.class));
61 verifyNoMoreInteractions(callback);
65 @SuppressWarnings("unchecked")
66 private static <T> Object invokeSuccess(final InvocationOnMock invocation, final T value) {
67 invocation.getArgumentAt(0, FutureCallback.class).onSuccess(value);
71 private static Object invokeFailure(final InvocationOnMock invocation) {
72 invocation.getArgumentAt(0, FutureCallback.class).onFailure(mock(Exception.class));
76 @SuppressWarnings("unchecked")
77 public static ShardDataTreeCohort failedCanCommit(final ShardDataTreeCohort mock) {
78 doAnswer(invocation -> {
79 return invokeFailure(invocation);
80 }).when(mock).canCommit(any(FutureCallback.class));
84 @SuppressWarnings("unchecked")
85 public static ShardDataTreeCohort failedPreCommit(final ShardDataTreeCohort mock) {
86 doAnswer(invocation -> {
87 return invokeFailure(invocation);
88 }).when(mock).preCommit(any(FutureCallback.class));
92 @SuppressWarnings("unchecked")
93 public static ShardDataTreeCohort failedCommit(final ShardDataTreeCohort mock) {
94 doAnswer(invocation -> {
95 return invokeFailure(invocation);
96 }).when(mock).commit(any(FutureCallback.class));
100 @SuppressWarnings("unchecked")
101 public static ShardDataTreeCohort successfulCanCommit(final ShardDataTreeCohort mock) {
102 doAnswer(invocation -> {
103 return invokeSuccess(invocation, null);
104 }).when(mock).canCommit(any(FutureCallback.class));
109 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock) {
110 return successfulPreCommit(mock, mock(DataTreeCandidate.class));
113 @SuppressWarnings("unchecked")
114 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock, final DataTreeCandidate candidate) {
115 doAnswer(invocation -> {
116 return invokeSuccess(invocation, candidate);
117 }).when(mock).preCommit(any(FutureCallback.class));
122 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock) {
123 return successfulCommit(mock, UnsignedLong.ZERO);
126 @SuppressWarnings("unchecked")
127 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock, final UnsignedLong index) {
128 doAnswer(invocation -> {
129 return invokeSuccess(invocation, index);
130 }).when(mock).commit(any(FutureCallback.class));
135 @SuppressWarnings("unchecked")
136 public static void assertSequencedCommit(final ShardDataTreeCohort mock) {
137 final InOrder inOrder = inOrder(mock);
138 inOrder.verify(mock).canCommit(any(FutureCallback.class));
139 inOrder.verify(mock).preCommit(any(FutureCallback.class));
140 inOrder.verify(mock).commit(any(FutureCallback.class));