Add mockito-configuration to tests
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / RaftActorDelegatingPersistentDataProviderTest.java
1 /*
2  * Copyright (c) 2015 Brocade Communications 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.raft;
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.doReturn;
14 import static org.mockito.Mockito.verify;
15 import akka.japi.Procedure;
16 import com.google.protobuf.GeneratedMessage.GeneratedExtension;
17 import java.util.Map;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.Mock;
21 import org.mockito.MockitoAnnotations;
22 import org.mockito.invocation.InvocationOnMock;
23 import org.mockito.stubbing.Answer;
24 import org.opendaylight.controller.cluster.DataPersistenceProvider;
25 import org.opendaylight.controller.cluster.PersistentDataProvider;
26 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
27 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.PersistentPayload;
28
29 /**
30  * Unit tests for RaftActorDelegatingPersistentDataProvider.
31  *
32  * @author Thomas Pantelis
33  */
34 public class RaftActorDelegatingPersistentDataProviderTest {
35     private static final Payload PERSISTENT_PAYLOAD = new TestPersistentPayload();
36
37     private static final Payload NON_PERSISTENT_PAYLOAD = new TestNonPersistentPayload();
38
39     private static final Object OTHER_DATA_OBJECT = new Object();
40
41     @Mock
42     private ReplicatedLogEntry mockPersistentLogEntry;
43
44     @Mock
45     private ReplicatedLogEntry mockNonPersistentLogEntry;
46
47     @Mock
48     private DataPersistenceProvider mockDelegateProvider;
49
50     @Mock
51     private PersistentDataProvider mockPersistentProvider;
52
53     @SuppressWarnings("rawtypes")
54     @Mock
55     private Procedure mockProcedure;
56
57     private RaftActorDelegatingPersistentDataProvider provider;
58
59     @SuppressWarnings("unchecked")
60     @Before
61     public void setup() throws Exception {
62         MockitoAnnotations.initMocks(this);
63         doReturn(PERSISTENT_PAYLOAD).when(mockPersistentLogEntry).getData();
64         doReturn(NON_PERSISTENT_PAYLOAD).when(mockNonPersistentLogEntry).getData();
65
66         doAnswer(new Answer<Void>() {
67             @Override
68             public Void answer(InvocationOnMock invocation) throws Exception {
69                 final Object[] args = invocation.getArguments();
70                 ((Procedure<Object>)args[1]).apply(args[0]);
71                 return null;
72             }
73         }).when(mockPersistentProvider).persist(any(Object.class), any(Procedure.class));
74
75         doNothing().when(mockDelegateProvider).persist(any(Object.class), any(Procedure.class));
76         doNothing().when(mockProcedure).apply(any(Object.class));
77         provider = new RaftActorDelegatingPersistentDataProvider(mockDelegateProvider, mockPersistentProvider);
78     }
79
80     @SuppressWarnings("unchecked")
81     @Test
82     public void testPersistWithPersistenceEnabled() {
83         doReturn(true).when(mockDelegateProvider).isRecoveryApplicable();
84
85         provider.persist(mockPersistentLogEntry, mockProcedure);
86         verify(mockDelegateProvider).persist(mockPersistentLogEntry, mockProcedure);
87
88         provider.persist(mockNonPersistentLogEntry, mockProcedure);
89         verify(mockDelegateProvider).persist(mockNonPersistentLogEntry, mockProcedure);
90
91         provider.persist(OTHER_DATA_OBJECT, mockProcedure);
92         verify(mockDelegateProvider).persist(OTHER_DATA_OBJECT, mockProcedure);
93     }
94
95     @SuppressWarnings("unchecked")
96     @Test
97     public void testPersistWithPersistenceDisabled() {
98         doReturn(false).when(mockDelegateProvider).isRecoveryApplicable();
99
100         provider.persist(mockPersistentLogEntry, mockProcedure);
101         verify(mockPersistentProvider).persist(mockPersistentLogEntry, mockProcedure);
102
103         provider.persist(mockNonPersistentLogEntry, mockProcedure);
104         verify(mockDelegateProvider).persist(mockNonPersistentLogEntry, mockProcedure);
105
106         provider.persist(OTHER_DATA_OBJECT, mockProcedure);
107         verify(mockDelegateProvider).persist(OTHER_DATA_OBJECT, mockProcedure);
108     }
109
110     static class TestNonPersistentPayload extends Payload {
111         @SuppressWarnings("rawtypes")
112         @Override
113         public <T> Map<GeneratedExtension, T> encode() {
114             return null;
115         }
116
117         @Override
118         public Payload decode(
119                 org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payload) {
120             return null;
121         }
122
123         @Override
124         public int size() {
125             return 0;
126         }
127     }
128
129     static class TestPersistentPayload extends TestNonPersistentPayload implements PersistentPayload {
130     }
131 }