Bug 5968: Mandatory leaf enforcement does not work in some cases
[yangtools.git] / yang / yang-data-impl / src / main / java / org / opendaylight / yangtools / yang / data / impl / schema / tree / ModifiedNode.java
index 35da5d3650a4c87987b46679acb1625461e5c880..e1757a0a7441a450d7e35bb73147eff0f03effc9 100644 (file)
@@ -275,6 +275,7 @@ final class ModifiedNode extends NodeModification implements StoreTreeNode<Modif
                 if (children.isEmpty()) {
                     updateOperationType(LogicalOperation.NONE);
                 }
+
                 break;
             case WRITE:
                 // A WRITE can collapse all of its children
@@ -285,6 +286,18 @@ final class ModifiedNode extends NodeModification implements StoreTreeNode<Modif
 
                 schema.verifyStructure(value, true);
                 break;
+            /*
+             * Perform full validation in case of merge operation. This validation is performed during sealing of
+             * a ModifiedNode when we run InMemoryDataTreeModification.ready() just as it is in case of write operation
+             * above.
+             *
+             * Some parts of this validation may also be re-done during InMemoryDataTree.prepare() in case when we
+             * merge or write a MapEntry directly (e.g. Bug5968MergeTest.mergeValidMapEntryTest()), however in other
+             * cases full validation is performed only once just here.
+             */
+            case MERGE:
+                schema.verifyStructure(schema.apply(this, getOriginal(), version).get().getData(), true);
+                break;
             default:
                 break;
         }