X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2Futils%2Ftransformer%2FNormalizedNodePrunerTest.java;h=f15b184513dd7ba31c10418e27ee9ff7e739c98f;hb=14c92df74247c884a43c5aaea2f154992b0ec798;hp=26c73480ce4ba0e937c5826a808fadb40d21bdcb;hpb=ecccb6d5b43dd73aef0d2d19349d19ee9b4728f7;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java index 26c73480ce..f15b184513 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java @@ -11,69 +11,62 @@ package org.opendaylight.controller.cluster.datastore.node.utils.transformer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapEntry; +import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapEntryBuilder; +import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.mapNodeBuilder; + +import com.google.common.collect.Sets; import java.io.IOException; import java.util.concurrent.atomic.AtomicInteger; 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; -import org.opendaylight.controller.cluster.datastore.node.utils.NormalizedNodeVisitor; 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.YangInstanceIdentifier.AugmentationIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; +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.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.ListNodeBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class NormalizedNodePrunerTest { + private static final SchemaContext NO_TEST_SCHEMA = TestModel.createTestContextWithoutTestSchema(); + private static final SchemaContext NO_AUG_SCHEMA = TestModel.createTestContextWithoutAugmentationSchema(); + private static final SchemaContext FULL_SCHEMA = TestModel.createTestContext(); - private NormalizedNodePruner prunerFullSchema; - - private NormalizedNodePruner prunerNoAugSchema; - - @Mock - private NormalizedNodeBuilderWrapper normalizedNodeBuilderWrapper; + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } - @Mock - private NormalizedNodeContainerBuilder normalizedNodeContainerBuilder; + private static NormalizedNodePruner prunerFullSchema(final YangInstanceIdentifier path) { + return new NormalizedNodePruner(path, FULL_SCHEMA); + } - @Mock - private NormalizedNode normalizedNode; + private static NormalizedNodePruner prunerNoAugSchema(final YangInstanceIdentifier path) { + return new NormalizedNodePruner(path, NO_AUG_SCHEMA); + } - @Before - public void setUp(){ - MockitoAnnotations.initMocks(this); - prunerFullSchema = new NormalizedNodePruner(TestModel.createTestContext()); - prunerNoAugSchema = new NormalizedNodePruner(TestModel.createTestContextWithoutAugmentationSchema()); - doReturn(normalizedNodeContainerBuilder).when(normalizedNodeBuilderWrapper).builder(); - doReturn(TestModel.BOOLEAN_LEAF_QNAME).when(normalizedNodeBuilderWrapper).nodeType(); - doReturn(normalizedNode).when(normalizedNodeContainerBuilder).build(); - doReturn(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME)).when(normalizedNodeBuilderWrapper).identifier(); + private static NormalizedNodePruner prunerNoTestSchema(final YangInstanceIdentifier path) { + return new NormalizedNodePruner(path, NO_TEST_SCHEMA); } @Test public void testNodesNotPrunedWhenSchemaPresent() throws IOException { - NormalizedNodePruner pruner = prunerFullSchema; + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH); NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(pruner); @@ -89,7 +82,7 @@ public class NormalizedNodePrunerTest { @Test(expected = IllegalStateException.class) public void testReusePruner() throws IOException { - NormalizedNodePruner pruner = prunerFullSchema; + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH); NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(pruner); @@ -107,8 +100,8 @@ public class NormalizedNodePrunerTest { @Test - public void testNodesPrunedWhenAugmentationSchemaNotPresent() throws IOException { - NormalizedNodePruner pruner = prunerNoAugSchema; + public void testNodesPrunedWhenAugmentationSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerNoAugSchema(TestModel.TEST_PATH); NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(pruner); @@ -128,8 +121,8 @@ public class NormalizedNodePrunerTest { } @Test - public void testNodesPrunedWhenTestSchemaNotPresent() throws IOException { - NormalizedNodePruner pruner = new NormalizedNodePruner(TestModel.createTestContextWithoutTestSchema()); + public void testNodesPrunedWhenTestSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerNoTestSchema(TestModel.TEST_PATH); NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(pruner); @@ -147,264 +140,260 @@ public class NormalizedNodePrunerTest { } - - private static int countNodes(NormalizedNode normalizedNode, final String namespaceFilter){ - if(normalizedNode == null){ + private static int countNodes(final NormalizedNode normalizedNode, final String namespaceFilter) { + if (normalizedNode == null) { return 0; } final AtomicInteger count = new AtomicInteger(); - new NormalizedNodeNavigator(new NormalizedNodeVisitor() { - - @Override - public void visitNode(int level, String parentPath, NormalizedNode normalizedNode) { - if(!(normalizedNode.getIdentifier() instanceof YangInstanceIdentifier.AugmentationIdentifier)) { - if (normalizedNode.getIdentifier().getNodeType().getNamespace().toString().contains(namespaceFilter)) { - count.incrementAndGet(); - } + new NormalizedNodeNavigator((level, parentPath, normalizedNode1) -> { + if (!(normalizedNode1.getIdentifier() instanceof AugmentationIdentifier)) { + if (normalizedNode1.getIdentifier().getNodeType().getNamespace().toString().contains(namespaceFilter)) { + count.incrementAndGet(); } } - }).navigate(YangInstanceIdentifier.builder().build().toString(), normalizedNode); + }).navigate(YangInstanceIdentifier.empty().toString(), normalizedNode); return count.get(); } - @Test(expected = IllegalStateException.class) - public void testLeafNodeHasNoParent() throws IOException { - prunerFullSchema.leafNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), mock(Object.class)); - } - @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 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()); + public void testLeafNodeNotPrunedWhenHasNoParent() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.DESC_QNAME)); + NormalizedNode input = Builders.leafBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.DESC_QNAME)).withValue("test").build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } @Test - public void testLeafNodeSchemaMissing() throws IOException { - prunerNoAugSchema.stack().push(normalizedNodeBuilderWrapper); - prunerNoAugSchema.leafNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME), mock(Object.class)); - verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class)); - } + public void testLeafNodePrunedWhenHasAugmentationParentAndSchemaMissing() throws IOException { + AugmentationIdentifier augId = new AugmentationIdentifier(Sets.newHashSet(TestModel.AUG_CONT_QNAME)); + NormalizedNodePruner pruner = prunerFullSchema(YangInstanceIdentifier.builder() + .node(TestModel.TEST_QNAME).node(TestModel.AUGMENTED_LIST_QNAME) + .node(TestModel.AUGMENTED_LIST_QNAME).node(augId).build()); + LeafNode child = Builders.leafBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.INVALID_QNAME)).withValue("test").build(); + NormalizedNode input = Builders.augmentationBuilder().withNodeIdentifier(augId).withChild(child).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - @Test(expected = IllegalStateException.class) - public void testLeafSetEntryNodeHasNoParent() throws IOException { - prunerFullSchema.leafSetEntryNode(mock(Object.class)); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", Builders.augmentationBuilder().withNodeIdentifier(augId).build(), 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 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()); + public void testLeafNodePrunedWhenHasNoParentAndSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.INVALID_QNAME)); + NormalizedNode input = Builders.leafBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.INVALID_QNAME)).withValue("test").build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } - @Test - public void testLeafSetEntryNodeSchemaMissing() throws IOException { - doReturn(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)).when(normalizedNodeBuilderWrapper).identifier(); - - prunerNoAugSchema.stack().push(normalizedNodeBuilderWrapper); - prunerNoAugSchema.leafSetEntryNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)); - verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class)); - } + @Test + public void testLeafSetEntryNodeNotPrunedWhenHasNoParent() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.SHOE_QNAME)); + NormalizedNode input = Builders.leafSetEntryBuilder().withValue("puma").withNodeIdentifier( + new NodeWithValue<>(TestModel.SHOE_QNAME, "puma")).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - @Test(expected = IllegalStateException.class) - public void testAnyXMLNodeHasNoParent() throws IOException { - prunerFullSchema.anyxmlNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), mock(Object.class)); + NormalizedNode actual = pruner.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); + public void testLeafSetEntryNodeNotPrunedWhenHasParent() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.SHOE_QNAME)); + LeafSetEntryNode child = Builders.leafSetEntryBuilder().withValue("puma").withNodeIdentifier( + new NodeWithValue<>(TestModel.SHOE_QNAME, "puma")).build(); + NormalizedNode input = Builders.leafSetBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.SHOE_QNAME)).withChild(child).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - ArgumentCaptor 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()); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } @Test - public void testAnyXmlNodeSchemaMissing() throws IOException { - prunerNoAugSchema.stack().push(normalizedNodeBuilderWrapper); - prunerNoAugSchema.anyxmlNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME), mock(DOMSource.class)); - - verify(normalizedNodeContainerBuilder, never()).addChild(any(NormalizedNode.class)); - + public void testLeafSetEntryNodePrunedWhenHasNoParentAndSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.INVALID_QNAME)); + NormalizedNode input = Builders.leafSetEntryBuilder().withValue("test").withNodeIdentifier( + new NodeWithValue<>(TestModel.INVALID_QNAME, "test")).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } - @Test - public void testLeafSetPushesBuilderToStack() throws IOException { - prunerFullSchema.startLeafSet(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testLeafSetEntryNodePrunedWhenHasParentAndSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.INVALID_QNAME)); + LeafSetEntryNode child = Builders.leafSetEntryBuilder().withValue("test").withNodeIdentifier( + new NodeWithValue<>(TestModel.INVALID_QNAME, "test")).build(); + NormalizedNode input = Builders.leafSetBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.INVALID_QNAME)).withChild(child).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof ListNodeBuilder); + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } @Test - public void testStartContainerNodePushesBuilderToStack() throws IOException { - prunerFullSchema.startContainerNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testAnyXMLNodeNotPrunedWhenHasNoParent() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH.node(TestModel.ANY_XML_QNAME)); + NormalizedNode input = Builders.anyXmlBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.ANY_XML_QNAME)).withValue(mock(DOMSource.class)).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } + @Test - public void testStartUnkeyedListPushesBuilderToStack() throws IOException { - prunerFullSchema.startUnkeyedList(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testAnyXMLNodeNotPrunedWhenHasParent() throws IOException { + NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH); + AnyXmlNode child = Builders.anyXmlBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.ANY_XML_QNAME)).withValue(mock(DOMSource.class)).build(); + NormalizedNode input = Builders.containerBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.TEST_QNAME)).withChild(child).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } @Test - public void testStartUnkeyedListItemPushesBuilderToStack() throws IOException { - prunerFullSchema.startUnkeyedListItem(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testAnyXmlNodePrunedWhenHasNoParentAndSchemaMissing() throws IOException { + NormalizedNodePruner pruner = prunerNoTestSchema(TestModel.TEST_PATH.node(TestModel.ANY_XML_QNAME)); + NormalizedNode input = Builders.anyXmlBuilder().withNodeIdentifier( + new NodeIdentifier(TestModel.ANY_XML_QNAME)).withValue(mock(DOMSource.class)).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder); + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } @Test - public void testStartMapNodePushesBuilderToStack() throws IOException { - prunerFullSchema.startMapNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testInnerContainerNodeWithFullPathPathNotPruned() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .node(TestModel.INNER_LIST_QNAME).nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, "one") + .node(TestModel.INNER_CONTAINER_QNAME).build(); + NormalizedNodePruner pruner = prunerFullSchema(path); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder); - } + NormalizedNode input = ImmutableNodes.containerNode(TestModel.INNER_CONTAINER_QNAME); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - @Test - public void testStartMapEntryNodePushesBuilderToStack() throws IOException { - prunerFullSchema.startMapEntryNode( - new YangInstanceIdentifier.NodeIdentifierWithPredicates(TestModel.BOOLEAN_LEAF_QNAME, - ImmutableMap.of(TestModel.BOOLEAN_LEAF_QNAME, "value")), 10); - - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeAttrBuilder); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } @Test - public void testStartOrderedMapNodePushesBuilderToStack() throws IOException { - prunerFullSchema.startOrderedMapNode(new YangInstanceIdentifier.NodeIdentifier(TestModel.BOOLEAN_LEAF_QNAME), 10); + public void testInnerContainerNodeWithFullPathPrunedWhenSchemaMissing() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .node(TestModel.INNER_LIST_QNAME).nodeWithKey(TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, "one") + .node(TestModel.INVALID_QNAME).build(); + NormalizedNodePruner pruner = prunerFullSchema(path); - assertEquals(1, prunerFullSchema.stack().size()); - assertTrue(prunerFullSchema.stack().peek().toString(), prunerFullSchema.stack().peek() instanceof NormalizedNodeBuilderWrapper); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof CollectionNodeBuilder); + NormalizedNode input = ImmutableNodes.containerNode(TestModel.INVALID_QNAME); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } @Test - public void testStartChoiceNodePushesBuilderToStack() throws IOException { - 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); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeBuilder); + public void testInnerContainerNodeWithParentPathPrunedWhenSchemaMissing() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .build(); + NormalizedNodePruner pruner = prunerFullSchema(path); + + MapNode innerList = mapNodeBuilder(TestModel.INNER_LIST_QNAME).withChild(mapEntryBuilder( + TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, "one").withChild( + ImmutableNodes.containerNode(TestModel.INVALID_QNAME)).build()).build(); + NormalizedNode input = mapEntryBuilder(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .withChild(innerList).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + + NormalizedNode expected = mapEntryBuilder(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .withChild(mapNodeBuilder(TestModel.INNER_LIST_QNAME).withChild(mapEntryBuilder( + TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, "one").build()).build()).build(); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", expected, actual); } @Test - public void testStartAugmentationPushesBuilderToStack() throws IOException { - 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); - assertTrue(prunerFullSchema.stack().peek().builder().toString(), prunerFullSchema.stack().peek().builder() instanceof DataContainerNodeBuilder); - } + public void testInnerListNodeWithFullPathNotPruned() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .node(TestModel.INNER_LIST_QNAME).build(); + NormalizedNodePruner pruner = prunerFullSchema(path); - @Test(expected = IllegalStateException.class) - public void testEndNodeWhenNoBuildersOnStack() throws IOException { - prunerFullSchema.endNode(); - } + MapNode input = mapNodeBuilder(TestModel.INNER_LIST_QNAME).withChild(mapEntryBuilder( + TestModel.INNER_LIST_QNAME, TestModel.NAME_QNAME, "one").withChild( + ImmutableNodes.containerNode(TestModel.INNER_CONTAINER_QNAME)).build()).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - @Test - public void testEndNodeWhenOneBuildersOnStack() throws IOException { - prunerFullSchema.stack().push(normalizedNodeBuilderWrapper); - prunerFullSchema.endNode(); - assertEquals(normalizedNode, prunerFullSchema.normalizedNode()); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", input, actual); } @Test - public void testEndNodeSchemaMissing() throws IOException { - doReturn(new YangInstanceIdentifier.NodeIdentifier(TestModel.AUG_CONT_QNAME)).when(normalizedNodeBuilderWrapper).identifier(); + public void testInnerListNodeWithFullPathPrunedWhenSchemaMissing() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .node(TestModel.INVALID_QNAME).build(); + NormalizedNodePruner pruner = prunerFullSchema(path); - prunerNoAugSchema.stack().push(normalizedNodeBuilderWrapper); - prunerNoAugSchema.endNode(); + MapNode input = mapNodeBuilder(TestModel.INVALID_QNAME).withChild(mapEntryBuilder( + TestModel.INVALID_QNAME, TestModel.NAME_QNAME, "one").withChild( + ImmutableNodes.containerNode(TestModel.INNER_CONTAINER_QNAME)).build()).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); - assertEquals(null, prunerNoAugSchema.normalizedNode()); + NormalizedNode actual = pruner.normalizedNode(); + assertNull(actual); } @Test - public void testEndNodeWhenMoreThanOneBuilderOnStack() throws IOException { - // A little lazy in adding the "parent" builder - prunerFullSchema.stack().push(normalizedNodeBuilderWrapper); - prunerFullSchema.stack().push(normalizedNodeBuilderWrapper); - prunerFullSchema.endNode(); - assertEquals(null, prunerFullSchema.normalizedNode()); - - verify(normalizedNodeContainerBuilder).addChild(any(NormalizedNode.class)); + public void testInnerListNodeWithParentPathPrunedWhenSchemaMissing() throws IOException { + YangInstanceIdentifier path = YangInstanceIdentifier.builder().node(TestModel.TEST_QNAME) + .node(TestModel.OUTER_LIST_QNAME).nodeWithKey(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .build(); + NormalizedNodePruner pruner = prunerFullSchema(path); + + MapNode innerList = mapNodeBuilder(TestModel.INVALID_QNAME).withChild(mapEntryBuilder( + TestModel.INVALID_QNAME, TestModel.NAME_QNAME, "one").withChild( + ImmutableNodes.containerNode(TestModel.INNER_CONTAINER_QNAME)).build()).build(); + NormalizedNode input = mapEntryBuilder(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1) + .withChild(innerList).build(); + NormalizedNodeWriter.forStreamWriter(pruner).write(input); + + NormalizedNode expected = mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1); + NormalizedNode actual = pruner.normalizedNode(); + assertEquals("normalizedNode", expected, actual); } private static NormalizedNode createTestContainer() { - byte[] bytes1 = {1,2,3}; + byte[] bytes1 = {1, 2, 3}; LeafSetEntryNode entry1 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( - new YangInstanceIdentifier.NodeWithValue(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)). - withValue(bytes1).build(); + new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes1)).withValue(bytes1).build(); byte[] bytes2 = {}; LeafSetEntryNode entry2 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( - new YangInstanceIdentifier.NodeWithValue(TestModel.BINARY_LEAF_LIST_QNAME, bytes2)). - withValue(bytes2).build(); - - LeafSetEntryNode entry3 = ImmutableLeafSetEntryNodeBuilder.create().withNodeIdentifier( - new YangInstanceIdentifier.NodeWithValue(TestModel.BINARY_LEAF_LIST_QNAME, null)). - withValue(null).build(); - - - return TestModel.createBaseTestContainerBuilder(). - withChild(ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( - new YangInstanceIdentifier.NodeIdentifier(TestModel.BINARY_LEAF_LIST_QNAME)). - withChild(entry1).withChild(entry2).withChild(entry3).build()). - withChild(ImmutableNodes.leafNode(TestModel.SOME_BINARY_DATA_QNAME, new byte[]{1, 2, 3, 4})). - withChild(Builders.orderedMapBuilder(). - withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TestModel.ORDERED_LIST_QNAME)). - withChild(ImmutableNodes.mapEntry(TestModel.ORDERED_LIST_ENTRY_QNAME, - TestModel.ID_QNAME, 11)).build()). - build(); + new NodeWithValue<>(TestModel.BINARY_LEAF_LIST_QNAME, bytes2)).withValue(bytes2).build(); + + return TestModel.createBaseTestContainerBuilder() + .withChild(ImmutableLeafSetNodeBuilder.create().withNodeIdentifier( + new NodeIdentifier(TestModel.BINARY_LEAF_LIST_QNAME)) + .withChild(entry1).withChild(entry2).build()) + .withChild(ImmutableNodes.leafNode(TestModel.SOME_BINARY_DATA_QNAME, new byte[]{1, 2, 3, 4})) + .build(); } -} \ No newline at end of file +}