Bug 3194: Dynamically update PrimaryShardInfo cache when leader changes
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / LocalTransactionContextTest.java
1 package org.opendaylight.controller.cluster.datastore;
2
3 import static org.mockito.Mockito.doReturn;
4 import static org.mockito.Mockito.mock;
5 import static org.mockito.Mockito.verify;
6 import com.google.common.base.Optional;
7 import com.google.common.util.concurrent.Futures;
8 import com.google.common.util.concurrent.SettableFuture;
9 import java.util.concurrent.Semaphore;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.mockito.Mock;
13 import org.mockito.MockitoAnnotations;
14 import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier;
15 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
16 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
17 import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
20
21 public class LocalTransactionContextTest {
22
23     @Mock
24     Semaphore limiter;
25
26     @Mock
27     TransactionIdentifier identifier;
28
29     @Mock
30     DOMStoreReadWriteTransaction readWriteTransaction;
31
32     LocalTransactionContext localTransactionContext;
33
34     @Before
35     public void setUp(){
36         MockitoAnnotations.initMocks(this);
37         localTransactionContext = new LocalTransactionContext(identifier, readWriteTransaction, new OperationCompleter(limiter)) {
38             @Override
39             protected DOMStoreWriteTransaction getWriteDelegate() {
40                 return readWriteTransaction;
41             }
42
43             @Override
44             protected DOMStoreReadTransaction getReadDelegate() {
45                 return readWriteTransaction;
46             }
47         };
48     }
49
50     @Test
51     public void testWrite(){
52         YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
53         NormalizedNode normalizedNode = mock(NormalizedNode.class);
54         localTransactionContext.writeData(yangInstanceIdentifier, normalizedNode);
55         verify(limiter).release();
56         verify(readWriteTransaction).write(yangInstanceIdentifier, normalizedNode);
57     }
58
59     @Test
60     public void testMerge(){
61         YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
62         NormalizedNode normalizedNode = mock(NormalizedNode.class);
63         localTransactionContext.mergeData(yangInstanceIdentifier, normalizedNode);
64         verify(limiter).release();
65         verify(readWriteTransaction).merge(yangInstanceIdentifier, normalizedNode);
66     }
67
68     @Test
69     public void testDelete(){
70         YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
71         localTransactionContext.deleteData(yangInstanceIdentifier);
72         verify(limiter).release();
73         verify(readWriteTransaction).delete(yangInstanceIdentifier);
74     }
75
76
77     @Test
78     public void testRead(){
79         YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
80         NormalizedNode normalizedNode = mock(NormalizedNode.class);
81         doReturn(Futures.immediateCheckedFuture(Optional.of(normalizedNode))).when(readWriteTransaction).read(yangInstanceIdentifier);
82         localTransactionContext.readData(yangInstanceIdentifier, SettableFuture.<Optional<NormalizedNode<?,?>>>create());
83         verify(limiter).release();
84         verify(readWriteTransaction).read(yangInstanceIdentifier);
85     }
86
87     @Test
88     public void testExists(){
89         YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
90         doReturn(Futures.immediateCheckedFuture(true)).when(readWriteTransaction).exists(yangInstanceIdentifier);
91         localTransactionContext.dataExists(yangInstanceIdentifier, SettableFuture.<Boolean> create());
92         verify(limiter).release();
93         verify(readWriteTransaction).exists(yangInstanceIdentifier);
94     }
95
96     @Test
97     public void testReady(){
98         doReturn(mock(LocalThreePhaseCommitCohort.class)).when(readWriteTransaction).ready();
99         localTransactionContext.readyTransaction();
100         verify(limiter).release();
101         verify(readWriteTransaction).ready();
102     }
103
104
105 }