2 * Copyright (c) 2015 Brocade Communications 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.raft;
10 import static org.mockito.Mockito.doReturn;
11 import static org.mockito.Mockito.verify;
12 import akka.japi.Procedure;
13 import com.google.protobuf.GeneratedMessage.GeneratedExtension;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mock;
18 import org.mockito.MockitoAnnotations;
19 import org.opendaylight.controller.cluster.DataPersistenceProvider;
20 import org.opendaylight.controller.cluster.PersistentDataProvider;
21 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
22 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.PersistentPayload;
25 * Unit tests for RaftActorDelegatingPersistentDataProvider.
27 * @author Thomas Pantelis
29 public class RaftActorDelegatingPersistentDataProviderTest {
30 private static final Payload PERSISTENT_PAYLOAD = new TestPersistentPayload();
32 private static final Payload NON_PERSISTENT_PAYLOAD = new TestNonPersistentPayload();
34 private static final Object OTHER_DATA_OBJECT = new Object();
37 private ReplicatedLogEntry mockPersistentLogEntry;
40 private ReplicatedLogEntry mockNonPersistentLogEntry;
43 private DataPersistenceProvider mockDelegateProvider;
46 private PersistentDataProvider mockPersistentProvider;
48 @SuppressWarnings("rawtypes")
50 private Procedure mockProcedure;
52 private RaftActorDelegatingPersistentDataProvider provider;
56 MockitoAnnotations.initMocks(this);
57 doReturn(PERSISTENT_PAYLOAD).when(mockPersistentLogEntry).getData();
58 doReturn(NON_PERSISTENT_PAYLOAD).when(mockNonPersistentLogEntry).getData();
59 provider = new RaftActorDelegatingPersistentDataProvider(mockDelegateProvider, mockPersistentProvider);
62 @SuppressWarnings("unchecked")
64 public void testPersistWithPersistenceEnabled() {
65 doReturn(true).when(mockDelegateProvider).isRecoveryApplicable();
67 provider.persist(mockPersistentLogEntry, mockProcedure);
68 verify(mockDelegateProvider).persist(mockPersistentLogEntry, mockProcedure);
70 provider.persist(mockNonPersistentLogEntry, mockProcedure);
71 verify(mockDelegateProvider).persist(mockNonPersistentLogEntry, mockProcedure);
73 provider.persist(OTHER_DATA_OBJECT, mockProcedure);
74 verify(mockDelegateProvider).persist(OTHER_DATA_OBJECT, mockProcedure);
77 @SuppressWarnings("unchecked")
79 public void testPersistWithPersistenceDisabled() {
80 doReturn(false).when(mockDelegateProvider).isRecoveryApplicable();
82 provider.persist(mockPersistentLogEntry, mockProcedure);
83 verify(mockPersistentProvider).persist(mockPersistentLogEntry, mockProcedure);
85 provider.persist(mockNonPersistentLogEntry, mockProcedure);
86 verify(mockDelegateProvider).persist(mockNonPersistentLogEntry, mockProcedure);
88 provider.persist(OTHER_DATA_OBJECT, mockProcedure);
89 verify(mockDelegateProvider).persist(OTHER_DATA_OBJECT, mockProcedure);
92 static class TestNonPersistentPayload extends Payload {
93 @SuppressWarnings("rawtypes")
95 public <T> Map<GeneratedExtension, T> encode() {
100 public Payload decode(
101 org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payload) {
111 static class TestPersistentPayload extends TestNonPersistentPayload implements PersistentPayload {