From 3f0eb0fab6a771c8b849504e1dbb0f929c8cac23 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 10 May 2022 18:32:48 +0200 Subject: [PATCH] Reformulate YangInstanceIdentifierWriterTest 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 --- data/yang-data-api/pom.xml | 5 + .../YangInstanceIdentifierWriterTest.java | 100 ++++-------------- .../src/test/resources/YT1392/augment.yang | 14 +++ .../src/test/resources/YT1392/test.yang | 34 ++++++ 4 files changed, 73 insertions(+), 80 deletions(-) create mode 100644 data/yang-data-api/src/test/resources/YT1392/augment.yang create mode 100644 data/yang-data-api/src/test/resources/YT1392/test.yang diff --git a/data/yang-data-api/pom.xml b/data/yang-data-api/pom.xml index 11b3059313..6f9f7107a1 100644 --- a/data/yang-data-api/pom.xml +++ b/data/yang-data-api/pom.xml @@ -47,5 +47,10 @@ value annotations + + + org.opendaylight.yangtools + yang-test-util + diff --git a/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YangInstanceIdentifierWriterTest.java b/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YangInstanceIdentifierWriterTest.java index a4fa881de8..68bbf7ce39 100644 --- a/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YangInstanceIdentifierWriterTest.java +++ b/data/yang-data-api/src/test/java/org/opendaylight/yangtools/yang/data/api/schema/stream/YangInstanceIdentifierWriterTest.java @@ -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 { + private 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()); } @@ -85,33 +73,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()); } @@ -138,29 +109,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()); } @@ -184,25 +141,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()); } @@ -225,16 +170,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 index 0000000000..65a02731e7 --- /dev/null +++ b/data/yang-data-api/src/test/resources/YT1392/augment.yang @@ -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 index 0000000000..05fa3a8ef0 --- /dev/null +++ b/data/yang-data-api/src/test/resources/YT1392/test.yang @@ -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; + } +} -- 2.36.6