Bug 5109: Handle stand alone leaf nodes in CDS streaming
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / test / java / org / opendaylight / controller / cluster / datastore / node / utils / transformer / NormalizedNodePrunerTest.java
index cb82adc58aa4a9a721e74c56c6b4183c6ac3a454..2ee859466adffdc4a76de1e9f848d29a9a152b8c 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.controller.cluster.datastore.node.utils.transformer;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
@@ -24,7 +25,6 @@ import javax.xml.transform.dom.DOMSource;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.opendaylight.controller.cluster.datastore.node.utils.NormalizedNodeNavigator;
@@ -32,6 +32,8 @@ import org.opendaylight.controller.cluster.datastore.node.utils.NormalizedNodeVi
 import org.opendaylight.controller.cluster.datastore.util.TestModel;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
+import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
@@ -148,7 +150,7 @@ public class NormalizedNodePrunerTest {
     }
 
 
-    private int countNodes(NormalizedNode<?,?> normalizedNode, final String namespaceFilter){
+    private static int countNodes(NormalizedNode<?,?> normalizedNode, final String namespaceFilter){
         if(normalizedNode == null){
             return 0;
         }
@@ -168,26 +170,26 @@ public class NormalizedNodePrunerTest {
         return count.get();
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testLeafNodeHasNoParent() throws IOException {
-        prunerFullSchema.leafNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), mock(Object.class));
+        NormalizedNode<?, ?> input = Builders.leafBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.DESC_QNAME)).withValue("test").build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
     public void testLeafNodeHasParent() throws IOException {
-        prunerFullSchema.stack().push(normalizedNodeBuilderWrapper);
-        Object o = mock(Object.class);
-        prunerFullSchema.leafNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), o);
-
-        ArgumentCaptor<NormalizedNode> captor = ArgumentCaptor.forClass(NormalizedNode.class);
-
-        verify(normalizedNodeContainerBuilder).addChild(captor.capture());
-
-        NormalizedNode<?, ?> value = captor.getValue();
-        assertEquals(normalizedNodeBuilderWrapper.identifier().getNodeType(), value.getNodeType());
-        assertEquals(normalizedNodeBuilderWrapper.identifier(), value.getIdentifier());
-        assertEquals(o, value.getValue());
-
+        LeafNode<Object> child = Builders.leafBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.DESC_QNAME)).withValue("test").build();
+        NormalizedNode<?, ?> input = Builders.containerBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)).withChild(child).build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
@@ -197,28 +199,26 @@ public class NormalizedNodePrunerTest {
         verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class));
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testLeafSetEntryNodeHasNoParent() throws IOException {
-        prunerFullSchema.leafSetEntryNode(mock(Object.class));
+        NormalizedNode<?, ?> input = Builders.leafSetEntryBuilder().withValue("test").withNodeIdentifier(
+                new YangInstanceIdentifier.NodeWithValue<>(TestModel.FAMILY_QNAME, "test")).build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
     public void testLeafSetEntryNodeHasParent() throws IOException {
-        prunerFullSchema.stack().push(normalizedNodeBuilderWrapper);
-        Object o = mock(Object.class);
-        YangInstanceIdentifier.PathArgument nodeIdentifier
-                = new YangInstanceIdentifier.NodeWithValue(normalizedNodeBuilderWrapper.identifier().getNodeType(), o);
-        prunerFullSchema.leafSetEntryNode(o);
-
-        ArgumentCaptor<NormalizedNode> captor = ArgumentCaptor.forClass(NormalizedNode.class);
-
-        verify(normalizedNodeContainerBuilder).addChild(captor.capture());
-
-        NormalizedNode<?, ?> value = captor.getValue();
-        assertEquals(nodeIdentifier.getNodeType(), value.getNodeType());
-        assertEquals(nodeIdentifier, value.getIdentifier());
-        assertEquals(o, value.getValue());
-
+        LeafSetEntryNode<Object> child = Builders.leafSetEntryBuilder().withValue("test").withNodeIdentifier(
+                new YangInstanceIdentifier.NodeWithValue<>(TestModel.FAMILY_QNAME, "test")).build();
+        NormalizedNode<?, ?> input = Builders.leafSetBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.FAMILY_QNAME)).withChild(child).build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
@@ -226,31 +226,33 @@ public class NormalizedNodePrunerTest {
         doReturn(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)).when(normalizedNodeBuilderWrapper).identifier();
 
         prunerNoAugSchema.stack().push(normalizedNodeBuilderWrapper);
