Reformulate YangInstanceIdentifierWriterTest 54/101054/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 10 May 2022 16:32:48 +0000 (18:32 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 10 May 2022 19:48:44 +0000 (21:48 +0200)
We have SchemaNode mocking going on here, which we really do not need --
just define the corresponding models and use YANG parser to create the
underlying schema.

JIRA: YANGTOOLS-1433
Change-Id: I861df0d4170737e4ecac0f64b6016d5f259332af
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 3f0eb0fab6a771c8b849504e1dbb0f929c8cac23)

data/yang-data-api/pom.xml
data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YangInstanceIdentifierWriterTest.java
data/yang-data-api/src/test/resources/YT1392/augment.yang [new file with mode: 0644]
data/yang-data-api/src/test/resources/YT1392/test.yang [new file with mode: 0644]

index ca34055fb8e252b2ac8b01288ae962196f414db6..8e19b31c3f512df61f366fecf1ae9d89719954a1 100644 (file)
             <artifactId>value</artifactId>
             <classifier>annotations</classifier>
         </dependency>
+
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-test-util</artifactId>
+        </dependency>
     </dependencies>
 </project>
index ae7371a64b43070d9011f6cb2bb7825548a188ed..d0a3c278ed6960e678b95abee9fd9520c1514653 100644 (file)
@@ -8,15 +8,12 @@
 package org.opendaylight.yangtools.yang.data.api.schema.stream;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doCallRealMethod;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
-import java.util.List;
-import java.util.Optional;
 import java.util.Set;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.junit.jupiter.MockitoExtension;
@@ -28,39 +25,30 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithV
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerLike;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 @ExtendWith(MockitoExtension.class)
 public class YangInstanceIdentifierWriterTest {
+    public static EffectiveModelContext CONTEXT;
+
+    @BeforeAll
+    public static void beforeAll() {
+        CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/YT1392");
+    }
+
     @Test
     public void testYangInstanceIdentifierWriter() throws IOException {
         final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
 
-        final DataNodeContainer root = mock(DataNodeContainer.class);
-
-        final ContainerLike containerSchema1 = mock(ContainerLike.class);
-        final ContainerLike containerSchema2 = mock(ContainerLike.class);
-        final ContainerLike containerSchema3 = mock(ContainerLike.class);
-
-        doReturn(containerSchema1).when(root).dataChildByName(any());
-        doReturn(containerSchema2).when(containerSchema1).dataChildByName(any());
-        doReturn(containerSchema3).when(containerSchema2).dataChildByName(any());
-
         final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
             .node(QName.create("test", "container-1"))
             .node(QName.create("test", "container-2"))
             .node(QName.create("test", "container-3"))
             .build();
 
-        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, root, path)) {
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
             try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
                 nnWriter.write(mockedPayload());
             }
@@ -83,33 +71,16 @@ public class YangInstanceIdentifierWriterTest {
     public void testAugmentationIdentifier() throws IOException {
         final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
 
-        final ContainerLike root = mock(ContainerLike.class);
         final QName augmented = QName.create("augment-namespace", "augmented-container");
-        final QName container2Qname = QName.create("augment-namespace", "container-2");
-
-        final ContainerLike containerSchema1 = mock(ContainerLike.class);
-        final AugmentationSchemaNode augmentationSchema = mock(AugmentationSchemaNode.class);
-        final ContainerLike augmentedContainerSchema = mock(ContainerLike.class);
-        final ContainerLike containerSchema2 = mock(ContainerLike.class);
-
-        doReturn(containerSchema1).when(root).dataChildByName(any());
-
-        doReturn(Set.of(augmentationSchema)).when(containerSchema1).getAvailableAugmentations();
-        doReturn(augmentedContainerSchema).when(augmentationSchema).dataChildByName(augmented);
-
-        doReturn(Set.of(augmentedContainerSchema)).when(augmentationSchema).getChildNodes();
-        doReturn(augmented).when(augmentedContainerSchema).getQName();
-
-        doReturn(containerSchema2).when(augmentedContainerSchema).dataChildByName(any());
 
         final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
             .node(QName.create("test", "container-1"))
             .node(AugmentationIdentifier.create(Set.of(augmented)))
             .node(augmented)
-            .node(container2Qname)
+            .node(QName.create(augmented, "container-2"))
             .build();
 
-        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, root, path)) {
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
             try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
                 nnWriter.write(mockedPayload());
             }
