Unit test for ReadDataTransactionUtil class
[netconf.git] / restconf / sal-rest-connector / src / test / java / org / opendaylight / restconf / restful / utils / ReadDataTransactionUtilTest.java
diff --git a/restconf/sal-rest-connector/src/test/java/org/opendaylight/restconf/restful/utils/ReadDataTransactionUtilTest.java b/restconf/sal-rest-connector/src/test/java/org/opendaylight/restconf/restful/utils/ReadDataTransactionUtilTest.java
new file mode 100644 (file)
index 0000000..c06cc45
--- /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.restconf.restful.utils;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Mockito.doReturn;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
+import org.opendaylight.netconf.sal.restconf.impl.InstanceIdentifierContext;
+import org.opendaylight.netconf.sal.restconf.impl.RestconfDocumentedException;
+import org.opendaylight.restconf.restful.transaction.TransactionVarsWrapper;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+
+public class ReadDataTransactionUtilTest {
+
+    private static final TestData data = new TestData();
+    private static final YangInstanceIdentifier.NodeIdentifier nodeIdentifier = new YangInstanceIdentifier
+            .NodeIdentifier(QName.create("ns", "2016-02-28", "container"));
+
+    private TransactionVarsWrapper wrapper;
+    @Mock
+    private DOMTransactionChain transactionChain;
+    @Mock
+    private InstanceIdentifierContext<?> context;
+    @Mock
+    private DOMDataReadOnlyTransaction read;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        doReturn(read).when(transactionChain).newReadOnlyTransaction();
+        wrapper = new TransactionVarsWrapper(this.context, null, this.transactionChain);
+    }
+
+    @Test
+    public void readDataConfigTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path);
+        doReturn(data.path).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        assertEquals(data.data3, normalizedNode);
+    }
+
+    @Test
+    public void readAllHavingOnlyConfigTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path);
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path);
+        doReturn(data.path).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        assertEquals(data.data3, normalizedNode);
+    }
+
+    @Test
+    public void readAllHavingOnlyNonConfigTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data2))).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path2);
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path2);
+        doReturn(data.path2).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        assertEquals(data.data2, normalizedNode);
+    }
+
+    @Test
+    public void readDataNonConfigTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data2))).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path2);
+        doReturn(data.path2).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.NONCONFIG;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        assertEquals(data.data2, normalizedNode);
+    }
+
+    @Test
+    public void readContainerDataAllTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path);
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data4))).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path);
+        doReturn(data.path).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        final ContainerNode checkingData = Builders
+                .containerBuilder()
+                .withNodeIdentifier(nodeIdentifier)
+                .withChild(data.contentLeaf)
+                .withChild(data.contentLeaf2)
+                .build();
+        assertEquals(checkingData, normalizedNode);
+    }
+
+    @Test
+    public void readContainerDataConfigNoValueOfContentTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data3))).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path);
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.data4))).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path);
+        doReturn(data.path).when(context).getInstanceIdentifier();
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(null, wrapper);
+        final ContainerNode checkingData = Builders
+                .containerBuilder()
+                .withNodeIdentifier(nodeIdentifier)
+                .withChild(data.contentLeaf)
+                .withChild(data.contentLeaf2)
+                .build();
+        assertEquals(checkingData, normalizedNode);
+    }
+
+    @Test
+    public void readListDataAllTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.listData))).when(read)
+                .read(LogicalDatastoreType.OPERATIONAL, data.path3);
+        doReturn(Futures.immediateCheckedFuture(Optional.of(data.listData2))).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path3);
+        doReturn(data.path3).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.ALL;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        final MapNode checkingData = Builders
+                .mapBuilder()
+                .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(QName.create("ns", "2016-02-28", "list")))
+                .withChild(data.checkData)
+                .build();
+        assertEquals(checkingData, normalizedNode);
+    }
+
+    @Test
+    public void readDataWrongPathOrNoContentTest() {
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(read)
+                .read(LogicalDatastoreType.CONFIGURATION, data.path2);
+        doReturn(data.path2).when(context).getInstanceIdentifier();
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.CONFIG;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, wrapper);
+        assertNull(normalizedNode);
+    }
+
+    @Test(expected = RestconfDocumentedException.class)
+    public void readDataFailTest() {
+        final String valueOfContent = RestconfDataServiceConstant.ReadData.READ_TYPE_TX;
+        final NormalizedNode<?, ?> normalizedNode = ReadDataTransactionUtil.readData(valueOfContent, null);
+        assertNull(normalizedNode);
+    }
+}