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 ShardDataTreeCohort immediatePreCommit(final ShardDataTreeCohort cohort) {
47 final FutureCallback<DataTreeCandidate> callback = mockCallback();
48 doNothing().when(callback).onSuccess(any(DataTreeCandidate.class));
49 cohort.preCommit(callback);
51 verify(callback).onSuccess(any(DataTreeCandidate.class));
52 verifyNoMoreInteractions(callback);
56 public static ShardDataTreeCohort immediateCommit(final ShardDataTreeCohort cohort) {
57 final FutureCallback<UnsignedLong> callback = mockCallback();
58 doNothing().when(callback).onSuccess(any(UnsignedLong.class));
59 cohort.commit(callback);
61 verify(callback, timeout(5000)).onSuccess(any(UnsignedLong.class));
62 verifyNoMoreInteractions(callback);
66 @SuppressWarnings("unchecked")
67 private static <T> Object invokeSuccess(final InvocationOnMock invocation, final T value) {
68 invocation.getArgumentAt(0, FutureCallback.class).onSuccess(value);
72 private static Object invokeFailure(final InvocationOnMock invocation) {
73 invocation.getArgumentAt(0, FutureCallback.class).onFailure(mock(Exception.class));
77 @SuppressWarnings("unchecked")
78 public static ShardDataTreeCohort failedCanCommit(final ShardDataTreeCohort mock) {
79 doAnswer(invocation -> {
80 return invokeFailure(invocation);
81 }).when(mock).canCommit(any(FutureCallback.class));
85 @SuppressWarnings("unchecked")
86 public static ShardDataTreeCohort failedPreCommit(final ShardDataTreeCohort mock) {
87 doAnswer(invocation -> {
88 return invokeFailure(invocation);
89 }).when(mock).preCommit(any(FutureCallback.class));
93 @SuppressWarnings("unchecked")
94 public static ShardDataTreeCohort failedCommit(final ShardDataTreeCohort mock) {
95 doAnswer(invocation -> {
96 return invokeFailure(invocation);
97 }).when(mock).commit(any(FutureCallback.class));
101 @SuppressWarnings("unchecked")
102 public static ShardDataTreeCohort successfulCanCommit(final ShardDataTreeCohort mock) {
103 doAnswer(invocation -> {
104 return invokeSuccess(invocation, null);
105 }).when(mock).canCommit(any(FutureCallback.class));
110 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock) {
111 return successfulPreCommit(mock, mock(DataTreeCandidate.class));
114 @SuppressWarnings("unchecked")
115 public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock,
116 final DataTreeCandidate candidate) {
117 doAnswer(invocation -> {
118 return invokeSuccess(invocation, candidate);
119 }).when(mock).preCommit(any(FutureCallback.class));
124 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock) {
125 return successfulCommit(mock, UnsignedLong.ZERO);
128 @SuppressWarnings("unchecked")
129 public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock, final UnsignedLong index) {
130 doAnswer(invocation -> {
131 return invokeSuccess(invocation, index);
132 }).when(mock).commit(any(FutureCallback.class));
137 @SuppressWarnings("unchecked")
138 public static void assertSequencedCommit(final ShardDataTreeCohort mock) {
139 final InOrder inOrder = inOrder(mock);
140 inOrder.verify(mock).canCommit(any(FutureCallback.class));
141 inOrder.verify(mock).preCommit(any(FutureCallback.class));
142 inOrder.verify(mock).commit(any(FutureCallback.class));