@@ -134,29 +105,15 @@ public class YangInstanceIdentifierWriterTest {
     public void testMapIdentifier() throws IOException {
         final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
 
-        final ContainerLike root = mock(ContainerLike.class);
-        final ListSchemaNode listSchemaNode = mock(ListSchemaNode.class);
-
-        final MapEntryNode listEntry = mock(MapEntryNode.class);
-
-        final ContainerLike containerSchema1 = mock(ContainerLike.class);
-        final QName container1Qname = QName.create("test", "container-1");
-        final QName list1KeyQname = QName.create("test", "list-1-key");
         final QName listQname = QName.create("test", "list-1");
 
-        doReturn(listQname).when(listSchemaNode).getQName();
-        doReturn(listSchemaNode).when(root).dataChildByName(any());
-        doReturn(List.of(list1KeyQname)).when(listSchemaNode).getKeyDefinition();
-        doReturn(containerSchema1).when(listSchemaNode).dataChildByName(container1Qname);
-        doReturn("test-list-entry").when(listEntry).toString();
-
         final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
             .node(listQname)
-            .nodeWithKey(listQname,list1KeyQname, listEntry)
-            .node(container1Qname)
+            .nodeWithKey(listQname, QName.create("test", "list-1-key"), "test-list-entry")
+            .node(QName.create("test", "container-1"))
             .build();
 
-        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, root, path)) {
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
             try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
                 nnWriter.write(mockedPayload());
             }
@@ -178,25 +135,13 @@ public class YangInstanceIdentifierWriterTest {
     @Test
     public void testChoiceIdentifier() throws IOException {
         final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
-        final ContainerLike root = mock(ContainerLike.class);
-        final ChoiceSchemaNode choiceSchemaNode = mock(ChoiceSchemaNode.class);
-        final CaseSchemaNode caseSchemaNode = mock(CaseSchemaNode.class);
-        final ContainerLike caseContainer = mock(ContainerLike.class);
-
-        final QName choiceQname = QName.create("test", "choice-node");
-        final QName caseQname = QName.create("test", "container-in-case");
-
-        doReturn(choiceSchemaNode).when(root).dataChildByName(choiceQname);
-        doReturn(Set.of(caseSchemaNode)).when(choiceSchemaNode).getCases();
-        doCallRealMethod().when(choiceSchemaNode).findDataSchemaChild(any());
-        doReturn(Optional.of(caseContainer)).when(caseSchemaNode).findDataChildByName(any());
 
         final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
-            .node(choiceQname)
-            .node(caseQname)
+            .node(QName.create("test", "choice-node"))
+            .node(QName.create("test", "container-in-case"))
             .build();
 
-        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, root, path)) {
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
             try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
                 nnWriter.write(mockedPayload());
             }
@@ -217,16 +162,11 @@ public class YangInstanceIdentifierWriterTest {
     public void testLeafSetIdentifier() throws IOException {
         final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
 
-        final ContainerLike root = mock(ContainerLike.class);
-        final LeafListSchemaNode leafSetSchema = mock(LeafListSchemaNode.class);
-
-        doReturn(leafSetSchema).when(root).dataChildByName(any());
-
         final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
             .node(QName.create("test", "list-list"))
             .build();
 
-        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, root, path)) {
+        try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
             try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
                 final QName leafQname = QName.create("test", "leaf");
 
diff --git a/data/yang-data-api/src/test/resources/YT1392/augment.yang b/data/yang-data-api/src/test/resources/YT1392/augment.yang
new file mode 100644 (file)
index 0000000..65a0273
--- /dev/null
@@ -0,0 +1,14 @@
+module augment {
+  namespace augment-namespace;
+  prefix aug;
+
+  import test {
+    prefix test;
+  }
+
+  augment /test:container-1 {
+    container augmented-container {
+      container container-2;
+    }
+  }
+}
diff --git a/data/yang-data-api/src/test/resources/YT1392/test.yang b/data/yang-data-api/src/test/resources/YT1392/test.yang
new file mode 100644 (file)
index 0000000..05fa3a8
--- /dev/null
@@ -0,0 +1,34 @@
+module test {
+  namespace test;
+  prefix test;
+
+  container container-1 {
+    container container-2 {
+      container container-3 {
+        container payload-container {
+          leaf payload-leaf {
+            type string;
+          }
+        }
+      }
+    }
+  }
+
+  choice choice-node {
+    container container-in-case;
+  }
+
+  list list-1 {
+    key list-1-key;
+
+    leaf list-1-key {
+      type string;
+    }
+
+    container container-1;
+  }
+
+  leaf-list list-list {
+    type string;
+  }
+}