1c71b79625cc012f33a46b26f11dfd2f778bb51d
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / ShardDataTreeMocking.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.datastore;
9
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
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;
24
25 public final class ShardDataTreeMocking {
26
27     private ShardDataTreeMocking() {
28         throw new UnsupportedOperationException();
29     }
30
31     @SuppressWarnings("unchecked")
32     private static <T> FutureCallback<T> mockCallback() {
33         return mock(FutureCallback.class);
34     }
35
36     public static ShardDataTreeCohort immediateCanCommit(final ShardDataTreeCohort cohort) {
37         final FutureCallback<Void> callback = mockCallback();
38         doNothing().when(callback).onSuccess(null);
39         cohort.canCommit(callback);
40
41         verify(callback).onSuccess(null);
42         verifyNoMoreInteractions(callback);
43         return cohort;
44     }
45
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);
50
51         verify(callback).onSuccess(any(DataTreeCandidate.class));
52         verifyNoMoreInteractions(callback);
53         return cohort;
54     }
55
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);
60
61         verify(callback, timeout(5000)).onSuccess(any(UnsignedLong.class));
62         verifyNoMoreInteractions(callback);
63         return cohort;
64     }
65
66     @SuppressWarnings("unchecked")
67     private static <T> Object invokeSuccess(final InvocationOnMock invocation, final T value) {
68         invocation.getArgumentAt(0, FutureCallback.class).onSuccess(value);
69         return null;
70     }
71
72     private static Object invokeFailure(final InvocationOnMock invocation) {
73         invocation.getArgumentAt(0, FutureCallback.class).onFailure(mock(Exception.class));
74         return null;
75     }
76
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));
82         return mock;
83     }
84
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));
90         return mock;
91     }
92
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));
98         return mock;
99     }
100
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));
106
107         return mock;
108     }
109
110     public static ShardDataTreeCohort successfulPreCommit(final ShardDataTreeCohort mock) {
111         return successfulPreCommit(mock, mock(DataTreeCandidate.class));
112     }
113
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));
120
121         return mock;
122     }
123
124     public static ShardDataTreeCohort successfulCommit(final ShardDataTreeCohort mock) {
125         return successfulCommit(mock, UnsignedLong.ZERO);
126     }
127
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));
133
134         return mock;
135     }
136
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));
143     }
144 }