-        prunerNoAugSchema.leafSetEntryNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME));
+        prunerNoAugSchema.leafSetEntryNode(TestModel.AUG_CONT_QNAME, "");
 
         verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class));
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testAnyXMLNodeHasNoParent() throws IOException {
-        prunerFullSchema.anyxmlNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), mock(Object.class));
+        NormalizedNode<?, ?> input = Builders.anyXmlBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.CHILD_NAME_QNAME)).
+                    withValue(mock(DOMSource.class)).build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
     public void testAnyXMLNodeHasParent() throws IOException {
-        prunerFullSchema.stack().push(normalizedNodeBuilderWrapper);
-        YangInstanceIdentifier.NodeIdentifier nodeIdentifier = new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME);
-        DOMSource o = mock(DOMSource.class);
-        prunerFullSchema.anyxmlNode(nodeIdentifier, o);
-
-        ArgumentCaptor<NormalizedNode> captor = ArgumentCaptor.forClass(NormalizedNode.class);
-
-        verify(normalizedNodeContainerBuilder).addChild(captor.capture());
-
-        NormalizedNode<?, ?> value = captor.getValue();
-        assertEquals(nodeIdentifier.getNodeType(), value.getNodeType());
-        assertEquals(nodeIdentifier, value.getIdentifier());
-        assertEquals(o, value.getValue());
+        AnyXmlNode child = Builders.anyXmlBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.CHILD_NAME_QNAME)).
+                    withValue(mock(DOMSource.class)).build();
+        NormalizedNode<?, ?> input = Builders.containerBuilder().withNodeIdentifier(
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)).withChild(child).build();
+        NormalizedNodeWriter.forStreamWriter(prunerFullSchema).write(input);
+
+        NormalizedNode<?, ?> actual = prunerFullSchema.normalizedNode();
+        assertEquals("normalizedNode", input, actual);
     }
 
     @Test
@@ -259,8 +261,6 @@ public class NormalizedNodePrunerTest {
         prunerNoAugSchema.anyxmlNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME), mock(DOMSource.class));
 
         verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class));
-
-
     }
 
 
@@ -269,7 +269,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startLeafSet(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof ListNodeBuilder);
     }
 
@@ -278,7 +278,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startContainerNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder);
     }
 
@@ -287,7 +287,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startUnkeyedList(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder);
     }
 
@@ -296,7 +296,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startUnkeyedListItem(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder);
     }
 
@@ -305,7 +305,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startMapNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder);
     }
 
@@ -316,7 +316,7 @@ public class NormalizedNodePrunerTest {
                         ImmutableMap.<QName, Object>of(TestModel.BOOLEAN_LEAF_QNAME, "value")), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder);
     }
 
@@ -325,7 +325,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startOrderedMapNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder);
     }
 
@@ -334,7 +334,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startChoiceNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10);
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeBuilder);
     }
 
@@ -343,7 +343,7 @@ public class NormalizedNodePrunerTest {
         prunerFullSchema.startAugmentationNode(new YangInstanceIdentifier.AugmentationIdentifier(ImmutableSet.of(TestModel.AUG_CONT_QNAME)));
 
         assertEquals(1, prunerFullSchema.stack().size());
-        assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper);
+        assertNotNull(prunerFullSchema.stack().peek());
         assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeBuilder);
     }
 
@@ -380,7 +380,7 @@ public class NormalizedNodePrunerTest {
         verify(normalizedNodeContainerBuilder).addChild(any(NormalizedNode.class));
     }
 
-    private NormalizedNode<?, ?> createTestContainer() {
+    private static NormalizedNode<?, ?> createTestContainer() {
         byte[] bytes1 = {1,2,3};
         LeafSetEntryNode<Object> entry1 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier(
                 new YangInstanceIdentifier.NodeWithValue(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)).