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;
19 import com.google.common.primitives.UnsignedLong;
20 import com.google.common.util.concurrent.FutureCallback;
21 import org.mockito.InOrder;
22 import org.mockito.invocation.InvocationOnMock;
23 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
25 public final class ShardDataTreeMocking {
27 private ShardDataTreeMocking() {
28 throw new UnsupportedOperationException();
31 @SuppressWarnings("unchecked")
32 private static <T> FutureCallback<T> mockCallback() {
33 return mock(FutureCallback.class);
36 public static ShardDataTreeCohort immediateCanCommit(final ShardDataTreeCohort cohort) {
37 final FutureCallback<Void> callback = mockCallback();
38 doNothing().when(callback).onSuccess(null);
39 cohort.canCommit(callback);
41 verify(callback).onSuccess(null);
42 verifyNoMoreInteractions(callback);
46 public static FutureCallback<Void> coordinatedCanCommit(final ShardDataTreeCohort cohort) {
47 final FutureCallback<Void> callback = mockCallback();
48 doNothing().when(callback).onSuccess(null);
49 doNothing().when(callback).onFailure(any(Throwable.class));
50 cohort.canCommit(callback);
54 public static ShardDataTreeCohort immediatePreCommit(final ShardDataTreeCohort cohort) {
55 final FutureCallback<DataTreeCandidate> callback = mockCallback();
56 doNothing().when(callback).onSuccess(any(DataTreeCandidate.class));
57 cohort.preCommit(callback);
59 verify(callback).onSuccess(any(DataTreeCandidate.class));
60 verifyNoMoreInteractions(callback);
64 public static FutureCallback<DataTreeCandidate> coordinatedPreCommit(final ShardDataTreeCohort cohort) {
65 final FutureCallback<DataTreeCandidate> callback = mockCallback();
66 doNothing().when(callback).onSuccess(any(DataTreeCandidate.class));
67 doNothing().when(callback).onFailure(any(Throwable.class));
68 cohort.preCommit(callback);
72 public static ShardDataTreeCohort immediateCommit(final ShardDataTreeCohort cohort) {
73 final FutureCallback<UnsignedLong> callback = mockCallback();
74 doNothing().when(callback).onSuccess(any(UnsignedLong.class));
75 cohort.commit(callback);
77 verify(callback, timeout(5000)).onSuccess(any(UnsignedLong.class));
78 verifyNoMoreInteractions(callback);
82 public static FutureCallback<UnsignedLong> coordinatedCommit(final ShardDataTreeCohort cohort) {
83 final FutureCallback<UnsignedLong> callback = mockCallback();
84 doNothing().when(callback).onSuccess(any(UnsignedLong.class));
85 doNothing().when(callback).onFailure(any(Throwable.class));
86 cohort.commit(callback);
90 @SuppressWarnings("unchecked")
91 private static <T> Object invokeSuccess(final InvocationOnMock invocation, final T value) {
92 invocation.getArgumentAt(0, FutureCallback.class).onSuccess(value);
96 private static Object invokeFailure(final InvocationOnMock invocation) {
97 invocation.getArgumentAt(0, FutureCallback.class).onFailure(mock(Exception.class));
101 @SuppressWarnings("unchecked")
102 public static ShardDataTreeCohort failedCanCommit(final ShardDataTreeCohort mock) {
103 doAnswer(invocation -> {
104 return invokeFailure(invocation);
105 }).when(mock).canCommit(any(FutureCallback.class));
109 @SuppressWarnings("unchecked")
110 public static ShardDataTreeCohort failedPreCommit(final ShardDataTreeCohort mock) {
111 doAnswer(invocation -> {
112 return invokeFailure(invocation);
113 }).when(mock).preCommit(any(FutureCallback.class));
117 @SuppressWarnings("unchecked")
118 public static ShardDataTreeCohort failedCommit(final ShardDataTreeCohort mock) {
119 doAnswer(invocation -> {
120 return invokeFailure(invocation);
121 }).when(mock).commit(any(FutureCallback.class));
125 @SuppressWarnings("unchecked")
126 public static ShardDataTreeCohort successfulCanCommit(final ShardDataTreeCohort mock) {
127 doAnswer(invocation -> {
128 return invokeSuccess(invocation, null);
129 }).when(mock).canCommit(any(FutureCallback.class));
134 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock) {
135 return successfulPreCommit(mock, mock(DataTreeCandidate.class));
138 @SuppressWarnings("unchecked")
139 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock,
140 final DataTreeCandidate candidate) {
141 doAnswer(invocation -> {
142 return invokeSuccess(invocation, candidate);
143 }).when(mock).preCommit(any(FutureCallback.class));
148 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock) {
149 return successfulCommit(mock, UnsignedLong.ZERO);
152 @SuppressWarnings("unchecked")
153 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock, final UnsignedLong index) {
154 doAnswer(invocation -> {
155 return invokeSuccess(invocation, index);
156 }).when(mock).commit(any(FutureCallback.class));
161 @SuppressWarnings("unchecked")
162 public static void assertSequencedCommit(final ShardDataTreeCohort mock) {
163 final InOrder inOrder = inOrder(mock);
164 inOrder.verify(mock).canCommit(any(FutureCallback.class));
165 inOrder.verify(mock).preCommit(any(FutureCallback.class));
166 inOrder.verify(mock).commit(any(FutureCallback.class));