BUG 3249 : Operation Limiter not release on completion of operation
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / LocalTransactionContextTest.java
diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/LocalTransactionContextTest.java
new file mode 100644 (file)
index 0000000..7ca9f90
--- /dev/null
@@ -0,0 +1,93 @@
+package org.opendaylight.controller.cluster.datastore;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.SettableFuture;
+import java.util.concurrent.Semaphore;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.controller.cluster.datastore.identifiers.TransactionIdentifier;
+import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+
+public class LocalTransactionContextTest {
+
+    @Mock
+    Semaphore limiter;
+
+    @Mock
+    TransactionIdentifier identifier;
+
+    @Mock
+    DOMStoreReadWriteTransaction readWriteTransaction;
+
+    LocalTransactionContext localTransactionContext;
+
+    @Before
+    public void setUp(){
+        MockitoAnnotations.initMocks(this);
+        localTransactionContext = new LocalTransactionContext(identifier, readWriteTransaction, new OperationCompleter(limiter));
+    }
+
+    @Test
+    public void testWrite(){
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
+        NormalizedNode normalizedNode = mock(NormalizedNode.class);
+        localTransactionContext.writeData(yangInstanceIdentifier, normalizedNode);
+        verify(limiter).release();
+        verify(readWriteTransaction).write(yangInstanceIdentifier, normalizedNode);
+    }
+
+    @Test
+    public void testMerge(){
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
+        NormalizedNode normalizedNode = mock(NormalizedNode.class);
+        localTransactionContext.mergeData(yangInstanceIdentifier, normalizedNode);
+        verify(limiter).release();
+        verify(readWriteTransaction).merge(yangInstanceIdentifier, normalizedNode);
+    }
+
+    @Test
+    public void testDelete(){
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
+        localTransactionContext.deleteData(yangInstanceIdentifier);
+        verify(limiter).release();
+        verify(readWriteTransaction).delete(yangInstanceIdentifier);
+    }
+
+
+    @Test
+    public void testRead(){
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
+        NormalizedNode normalizedNode = mock(NormalizedNode.class);
+        doReturn(Futures.immediateCheckedFuture(Optional.of(normalizedNode))).when(readWriteTransaction).read(yangInstanceIdentifier);
+        localTransactionContext.readData(yangInstanceIdentifier, SettableFuture.<Optional<NormalizedNode<?,?>>>create());
+        verify(limiter).release();
+        verify(readWriteTransaction).read(yangInstanceIdentifier);
+    }
+
+    @Test
+    public void testExists(){
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().build();
+        doReturn(Futures.immediateCheckedFuture(true)).when(readWriteTransaction).exists(yangInstanceIdentifier);
+        localTransactionContext.dataExists(yangInstanceIdentifier, SettableFuture.<Boolean> create());
+        verify(limiter).release();
+        verify(readWriteTransaction).exists(yangInstanceIdentifier);
+    }
+
+    @Test
+    public void testReady(){
+        doReturn(mock(LocalThreePhaseCommitCohort.class)).when(readWriteTransaction).ready();
+        localTransactionContext.readyTransaction();
+        verify(limiter).release();
+        verify(readWriteTransaction).ready();
+    }
+
+
+}
\ No newline at end of file