Rework NormalizedNode type hierarchy
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / Bug5968Test.java
index d16a3061130ae82818e6ac9267beee7c03a2cb1a..7772cf2ad2397116ec3a73f74e953f0a964a08b9 100644 (file)
@@ -8,11 +8,11 @@
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
 import com.google.common.collect.ImmutableMap;
-import org.junit.Before;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
@@ -20,41 +20,46 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
 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.DataContainerNodeAttrBuilder;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
 public class Bug5968Test {
-    private static final String NS = "foo";
+    private static final String NS = "bug5968";
     private static final String REV = "2016-07-28";
     private static final QName ROOT = QName.create(NS, REV, "root");
     private static final QName MY_LIST = QName.create(NS, REV, "my-list");
     private static final QName LIST_ID = QName.create(NS, REV, "list-id");
     private static final QName MANDATORY_LEAF = QName.create(NS, REV, "mandatory-leaf");
     private static final QName COMMON_LEAF = QName.create(NS, REV, "common-leaf");
-    private SchemaContext schemaContext;
 
-    @Before
-    public void init() throws ReactorException {
-        this.schemaContext = TestModel.createTestContext("/bug5968/foo.yang");
-        assertNotNull("Schema context must not be null.", this.schemaContext);
+    private static EffectiveModelContext SCHEMA_CONTEXT;
+
+    @BeforeClass
+    public static void beforeClass() {
+        SCHEMA_CONTEXT = TestModel.createTestContext("/bug5968.yang");
+    }
+
+    @AfterClass
+    public static void afterClass() {
+        SCHEMA_CONTEXT = null;
     }
 
-    private static InMemoryDataTree initDataTree(final SchemaContext schemaContext, final boolean withMapNode)
+    private static DataTree initDataTree(final EffectiveModelContext schemaContext, final boolean withMapNode)
             throws DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create(
-                DataTreeConfiguration.DEFAULT_CONFIGURATION);
-        inMemoryDataTree.setSchemaContext(schemaContext);
+        final DataTree inMemoryDataTree = new InMemoryDataTreeFactory().create(
+                DataTreeConfiguration.DEFAULT_CONFIGURATION, schemaContext);
 
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
                 .withNodeIdentifier(new NodeIdentifier(ROOT));
-        final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
         modificationTree.write(
                 YangInstanceIdentifier.of(ROOT),
                 withMapNode ? root.withChild(
@@ -69,24 +74,20 @@ public class Bug5968Test {
         return inMemoryDataTree;
     }
 
-    private static InMemoryDataTree emptyDataTree(final SchemaContext schemaContext)
+    private static DataTree emptyDataTree(final EffectiveModelContext schemaContext)
             throws DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create(
-                DataTreeConfiguration.DEFAULT_CONFIGURATION);
-        inMemoryDataTree.setSchemaContext(schemaContext);
-
-        return inMemoryDataTree;
+        return new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_CONFIGURATION, schemaContext);
     }
 
     @Test
-    public void writeInvalidContainerTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
+    public void writeInvalidContainerTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = emptyDataTree(SCHEMA_CONTEXT);
 
-        final MapNode myList = createMap(true);
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
+        final SystemMapNode myList = createMap(true);
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
                 .withNodeIdentifier(new NodeIdentifier(ROOT)).withChild(myList);
 
-        final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
         modificationTree.write(YangInstanceIdentifier.of(ROOT), root.build());
 
         try {
@@ -96,102 +97,96 @@ public class Bug5968Test {
             inMemoryDataTree.commit(prepare);
             fail("Should fail due to missing mandatory leaf.");
         } catch (final IllegalArgumentException e) {
-            assertEquals(
-                    "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
-                            + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
+            assertEquals("Node (bug5968?revision=2016-07-28)my-list[{(bug5968?revision=2016-07-28)list-id=1}] is "
+                + "missing mandatory descendant /(bug5968?revision=2016-07-28)mandatory-leaf", e.getMessage());
         }
     }
 
     @Test
-    public void writeInvalidMapTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
+    public void writeInvalidMapTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = emptyDataTree(SCHEMA_CONTEXT);
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+        writeMap(modificationTree, true);
+
         try {
-            writeMap(inMemoryDataTree, true);
+            modificationTree.ready();
+            inMemoryDataTree.validate(modificationTree);
+            final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
+            inMemoryDataTree.commit(prepare);
             fail("Should fail due to missing mandatory leaf.");
         } catch (final IllegalArgumentException e) {
-            assertEquals(
-                    "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
-                            + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
+            assertEquals("Node (bug5968?revision=2016-07-28)my-list[{(bug5968?revision=2016-07-28)list-id=1}] is "
+                + "missing mandatory descendant /(bug5968?revision=2016-07-28)mandatory-leaf", e.getMessage());
         }
     }
 
     @Test
-    public void writeInvalidMapEntryTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = initDataTree(schemaContext, true);
+    public void writeInvalidMapEntryTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = initDataTree(SCHEMA_CONTEXT, true);
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+
+        writeMapEntry(modificationTree, "1", null, "common-value");
+
         try {
-            writeMapEntry(inMemoryDataTree, "1", null, "common-value");
+            modificationTree.ready();
+            inMemoryDataTree.validate(modificationTree);
+            final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
+            inMemoryDataTree.commit(prepare);
             fail("Should fail due to missing mandatory leaf.");
         } catch (final IllegalArgumentException e) {
-            assertEquals(
-                    "Node (foo?revision=2016-07-28)my-list[{(foo?revision=2016-07-28)list-id=1}] is missing mandatory "
-                            + "descendant /(foo?revision=2016-07-28)mandatory-leaf", e.getMessage());
+            assertEquals("Node (bug5968?revision=2016-07-28)my-list[{(bug5968?revision=2016-07-28)list-id=1}] is "
+                + "missing mandatory descendant /(bug5968?revision=2016-07-28)mandatory-leaf", e.getMessage());
         }
     }
 
-    private static void writeMap(final InMemoryDataTree inMemoryDataTree, final boolean mandatoryDataMissing)
-            throws DataValidationFailedException {
-
-        final MapNode myList = createMap(mandatoryDataMissing);
-
-        final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
-        modificationTree.write(YangInstanceIdentifier.of(ROOT).node(MY_LIST), myList);
-        modificationTree.ready();
-        inMemoryDataTree.validate(modificationTree);
-        final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
-        inMemoryDataTree.commit(prepare);
+    private static void writeMap(final DataTreeModification modificationTree, final boolean mandatoryDataMissing) {
+        modificationTree.write(YangInstanceIdentifier.of(ROOT).node(MY_LIST), createMap(mandatoryDataMissing));
     }
 
-    private static MapNode createMap(final boolean mandatoryDataMissing) throws DataValidationFailedException {
-        return Builders
-                .mapBuilder()
-                .withNodeIdentifier(new NodeIdentifier(MY_LIST))
-                .withChild(
-                        mandatoryDataMissing ? createMapEntry("1", "common-value") : createMapEntry("1",
-                                "mandatory-value", "common-value")).build();
+    private static SystemMapNode createMap(final boolean mandatoryDataMissing) {
+        return Builders.mapBuilder()
+            .withNodeIdentifier(new NodeIdentifier(MY_LIST))
+            .withChild(mandatoryDataMissing ? createMapEntry("1", "common-value")
+                : createMapEntry("1", "mandatory-value", "common-value"))
+            .build();
     }
 
-    private static void writeMapEntry(final InMemoryDataTree inMemoryDataTree, final Object listIdValue,
+    private static void writeMapEntry(final DataTreeModification modificationTree, final Object listIdValue,
             final Object mandatoryLeafValue, final Object commonLeafValue) throws DataValidationFailedException {
         final MapEntryNode taskEntryNode = mandatoryLeafValue == null ? createMapEntry(listIdValue, commonLeafValue)
                 : createMapEntry(listIdValue, mandatoryLeafValue, commonLeafValue);
 
-        final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
         modificationTree.write(
                 YangInstanceIdentifier.of(ROOT).node(MY_LIST)
-                        .node(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue))),
+                        .node(NodeIdentifierWithPredicates.of(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue))),
                 taskEntryNode);
-        modificationTree.ready();
-        inMemoryDataTree.validate(modificationTree);
-        final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
-        inMemoryDataTree.commit(prepare);
     }
 
     private static MapEntryNode createMapEntry(final Object listIdValue, final Object mandatoryLeafValue,
-            final Object commonLeafValue) throws DataValidationFailedException {
+            final Object commonLeafValue) {
         return Builders.mapEntryBuilder()
-                .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
+                .withNodeIdentifier(NodeIdentifierWithPredicates.of(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
                 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue))
                 .withChild(ImmutableNodes.leafNode(MANDATORY_LEAF, mandatoryLeafValue))
                 .withChild(ImmutableNodes.leafNode(COMMON_LEAF, commonLeafValue)).build();
     }
 
-    private static MapEntryNode createMapEntry(final Object listIdValue, final Object commonLeafValue)
-            throws DataValidationFailedException {
+    private static MapEntryNode createMapEntry(final Object listIdValue, final Object commonLeafValue) {
         return Builders.mapEntryBuilder()
-                .withNodeIdentifier(new NodeIdentifierWithPredicates(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
+                .withNodeIdentifier(NodeIdentifierWithPredicates.of(MY_LIST, ImmutableMap.of(LIST_ID, listIdValue)))
                 .withChild(ImmutableNodes.leafNode(LIST_ID, listIdValue))
                 .withChild(ImmutableNodes.leafNode(COMMON_LEAF, commonLeafValue)).build();
     }
 
     @Test
-    public void writeValidContainerTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
+    public void writeValidContainerTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = emptyDataTree(SCHEMA_CONTEXT);
 
-        final MapNode myList = createMap(false);
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
+        final SystemMapNode myList = createMap(false);
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> root = Builders.containerBuilder()
                 .withNodeIdentifier(new NodeIdentifier(ROOT)).withChild(myList);
 
-        final InMemoryDataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
         modificationTree.write(YangInstanceIdentifier.of(ROOT), root.build());
         modificationTree.ready();
         inMemoryDataTree.validate(modificationTree);
@@ -200,14 +195,27 @@ public class Bug5968Test {
     }
 
     @Test
-    public void writeValidMapTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = emptyDataTree(schemaContext);
-        writeMap(inMemoryDataTree, false);
+    public void writeValidMapTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = emptyDataTree(SCHEMA_CONTEXT);
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+        writeMap(modificationTree, false);
+
+        modificationTree.ready();
+        inMemoryDataTree.validate(modificationTree);
+        final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
+        inMemoryDataTree.commit(prepare);
     }
 
     @Test
-    public void writeValidMapEntryTest() throws ReactorException, DataValidationFailedException {
-        final InMemoryDataTree inMemoryDataTree = initDataTree(schemaContext, true);
-        writeMapEntry(inMemoryDataTree, "1", "mandatory-value", "common-value");
+    public void writeValidMapEntryTest() throws DataValidationFailedException {
+        final DataTree inMemoryDataTree = initDataTree(SCHEMA_CONTEXT, true);
+        final DataTreeModification modificationTree = inMemoryDataTree.takeSnapshot().newModification();
+
+        writeMapEntry(modificationTree, "1", "mandatory-value", "common-value");
+
+        modificationTree.ready();
+        inMemoryDataTree.validate(modificationTree);
+        final DataTreeCandidate prepare = inMemoryDataTree.prepare(modificationTree);
+        inMemoryDataTree.commit(prepare);
     }
 }