Fixed bug in equals method generation. 60/860/1
authorMartin Vitez <mvitez@cisco.com>
Tue, 13 Aug 2013 12:57:02 +0000 (14:57 +0200)
committerMartin Vitez <mvitez@cisco.com>
Tue, 13 Aug 2013 13:00:01 +0000 (15:00 +0200)
Refactored CopyUtils class, expanded UsesAugmentTest.

Signed-off-by: Martin Vitez <mvitez@cisco.com>
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/CopyUtils.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/UsesAugmentTest.java

index fb5bff3cc0255331667e397b369d219825ad7a92..5bd4756164c6f9c16d2fc88bbf0592113865b776 100644 (file)
@@ -29,7 +29,7 @@ class ClassTemplate {
         this.consts = genTO.constantDefinitions
     }
     
-    def generate() {
+    def String generate() {
         val body = generateBody(false)
         val pkgAndImports = generatePkgAndImports
         return pkgAndImports.toString + body.toString
@@ -227,7 +227,7 @@ class ClassTemplate {
     def private generateEquals() '''
         «IF !genTO.equalsIdentifiers.empty»
             @Override
-            public boolean equals(Object obj) {
+            public boolean equals(java.lang.Object obj) {
                 if (this == obj) {
                     return true;
                 }
index efd3736c6385bc7a811eeb3ec9001cb2cc2d3706..13ad34793c2fa2b0b5a5acbadf1cda43811ccc3b 100644 (file)
@@ -41,6 +41,15 @@ import org.opendaylight.yangtools.yang.parser.builder.impl.UsesNodeBuilderImpl;
 
 public class CopyUtils {
 
+    /**
+     * Create copy of DataSchemaNodeBuilder with new parent. If updateQName is
+     * true, qname of node will be corrected based on new parent.
+     *
+     * @param old
+     * @param newParent
+     * @param updateQName
+     * @return
+     */
     public static DataSchemaNodeBuilder copy(DataSchemaNodeBuilder old, Builder newParent, boolean updateQName) {
         if (old instanceof AnyXmlBuilder) {
             return copy((AnyXmlBuilder) old, newParent, updateQName);
@@ -57,7 +66,8 @@ public class CopyUtils {
         } else if (old instanceof ChoiceCaseBuilder) {
             return copy((ChoiceCaseBuilder) old, newParent, updateQName);
         } else {
-            throw new YangParseException(old.getModuleName(), old.getLine(), "Failed to copy node " + old);
+            throw new YangParseException(old.getModuleName(), old.getLine(),
+                    "Failed to copy node: Unknown type of DataSchemaNode: " + old);
         }
     }
 
@@ -76,7 +86,6 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -99,15 +108,12 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built child nodes?
         for (ChoiceCaseBuilder childNode : old.getCases()) {
             c.addCase(copy(childNode, c, updateQName));
         }
-        // TODO: built augments?
         for (AugmentationSchemaBuilder augment : old.getAugmentations()) {
             c.addAugmentation(copyAugment(augment, c));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -128,22 +134,20 @@ public class CopyUtils {
         c.setReference(old.getReference());
         c.setStatus(old.getStatus());
         c.setAugmenting(old.isAugmenting());
-        // TODO: built child nodes?
+        c.getChildNodes().addAll(old.getChildNodes());
         for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) {
             c.addChildNode(copy(childNode, c, updateQName));
         }
-        // TODO: built groupings?
-        // TODO: copy groupings?
         c.getGroupings().addAll(old.getGroupings());
-        // TODO: build typedefs?
+        for (GroupingBuilder grouping : old.getGroupingBuilders()) {
+            c.addGrouping(copy(grouping, c, updateQName));
+        }
         for (TypeDefinitionBuilder tdb : old.getTypeDefinitionBuilders()) {
             c.addTypedef(copy(tdb, c, updateQName));
         }
-        // TODO: built uses?
         for (UsesNodeBuilder oldUses : old.getUsesNodes()) {
             c.addUsesNode(copyUses(oldUses, c));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -169,28 +173,23 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built child nodes?
+        c.setChildNodes(old.getChildNodes());
         for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) {
             c.addChildNode(copy(childNode, c, updateQName));
         }
-        // TODO: built groupings?
+        c.getGroupings().addAll(old.getGroupings());
         for (GroupingBuilder grouping : old.getGroupingBuilders()) {
             c.addGrouping(copy(grouping, c, updateQName));
         }
-
-        // TODO: build typedefs?
         for (TypeDefinitionBuilder tdb : old.getTypeDefinitionBuilders()) {
             c.addTypedef(copy(tdb, c, updateQName));
         }
-        // TODO: built uses?
         for (UsesNodeBuilder oldUses : old.getUsesNodes()) {
             c.addUsesNode(copyUses(oldUses, c));
         }
-        // TODO: built augments?
         for (AugmentationSchemaBuilder augment : old.getAugmentations()) {
             c.addAugmentation(copyAugment(augment, c));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -214,7 +213,6 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -247,7 +245,6 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -279,28 +276,23 @@ public class CopyUtils {
         c.setAugmenting(old.isAugmenting());
         c.setAddedByUses(old.isAddedByUses());
         c.setConfiguration(old.isConfiguration());
-        // TODO: built child nodes?
+        c.setChildNodes(old.getChildNodes());
         for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) {
             c.addChildNode(copy(childNode, c, updateQName));
         }
-        // TODO: built groupings?
+        c.getGroupings().addAll(old.getGroupings());
         for (GroupingBuilder grouping : old.getGroupingBuilders()) {
             c.addGrouping(copy(grouping, c, updateQName));
         }
-
-        // TODO: build typedefs?
         for (TypeDefinitionBuilder tdb : old.getTypeDefinitionBuilders()) {
             c.addTypedef(copy(tdb, c, updateQName));
         }
-        // TODO: built uses?
         for (UsesNodeBuilder oldUses : old.getUsesNodes()) {
             c.addUsesNode(copyUses(oldUses, c));
         }
-        // TODO: built augments?
         for (AugmentationSchemaBuilder augment : old.getAugmentations()) {
             c.addAugmentation(copyAugment(augment, c));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -311,36 +303,32 @@ public class CopyUtils {
         return c;
     }
 
-    public static GroupingBuilder copy(GroupingBuilder old, Builder newParent, boolean updateQName) {
+    static GroupingBuilder copy(GroupingBuilder old, Builder newParent, boolean updateQName) {
         DataBean data = getdata(old, newParent, updateQName);
         QName newQName = data.qname;
         SchemaPath newSchemaPath = data.schemaPath;
 
-        GroupingBuilder c = new GroupingBuilderImpl(newParent.getModuleName(), newParent.getLine(), newQName);
+        GroupingBuilderImpl c = new GroupingBuilderImpl(newParent.getModuleName(), newParent.getLine(), newQName);
         c.setParent(newParent);
         c.setPath(newSchemaPath);
         c.setDescription(old.getDescription());
         c.setReference(old.getReference());
         c.setStatus(old.getStatus());
         c.setAddedByUses(old.isAddedByUses());
-        // TODO: built child nodes?
+        c.setChildNodes(old.getChildNodes());
         for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) {
             c.addChildNode(copy(childNode, c, updateQName));
         }
-        // TODO: built groupings?
+        c.getGroupings().addAll(old.getGroupings());
         for (GroupingBuilder grouping : old.getGroupingBuilders()) {
             c.addGrouping(copy(grouping, c, updateQName));
         }
-
-        // TODO: build typedefs?
         for (TypeDefinitionBuilder tdb : old.getTypeDefinitionBuilders()) {
             c.addTypedef(copy(tdb, c, updateQName));
         }
-        // TODO: built uses?
         for (UsesNodeBuilder oldUses : old.getUsesNodes()) {
             c.addUsesNode(copyUses(oldUses, c));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -348,7 +336,7 @@ public class CopyUtils {
         return c;
     }
 
-    public static TypeDefinitionBuilder copy(TypeDefinitionBuilder old, Builder newParent, boolean updateQName) {
+    static TypeDefinitionBuilder copy(TypeDefinitionBuilder old, Builder newParent, boolean updateQName) {
         DataBean data = getdata(old, newParent, updateQName);
         QName newQName = data.qname;
         SchemaPath newSchemaPath = data.schemaPath;
@@ -398,7 +386,7 @@ public class CopyUtils {
         return newConstraints;
     }
 
-    public static UsesNodeBuilder copyUses(UsesNodeBuilder old, Builder newParent) {
+    static UsesNodeBuilder copyUses(UsesNodeBuilder old, Builder newParent) {
         UsesNodeBuilder u = new UsesNodeBuilderImpl(newParent.getModuleName(), newParent.getLine(),
                 old.getGroupingName());
         u.setParent(newParent);
@@ -449,7 +437,6 @@ public class CopyUtils {
         }
         u.setTargetUnknownNodes(newUN);
 
-        // u.getTargetGroupingUses().addAll(old.getTargetGroupingUses());
         for (UsesNodeBuilder uses : old.getTargetGroupingUses()) {
             u.getTargetGroupingUses().add(copyUses(uses, uses.getParent()));
         }
@@ -462,23 +449,21 @@ public class CopyUtils {
     }
 
     private static AugmentationSchemaBuilder copyAugment(AugmentationSchemaBuilder old, Builder newParent) {
-        AugmentationSchemaBuilder a = new AugmentationSchemaBuilderImpl(newParent.getModuleName(), newParent.getLine(),
-                old.getTargetPathAsString());
+        AugmentationSchemaBuilderImpl a = new AugmentationSchemaBuilderImpl(newParent.getModuleName(),
+                newParent.getLine(), old.getTargetPathAsString());
         a.setParent(newParent);
 
         a.setDescription(old.getDescription());
         a.setReference(old.getReference());
         a.setStatus(old.getStatus());
         a.addWhenCondition(old.getWhenCondition());
-        // TODO: built child nodes?
+        a.setChildNodes(old.getChildNodes());
         for (DataSchemaNodeBuilder childNode : old.getChildNodeBuilders()) {
             a.addChildNode(copy(childNode, a, false));
         }
-        // TODO: built uses?
         for (UsesNodeBuilder oldUses : old.getUsesNodes()) {
             a.addUsesNode(copyUses(oldUses, a));
         }
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             a.addUnknownNodeBuilder((copy(un, a, false)));
         }
@@ -486,7 +471,7 @@ public class CopyUtils {
         return a;
     }
 
-    public static UnknownSchemaNodeBuilder copy(UnknownSchemaNodeBuilder old, Builder newParent, boolean updateQName) {
+    static UnknownSchemaNodeBuilder copy(UnknownSchemaNodeBuilder old, Builder newParent, boolean updateQName) {
         DataBean data = getdata(old, newParent, updateQName);
         QName newQName = data.qname;
         SchemaPath newSchemaPath = data.schemaPath;
@@ -500,8 +485,6 @@ public class CopyUtils {
         c.setReference(old.getReference());
         c.setStatus(old.getStatus());
         c.setAddedByUses(old.isAddedByUses());
-
-        // TODO: built un?
         for (UnknownSchemaNodeBuilder un : old.getUnknownNodeBuilders()) {
             c.addUnknownNodeBuilder((copy(un, c, updateQName)));
         }
@@ -523,7 +506,6 @@ public class CopyUtils {
                 newPath = Collections.singletonList(newQName);
             }
         } else if (newParent instanceof AugmentationSchemaBuilder) {
-            // TODO: new parent is augment?
             ModuleBuilder parent = ParserUtils.getParentModule(newParent);
             if (updateQName) {
                 newQName = new QName(parent.getNamespace(), parent.getRevision(), parent.getPrefix(), old.getQName()
@@ -538,12 +520,6 @@ public class CopyUtils {
             SchemaNodeBuilder parent = (SchemaNodeBuilder) newParent;
             QName parentQName = parent.getQName();
             if (updateQName) {
-                if (parentQName == null) {
-                    System.out.println("NULL");
-                }
-                if (old == null) {
-                    System.out.println("2NULL");
-                }
                 newQName = new QName(parentQName.getNamespace(), parentQName.getRevision(), parentQName.getPrefix(),
                         old.getQName().getLocalName());
                 newPath = new ArrayList<>(parent.getPath().getPath());
index 991910e499fd91b8268401c7c7fe61aada611587..921b7070b79fcffbfb5ff0ed30dc81e559b38417 100644 (file)
@@ -9,9 +9,17 @@ package org.opendaylight.yangtools.yang.parser.impl;
 
 import static org.junit.Assert.*;
 
+import java.io.FileNotFoundException;
+import java.net.URI;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.Set;
 
+import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -19,10 +27,21 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class UsesAugmentTest {
+    private final URI ns = URI.create("urn:opendaylight:params:xml:ns:yang:uses-grouping");
+    private Date rev;
+    private final String prefix = "ug";
+
     private Set<Module> modules;
 
+    @Before
+    public void init() throws FileNotFoundException, ParseException {
+        rev = TestUtils.simpleDateFormat.parse("2013-07-30");
+    }
+
+
     /**
      * Structure of testing model:
      *
@@ -86,144 +105,232 @@ public class UsesAugmentTest {
         assertEquals(1, notifications.size());
         NotificationDefinition pcreq = notifications.iterator().next();
         assertNotNull(pcreq);
+        assertEquals(createPath("pcreq"), pcreq.getPath());
         Set<DataSchemaNode> childNodes = pcreq.getChildNodes();
         assertEquals(3, childNodes.size());
         // * |-- leaf version (U)
         LeafSchemaNode version = (LeafSchemaNode)pcreq.getDataChildByName("version");
         assertNotNull(version);
+        assertEquals(createPath("pcreq", "version"), version.getPath());
         assertTrue(version.isAddedByUses());
         // * |-- list requests
         ListSchemaNode requests = (ListSchemaNode)pcreq.getDataChildByName("requests");
         assertNotNull(requests);
+        assertEquals(createPath("pcreq", "requests"), requests.getPath());
         assertFalse(requests.isAddedByUses());
         childNodes = requests.getChildNodes();
         assertEquals(3, childNodes.size());
         // * |-- |-- container rp
         ContainerSchemaNode rp = (ContainerSchemaNode)requests.getDataChildByName("rp");
         assertNotNull(rp);
+        assertEquals(createPath("pcreq", "requests", "rp"), rp.getPath());
         assertFalse(rp.isAddedByUses());
         childNodes = rp.getChildNodes();
         assertEquals(4, childNodes.size());
         // * |-- |-- |-- leaf priority (U)
         LeafSchemaNode priority = (LeafSchemaNode)rp.getDataChildByName("priority");
         assertNotNull(priority);
+        assertEquals(createPath("pcreq", "requests", "rp", "priority"), priority.getPath());
         assertTrue(priority.isAddedByUses());
         // * |-- |-- |-- container box (U)
         ContainerSchemaNode box = (ContainerSchemaNode)rp.getDataChildByName("box");
         assertNotNull(box);
+        assertEquals(createPath("pcreq", "requests", "rp", "box"), box.getPath());
         assertTrue(box.isAddedByUses());
         // * |-- |-- |-- |-- container order (A)
         ContainerSchemaNode order = (ContainerSchemaNode)box.getDataChildByName("order");
         assertNotNull(order);
-        //assertFalse(order.isAddedByUses());
+        assertEquals(createPath("pcreq", "requests", "rp", "box", "order"), order.getPath());
+        assertFalse(order.isAddedByUses());
         assertTrue(order.isAugmenting());
         assertEquals(2, order.getChildNodes().size());
         // * |-- |-- |-- |-- |-- leaf processing-rule (U)
         LeafSchemaNode delete = (LeafSchemaNode)order.getDataChildByName("delete");
         assertNotNull(delete);
+        assertEquals(createPath("pcreq", "requests", "rp", "box", "order", "delete"), delete.getPath());
         assertTrue(delete.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf ignore (U)
         LeafSchemaNode setup = (LeafSchemaNode)order.getDataChildByName("setup");
         assertNotNull(setup);
+        assertEquals(createPath("pcreq", "requests", "rp", "box", "order", "setup"), setup.getPath());
         assertTrue(setup.isAddedByUses());
         // * |-- |-- |-- leaf processing-rule (U)
         LeafSchemaNode processingRule = (LeafSchemaNode)rp.getDataChildByName("processing-rule");
         assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "requests", "rp", "processing-rule"), processingRule.getPath());
         assertTrue(processingRule.isAddedByUses());
         // * |-- |-- |-- leaf ignore (U)
         LeafSchemaNode ignore = (LeafSchemaNode)rp.getDataChildByName("ignore");
         assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "requests", "rp", "ignore"), ignore.getPath());
         assertTrue(ignore.isAddedByUses());
         // * |-- |-- path-key-expansion
         ContainerSchemaNode pke = (ContainerSchemaNode)requests.getDataChildByName("path-key-expansion");
         assertNotNull(pke);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion"), pke.getPath());
         assertFalse(pke.isAddedByUses());
         // * |-- |-- |-- path-key
         ContainerSchemaNode pathKey = (ContainerSchemaNode)pke.getDataChildByName("path-key");
         assertNotNull(pathKey);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion", "path-key"), pathKey.getPath());
         assertFalse(pathKey.isAddedByUses());
         assertEquals(3, pathKey.getChildNodes().size());
         // * |-- |-- |-- |-- list path-keys (U)
         ListSchemaNode pathKeys = (ListSchemaNode)pathKey.getDataChildByName("path-keys");
         assertNotNull(pathKeys);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion", "path-key", "path-keys"), pathKeys.getPath());
         assertTrue(pathKeys.isAddedByUses());
         childNodes = pathKeys.getChildNodes();
         assertEquals(1, childNodes.size());
         // * |-- |-- |-- |-- |-- leaf version (U)
         version = (LeafSchemaNode)pathKeys.getDataChildByName("version");
         assertNotNull(version);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion", "path-key", "path-keys", "version"), version.getPath());
         assertTrue(version.isAddedByUses());
         assertFalse(version.isAugmenting());
         // * |-- |-- |-- |-- |-- leaf processing-rule (U)
         processingRule = (LeafSchemaNode)pathKey.getDataChildByName("processing-rule");
         assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion", "path-key", "processing-rule"), processingRule.getPath());
         assertTrue(processingRule.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf ignore (U)
         ignore = (LeafSchemaNode)pathKey.getDataChildByName("ignore");
         assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "requests", "path-key-expansion", "path-key", "ignore"), ignore.getPath());
         assertTrue(ignore.isAddedByUses());
         // * |-- |-- container segment-computation
         ContainerSchemaNode sc = (ContainerSchemaNode)requests.getDataChildByName("segment-computation");
         assertNotNull(sc);
+        assertEquals(createPath("pcreq", "requests", "segment-computation"), sc.getPath());
         assertFalse(sc.isAddedByUses());
         // * |-- |-- |-- container p2p
         ContainerSchemaNode p2p = (ContainerSchemaNode)sc.getDataChildByName("p2p");
         assertNotNull(p2p);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p"), p2p.getPath());
         assertFalse(p2p.isAddedByUses());
         // * |-- |-- |-- |-- container endpoints
         ContainerSchemaNode endpoints = (ContainerSchemaNode)p2p.getDataChildByName("endpoints");
         assertNotNull(endpoints);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "endpoints"), endpoints.getPath());
         assertFalse(endpoints.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf processing-rule (U)
         processingRule = (LeafSchemaNode)endpoints.getDataChildByName("processing-rule");
         assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "endpoints", "processing-rule"), processingRule.getPath());
         assertTrue(processingRule.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf ignore (U)
         ignore = (LeafSchemaNode)endpoints.getDataChildByName("ignore");
         assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "endpoints", "ignore"), ignore.getPath());
         assertTrue(ignore.isAddedByUses());
         // * |-- |-- |-- |-- |-- container box
         box = (ContainerSchemaNode)endpoints.getDataChildByName("box");
         assertNotNull(box);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "endpoints", "box"), box.getPath());
         assertTrue(box.isAddedByUses());
         // * |-- |-- |-- |-- |-- choice address-family (U)
         ChoiceNode af = (ChoiceNode)endpoints.getDataChildByName("address-family");
         assertNotNull(af);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "endpoints", "address-family"), af.getPath());
         assertTrue(af.isAddedByUses());
         // * |-- |-- |-- |-- container reported-route
         ContainerSchemaNode reportedRoute = (ContainerSchemaNode)p2p.getDataChildByName("reported-route");
         assertNotNull(reportedRoute);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "reported-route"), reportedRoute.getPath());
         assertFalse(reportedRoute.isAddedByUses());
         // * |-- |-- |-- |-- |-- container bandwidth
         ContainerSchemaNode bandwidth = (ContainerSchemaNode)reportedRoute.getDataChildByName("bandwidth");
         assertNotNull(bandwidth);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "reported-route", "bandwidth"), bandwidth.getPath());
         assertFalse(bandwidth.isAddedByUses());
         // * |-- |-- |-- |-- |-- list subobjects
         ListSchemaNode subobjects = (ListSchemaNode)reportedRoute.getDataChildByName("subobjects");
         assertNotNull(subobjects);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "reported-route", "subobjects"), subobjects.getPath());
         assertTrue(subobjects.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf processing-rule (U)
         processingRule = (LeafSchemaNode)reportedRoute.getDataChildByName("processing-rule");
         assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "reported-route", "processing-rule"), processingRule.getPath());
         assertTrue(processingRule.isAddedByUses());
         // * |-- |-- |-- |-- |-- leaf ignore (U)
         ignore = (LeafSchemaNode)reportedRoute.getDataChildByName("ignore");
         assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "reported-route", "ignore"), ignore.getPath());
         assertTrue(ignore.isAddedByUses());
         // * |-- |-- |-- |-- container bandwidth (U)
         bandwidth = (ContainerSchemaNode)p2p.getDataChildByName("bandwidth");
         assertNotNull(bandwidth);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "bandwidth"), bandwidth.getPath());
         assertTrue(bandwidth.isAddedByUses());
         // * |-- |-- |-- |-- |-- container bandwidth (U)
-        bandwidth = (ContainerSchemaNode)bandwidth.getDataChildByName("bandwidth");
-        assertNotNull(bandwidth);
-        assertTrue(bandwidth.isAddedByUses());
-
-
+        ContainerSchemaNode bandwidthInner = (ContainerSchemaNode)bandwidth.getDataChildByName("bandwidth");
+        assertNotNull(bandwidthInner);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "bandwidth", "bandwidth"), bandwidthInner.getPath());
+        assertTrue(bandwidthInner.isAddedByUses());
+        // * |-- |-- |-- |-- |-- leaf processing-rule (U)
+        processingRule = (LeafSchemaNode)bandwidth.getDataChildByName("processing-rule");
+        assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "bandwidth", "processing-rule"), processingRule.getPath());
+        assertTrue(processingRule.isAddedByUses());
+        // * |-- |-- |-- |-- |-- leaf ignore (U)
+        ignore = (LeafSchemaNode)bandwidth.getDataChildByName("ignore");
+        assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "requests", "segment-computation", "p2p", "bandwidth", "ignore"), ignore.getPath());
+        assertTrue(ignore.isAddedByUses());
         // * |-- list svec
         ListSchemaNode svec = (ListSchemaNode)pcreq.getDataChildByName("svec");
         assertNotNull(svec);
+        assertEquals(createPath("pcreq", "svec"), svec.getPath());
         assertFalse(svec.isAddedByUses());
+        // * |-- |-- list metric
+        ListSchemaNode metric = (ListSchemaNode)svec.getDataChildByName("metric");
+        assertNotNull(metric);
+        assertEquals(createPath("pcreq", "svec", "metric"), metric.getPath());
+        assertFalse(metric.isAddedByUses());
+        // * |-- |-- |-- leaf metric-type (U)
+        LeafSchemaNode metricType = (LeafSchemaNode)metric.getDataChildByName("metric-type");
+        assertNotNull(metricType);
+        assertEquals(createPath("pcreq", "svec", "metric", "metric-type"), metricType.getPath());
+        assertTrue(metricType.isAddedByUses());
+        // * |-- |-- |-- box (U)
+        box = (ContainerSchemaNode)metric.getDataChildByName("box");
+        assertNotNull(box);
+        assertEquals(createPath("pcreq", "svec", "metric", "box"), box.getPath());
+        assertTrue(box.isAddedByUses());
+        // * |-- |-- |-- leaf processing-rule (U)
+        processingRule = (LeafSchemaNode)metric.getDataChildByName("processing-rule");
+        assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "svec", "metric", "processing-rule"), processingRule.getPath());
+        assertTrue(processingRule.isAddedByUses());
+        // * |-- |-- |-- leaf ignore (U)
+        ignore = (LeafSchemaNode)metric.getDataChildByName("ignore");
+        assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "svec", "metric", "ignore"), ignore.getPath());
+        assertTrue(ignore.isAddedByUses());
+        // * |-- |-- leaf link-diverse (U)
+        LeafSchemaNode linkDiverse = (LeafSchemaNode)svec.getDataChildByName("link-diverse");
+        assertNotNull(linkDiverse);
+        assertEquals(createPath("pcreq", "svec", "link-diverse"), linkDiverse.getPath());
+        assertTrue(linkDiverse.isAddedByUses());
+        // * |-- |-- leaf processing-rule (U)
+        processingRule = (LeafSchemaNode)svec.getDataChildByName("processing-rule");
+        assertNotNull(processingRule);
+        assertEquals(createPath("pcreq", "svec", "processing-rule"), processingRule.getPath());
+        assertTrue(processingRule.isAddedByUses());
+        // * |-- |-- leaf ignore (U)
+        ignore = (LeafSchemaNode)svec.getDataChildByName("ignore");
+        assertNotNull(ignore);
+        assertEquals(createPath("pcreq", "svec", "ignore"), ignore.getPath());
+        assertTrue(ignore.isAddedByUses());
+    }
+
+    private SchemaPath createPath(String... names) {
+        List<QName> path = new ArrayList<>();
+        for(String name : names) {
+            path.add(new QName(ns, rev, prefix, name));
+        }
+        return new SchemaPath(path, true);
     }
 
 }