Bug 2597: Batch modification operations in TransactionProxy
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / TransactionChainProxyTest.java
1 /*
2  *
3  *  Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
4  *
5  *  This program and the accompanying materials are made available under the
6  *  terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  *  and is available at http://www.eclipse.org/legal/epl-v10.html
8  *
9  */
10
11 package org.opendaylight.controller.cluster.datastore;
12
13 import static org.mockito.Matchers.anyObject;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.times;
17 import static org.mockito.Mockito.verify;
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.controller.cluster.datastore.utils.ActorContext;
24 import org.opendaylight.controller.cluster.datastore.utils.MockActorContext;
25 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
26 import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
27 import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransaction;
28 import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
29 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
30
31 public class TransactionChainProxyTest extends AbstractActorTest{
32     ActorContext actorContext = null;
33     SchemaContext schemaContext = mock(SchemaContext.class);
34
35     @Mock
36     ActorContext mockActorContext;
37
38     @Before
39     public void setUp() {
40         MockitoAnnotations.initMocks(this);
41
42         actorContext = new MockActorContext(getSystem());
43         actorContext.setSchemaContext(schemaContext);
44
45         doReturn(schemaContext).when(mockActorContext).getSchemaContext();
46         doReturn(DatastoreContext.newBuilder().build()).when(mockActorContext).getDatastoreContext();
47     }
48
49     @SuppressWarnings("resource")
50     @Test
51     public void testNewReadOnlyTransaction() throws Exception {
52
53      DOMStoreTransaction dst = new TransactionChainProxy(actorContext).newReadOnlyTransaction();
54          Assert.assertTrue(dst instanceof DOMStoreReadTransaction);
55
56     }
57
58     @SuppressWarnings("resource")
59     @Test
60     public void testNewReadWriteTransaction() throws Exception {
61         DOMStoreTransaction dst = new TransactionChainProxy(actorContext).newReadWriteTransaction();
62         Assert.assertTrue(dst instanceof DOMStoreReadWriteTransaction);
63
64     }
65
66     @SuppressWarnings("resource")
67     @Test
68     public void testNewWriteOnlyTransaction() throws Exception {
69         DOMStoreTransaction dst = new TransactionChainProxy(actorContext).newWriteOnlyTransaction();
70         Assert.assertTrue(dst instanceof DOMStoreWriteTransaction);
71
72     }
73
74     @Test
75     public void testClose() throws Exception {
76         ActorContext context = mock(ActorContext.class);
77
78         new TransactionChainProxy(context).close();
79
80         verify(context, times(1)).broadcast(anyObject());
81     }
82
83     @Test
84     public void testTransactionChainsHaveUniqueId(){
85         TransactionChainProxy one = new TransactionChainProxy(mock(ActorContext.class));
86         TransactionChainProxy two = new TransactionChainProxy(mock(ActorContext.class));
87
88         Assert.assertNotEquals(one.getTransactionChainId(), two.getTransactionChainId());
89     }
90
91     @Test
92     public void testRateLimitingUsedInReadWriteTxCreation(){
93         TransactionChainProxy txChainProxy = new TransactionChainProxy(mockActorContext);
94
95         txChainProxy.newReadWriteTransaction();
96
97         verify(mockActorContext, times(1)).acquireTxCreationPermit();
98     }
99
100     @Test
101     public void testRateLimitingUsedInWriteOnlyTxCreation(){
102         TransactionChainProxy txChainProxy = new TransactionChainProxy(mockActorContext);
103
104         txChainProxy.newWriteOnlyTransaction();
105
106         verify(mockActorContext, times(1)).acquireTxCreationPermit();
107     }
108
109
110     @Test
111     public void testRateLimitingNotUsedInReadOnlyTxCreation(){
112         TransactionChainProxy txChainProxy = new TransactionChainProxy(mockActorContext);
113
114         txChainProxy.newReadOnlyTransaction();
115
116         verify(mockActorContext, times(0)).acquireTxCreationPermit();
117     }
118 }