Bug 5947: Increasing code coverage - mdsal-dom-inmemory-datastore
[mdsal.git] / dom / mdsal-dom-inmemory-datastore / src / test / java / org / opendaylight / mdsal / dom / store / inmemory / InmemoryDOMDataTreeShardWriteTransactionTest.java
diff --git a/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java b/dom/mdsal-dom-inmemory-datastore/src/test/java/org/opendaylight/mdsal/dom/store/inmemory/InmemoryDOMDataTreeShardWriteTransactionTest.java
new file mode 100644 (file)
index 0000000..03a211e
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.mdsal.dom.store.inmemory;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DATA_TREE;
+import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.DOM_DATA_TREE_SHARD_PRODUCER;
+import static org.opendaylight.mdsal.dom.store.inmemory.TestUtils.resetMocks;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.util.concurrent.MoreExecutors;
+import java.lang.reflect.Field;
+import java.util.Map;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteCursor;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType;
+
+public class InmemoryDOMDataTreeShardWriteTransactionTest {
+
+    private static InmemoryDOMDataTreeShardWriteTransaction inmemoryDOMDataTreeShardWriteTransaction;
+    private static ShardDataModification shardDataModification;
+    private static final ShardRootModificationContext SHARD_ROOT_MODIFICATION_CONTEXT =
+            mock(ShardRootModificationContext.class);
+    private static final YangInstanceIdentifier YANG_INSTANCE_IDENTIFIER =
+            YangInstanceIdentifier.of(QName.create("test"));
+    private static final DOMDataTreeIdentifier DOM_DATA_TREE_IDENTIFIER =
+            new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, YANG_INSTANCE_IDENTIFIER);
+    private static final ForeignShardModificationContext FOREIGN_SHARD_MODIFICATION_CONTEXT =
+            new ForeignShardModificationContext(DOM_DATA_TREE_IDENTIFIER, DOM_DATA_TREE_SHARD_PRODUCER);
+    private static final ReadableWriteableDOMDataTreeShard READABLE_WRITEABLE_DOM_DATA_TREE_SHARD =
+            mock(ReadableWriteableDOMDataTreeShard.class);
+    private static final ChildShardContext CHILD_SHARD_CONTEXT =
+            new ChildShardContext(DOM_DATA_TREE_IDENTIFIER, READABLE_WRITEABLE_DOM_DATA_TREE_SHARD);
+    private static final Map<DOMDataTreeIdentifier, ChildShardContext> CHILD_SHARDS =
+            ImmutableMap.of(DOM_DATA_TREE_IDENTIFIER, CHILD_SHARD_CONTEXT);
+
+    @Before
+    public void setUp() throws Exception {
+        DataTreeModification dataTreeModification = mock(DataTreeModification.class);
+        doReturn("testDataTreeModification").when(dataTreeModification).toString();
+        doReturn(dataTreeModification).when(SHARD_ROOT_MODIFICATION_CONTEXT).ready();
+        doReturn(DOM_DATA_TREE_IDENTIFIER).when(SHARD_ROOT_MODIFICATION_CONTEXT).getIdentifier();
+        shardDataModification = ShardDataModification.from(SHARD_ROOT_MODIFICATION_CONTEXT,
+                ImmutableMap.of(YANG_INSTANCE_IDENTIFIER, FOREIGN_SHARD_MODIFICATION_CONTEXT));
+        DataTreeModificationCursor dataTreeModificationCursor = mock(DataTreeModificationCursor.class);
+        doReturn(DataTreeModificationCursorAdaptor.of( dataTreeModificationCursor))
+                .when(SHARD_ROOT_MODIFICATION_CONTEXT).cursor();
+        DataTreeCandidate dataTreeCandidate = mock(DataTreeCandidate.class);
+        DataTreeCandidateNode dataTreeCandidateNode = mock(DataTreeCandidateNode.class);
+        doReturn(dataTreeCandidateNode).when(dataTreeCandidate).getRootNode();
+        doReturn(ModificationType.WRITE).when(dataTreeCandidateNode).getModificationType();
+        doReturn(YANG_INSTANCE_IDENTIFIER).when(dataTreeCandidate).getRootPath();
+        doReturn("testDataTreeCandidate").when(dataTreeCandidate).toString();
+        doReturn(dataTreeCandidate).when(DATA_TREE).prepare(any());
+        InMemoryDOMDataTreeShardChangePublisher inMemoryDOMDataTreeShardChangePublisher =
+                new InMemoryDOMDataTreeShardChangePublisher(MoreExecutors.newDirectExecutorService(), 1, DATA_TREE,
+                        YANG_INSTANCE_IDENTIFIER, CHILD_SHARDS);
+
+        inmemoryDOMDataTreeShardWriteTransaction =
+                new InmemoryDOMDataTreeShardWriteTransaction(shardDataModification, DATA_TREE,
+                        inMemoryDOMDataTreeShardChangePublisher);
+    }
+
+    @Test
+    public void close() throws Exception {
+        inmemoryDOMDataTreeShardWriteTransaction.createCursor(DOM_DATA_TREE_IDENTIFIER);
+        inmemoryDOMDataTreeShardWriteTransaction.close();
+        assertTrue(inmemoryDOMDataTreeShardWriteTransaction.isFinished());
+    }
+
+    @Test
+    public void cursorClosed() throws Exception {
+        final Field cursorField = InmemoryDOMDataTreeShardWriteTransaction.class.getDeclaredField("cursor");
+        cursorField.setAccessible(true);
+        DOMDataTreeWriteCursor cursor;
+
+        inmemoryDOMDataTreeShardWriteTransaction.createCursor(DOM_DATA_TREE_IDENTIFIER);
+        cursor = (DOMDataTreeWriteCursor) cursorField.get(inmemoryDOMDataTreeShardWriteTransaction);
+        assertNotNull(cursor);
+
+        inmemoryDOMDataTreeShardWriteTransaction.cursorClosed();
+        cursor = (DOMDataTreeWriteCursor) cursorField.get(inmemoryDOMDataTreeShardWriteTransaction);
+        assertNull(cursor);
+    }
+
+    @Test
+    public void isFinished() throws Exception {
+        assertFalse(inmemoryDOMDataTreeShardWriteTransaction.isFinished());
+        inmemoryDOMDataTreeShardWriteTransaction.ready();
+        assertTrue(inmemoryDOMDataTreeShardWriteTransaction.isFinished());
+    }
+
+    @Test
+    public void ready() throws Exception {
+        final Field childShardsField = ShardDataModification.class.getDeclaredField("childShards");
+        childShardsField.setAccessible(true);
+        childShardsField.set(shardDataModification,
+                ImmutableMap.of(DOM_DATA_TREE_IDENTIFIER, FOREIGN_SHARD_MODIFICATION_CONTEXT));
+
+        inmemoryDOMDataTreeShardWriteTransaction.ready();
+        verify(SHARD_ROOT_MODIFICATION_CONTEXT).ready();
+    }
+
+    @Test
+    public void submit() throws Exception {
+        doNothing().when(DATA_TREE).validate(any());
+        doNothing().when(DATA_TREE).commit(any());
+        inmemoryDOMDataTreeShardWriteTransaction.ready();
+        assertNull(inmemoryDOMDataTreeShardWriteTransaction.submit().get());
+        verify(DATA_TREE).commit(any());
+        verify(DATA_TREE).validate(any());
+    }
+
+    @Test
+    public void validate() throws Exception {
+        inmemoryDOMDataTreeShardWriteTransaction.ready();
+        doNothing().when(DATA_TREE).validate(any());
+        assertTrue(inmemoryDOMDataTreeShardWriteTransaction.validate().get());
+        verify(DATA_TREE).validate(any());
+    }
+
+    @Test
+    public void prepare() throws Exception {
+        inmemoryDOMDataTreeShardWriteTransaction.ready();
+        assertNull(inmemoryDOMDataTreeShardWriteTransaction.prepare().get());
+        verify(DATA_TREE).prepare(any());
+    }
+
+    @Test
+    public void commit() throws Exception {
+        assertNull(inmemoryDOMDataTreeShardWriteTransaction.commit().get());
+    }
+
+    @Test
+    public void createCursor() throws Exception {
+        assertNotNull(inmemoryDOMDataTreeShardWriteTransaction.createCursor(DOM_DATA_TREE_IDENTIFIER));
+    }
+
+    @After
+    public void mocksReset() {
+        resetMocks();
+        reset(SHARD_ROOT_MODIFICATION_CONTEXT);
+    }
+}
\ No newline at end of file