Revert "Bug 5968: Mandatory leaf enforcement does not work in some cases"
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / ConcurrentTreeModificationTest.java
index 003705b614d641339df9e957c80f8f471bd3d0a2..28ee0686ab19860d7bdb90e637aeb70699d65ee9 100644 (file)
@@ -1,3 +1,11 @@
+/*
+ * Copyright (c) 2015 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.yangtools.yang.data.impl.schema.tree;
 
 import static org.junit.Assert.assertFalse;
@@ -21,6 +29,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,15 +58,13 @@ public class ConcurrentTreeModificationTest {
             .build();
 
     private SchemaContext schemaContext;
-    private RootModificationApplyOperation rootOper;
     private InMemoryDataTree inMemoryDataTree;
 
     @Before
-    public void prepare() {
+    public void prepare() throws ReactorException {
         schemaContext = TestModel.createTestContext();
         assertNotNull("Schema context must not be null.", schemaContext);
-        rootOper = RootModificationApplyOperation.from(SchemaAwareApplyOperation.from(schemaContext,TreeType.OPERATIONAL));
-        inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create();
+        inMemoryDataTree = (InMemoryDataTree) InMemoryDataTreeFactory.getInstance().create(TreeType.OPERATIONAL);
         inMemoryDataTree.setSchemaContext(schemaContext);
     }
 
@@ -90,10 +97,8 @@ public class ConcurrentTreeModificationTest {
     public void writeWrite1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
         modificationTree2.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
@@ -121,10 +126,8 @@ public class ConcurrentTreeModificationTest {
     public void writeMerge1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
         modificationTree2.merge(TestModel.TEST_PATH, ImmutableNodes.containerNode(TestModel.TEST_QNAME));
@@ -148,10 +151,8 @@ public class ConcurrentTreeModificationTest {
     public void writeWriteFooBar1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -180,10 +181,8 @@ public class ConcurrentTreeModificationTest {
     public void writeMergeFooBar1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.merge(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -207,10 +206,8 @@ public class ConcurrentTreeModificationTest {
     public void mergeWriteFooBar1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -239,10 +236,8 @@ public class ConcurrentTreeModificationTest {
     public void mergeMergeFooBar1stLevelEmptyTreeTest() throws DataValidationFailedException {
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.merge(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -270,10 +265,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -306,10 +299,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.merge(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -337,10 +328,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -374,10 +363,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(TestModel.TEST_PATH, createFooTestContainerNode());
         modificationTree2.merge(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -405,10 +392,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.delete(TestModel.TEST_PATH);
         modificationTree2.write(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -441,10 +426,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.delete(TestModel.TEST_PATH);
         modificationTree2.merge(TestModel.TEST_PATH, createBarTestContainerNode());
@@ -472,10 +455,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(OUTER_LIST_1_PATH, FOO_NODE);
         modificationTree2.write(OUTER_LIST_2_PATH, BAR_NODE);
@@ -504,10 +485,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.write(OUTER_LIST_1_PATH, FOO_NODE);
         modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);
@@ -536,10 +515,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(OUTER_LIST_1_PATH, FOO_NODE);
         modificationTree2.write(OUTER_LIST_2_PATH, BAR_NODE);
@@ -568,10 +545,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.merge(OUTER_LIST_1_PATH, FOO_NODE);
         modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);
@@ -600,10 +575,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.delete(TestModel.TEST_PATH);
         modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);
@@ -636,10 +609,8 @@ public class ConcurrentTreeModificationTest {
         inMemoryDataTree.commit(inMemoryDataTree.prepare(initialDataTreeModification));
         final InMemoryDataTreeSnapshot initialDataTreeSnapshot = inMemoryDataTree.takeSnapshot();
 
-        final DataTreeModification modificationTree1 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
-        final DataTreeModification modificationTree2 = new InMemoryDataTreeModification(initialDataTreeSnapshot,
-                rootOper);
+        final DataTreeModification modificationTree1 = initialDataTreeSnapshot.newModification();
+        final DataTreeModification modificationTree2 = initialDataTreeSnapshot.newModification();
 
         modificationTree1.delete(TestModel.TEST_PATH);
         modificationTree2.merge(OUTER_LIST_2_PATH, BAR_NODE);