Fix infinite loop in augment resolution 47/98647/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 23 Nov 2021 08:21:22 +0000 (09:21 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 23 Nov 2021 08:33:18 +0000 (09:33 +0100)
We should be pushing using 'result' as source, not 'found' here.

JIRA: NETCONF-834
Change-Id: I169c97e1b18682ad7296e6e0272de1c362efe6d2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java
restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializerTest.java
restconf/restconf-nb-rfc8040/src/test/resources/restconf/parser/deserializer/deserializer-test.yang

index b3bc922b41a2e7640b230174a1efef54340d5bb9..743945ad7bce5439326b081791c82627a3090d87 100644 (file)
@@ -212,7 +212,7 @@ public final class YangInstanceIdentifierDeserializer {
         var result = found;
         while (result.isMixin()) {
             path.add(result.getIdentifier());
-            result = verifyNotNull(found.getChild(qname), "Mixin %s is missing child for %s while resolving %s",
+            result = verifyNotNull(result.getChild(qname), "Mixin %s is missing child for %s while resolving %s",
                 result, qname, found);
         }
         return result;
index 9d97189295a0fbe94aa18ec6dd33397c3a3cb610..9a44c4c91433775085829f3d64c3bd911085685d 100644 (file)
@@ -641,20 +641,39 @@ public class YangInstanceIdentifierDeserializerTest {
     public void deserializePartInOtherModuleTest() {
         final List<PathArgument> result = YangInstanceIdentifierDeserializer.create(SCHEMA_CONTEXT,
             "deserializer-test-included:augmented-list=100/deserializer-test:augmented-leaf");
-
         assertEquals(4, result.size());
 
+        // list
         final QName list = QName.create("deserializer:test:included", "2016-06-06", "augmented-list");
-        final QName child = QName.create("deserializer:test", "2016-06-06", "augmented-leaf");
+        assertEquals(NodeIdentifier.create(list), result.get(0));
+        assertEquals(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), Uint16.valueOf(100)),
+            result.get(1));
+
+        // augmented leaf
+        final QName augLeaf = QName.create("deserializer:test", "2016-06-06", "augmented-leaf");
+        final QName augList = QName.create("deserializer:test", "2016-06-06", "augmenting-list");
+        assertEquals(new AugmentationIdentifier(Set.of(augLeaf, augList)), result.get(2));
+        assertEquals(NodeIdentifier.create(augLeaf), result.get(3));
+    }
+
+    @Test
+    public void deserializeListInOtherModuleTest() {
+        final List<PathArgument> result = YangInstanceIdentifierDeserializer.create(SCHEMA_CONTEXT,
+            "deserializer-test-included:augmented-list=100/deserializer-test:augmenting-list=0");
+        assertEquals(5, result.size());
 
         // list
+        final QName list = QName.create("deserializer:test:included", "2016-06-06", "augmented-list");
         assertEquals(NodeIdentifier.create(list), result.get(0));
         assertEquals(NodeIdentifierWithPredicates.of(list, QName.create(list, "list-key"), Uint16.valueOf(100)),
             result.get(1));
 
-        // augmented leaf
-        assertEquals(new AugmentationIdentifier(Set.of(child)), result.get(2));
-        assertEquals(NodeIdentifier.create(child), result.get(3));
+        // augmented list
+        final QName augLeaf = QName.create("deserializer:test", "2016-06-06", "augmented-leaf");
+        final QName augList = QName.create("deserializer:test", "2016-06-06", "augmenting-list");
+        assertEquals(new AugmentationIdentifier(Set.of(augLeaf, augList)), result.get(2));
+        assertEquals(NodeIdentifier.create(augList), result.get(3));
+        assertEquals(NodeIdentifierWithPredicates.of(augList, QName.create(augList, "id"), 0), result.get(4));
     }
 
     /**
index ec8a825a30473f5d0a036b04b98699bc48582201..97ec334a815dfd05a403d90dcf49ad0d71523467 100644 (file)
@@ -90,5 +90,12 @@ module deserializer-test {
     leaf augmented-leaf {
       type string;
     }
+
+    list augmenting-list {
+      key id;
+      leaf id {
+        type int32;
+      }
+    }
   }
 }