2 * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.api.schema.stream;
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.mock;
14 import java.io.IOException;
16 import org.junit.jupiter.api.BeforeAll;
17 import org.junit.jupiter.api.Test;
18 import org.junit.jupiter.api.extension.ExtendWith;
19 import org.mockito.junit.jupiter.MockitoExtension;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
25 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
27 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
28 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
29 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
30 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
32 @ExtendWith(MockitoExtension.class)
33 public class YangInstanceIdentifierWriterTest {
34 public static EffectiveModelContext CONTEXT;
37 public static void beforeAll() {
38 CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/YT1392");
42 public void testYangInstanceIdentifierWriter() throws IOException {
43 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
45 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
46 .node(QName.create("test", "container-1"))
47 .node(QName.create("test", "container-2"))
48 .node(QName.create("test", "container-3"))
51 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
52 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
53 nnWriter.write(mockedPayload());
57 assertEquals("(test)container-1(container)\n"
58 + " (test)container-2(container)\n"
59 + " (test)container-3(container)\n"
60 + " (test)payload-container(container)\n"
61 + " (test)payload-leaf(leaf)\n"
62 + " (String)=leaf-value\n"
67 + "(end)\n", streamWriter.result());
71 public void testAugmentationIdentifier() throws IOException {
72 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
74 final QName augmented = QName.create("augment-namespace", "augmented-container");
76 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
77 .node(QName.create("test", "container-1"))
78 .node(AugmentationIdentifier.create(Set.of(augmented)))
80 .node(QName.create(augmented, "container-2"))
83 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
84 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
85 nnWriter.write(mockedPayload());
89 assertEquals("(test)container-1(container)\n"
90 + " AugmentationIdentifier{childNames=[(augment-namespace)augmented-container]}(augmentation)\n"
91 + " (augment-namespace)augmented-container(container)\n"
92 + " (augment-namespace)container-2(container)\n"
93 + " (test)payload-container(container)\n"
94 + " (test)payload-leaf(leaf)\n"
95 + " (String)=leaf-value\n"
101 + "(end)\n", streamWriter.result());
105 public void testMapIdentifier() throws IOException {
106 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
108 final QName listQname = QName.create("test", "list-1");
110 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
112 .nodeWithKey(listQname, QName.create("test", "list-1-key"), "test-list-entry")
113 .node(QName.create("test", "container-1"))
116 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
117 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
118 nnWriter.write(mockedPayload());
122 assertEquals("(test)list-1(key)\n"
123 + " (test)list-1[{(test)list-1-key=test-list-entry}][](key)\n"
124 + " (test)container-1(container)\n"
125 + " (test)payload-container(container)\n"
126 + " (test)payload-leaf(leaf)\n"
127 + " (String)=leaf-value\n"
132 + "(end)\n", streamWriter.result());
136 public void testChoiceIdentifier() throws IOException {
137 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
139 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
140 .node(QName.create("test", "choice-node"))
141 .node(QName.create("test", "container-in-case"))
144 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
145 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
146 nnWriter.write(mockedPayload());
150 assertEquals("(test)choice-node(choice)\n"
151 + " (test)container-in-case(container)\n"
152 + " (test)payload-container(container)\n"
153 + " (test)payload-leaf(leaf)\n"
154 + " (String)=leaf-value\n"
158 + "(end)\n", streamWriter.result());
162 public void testLeafSetIdentifier() throws IOException {
163 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
165 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
166 .node(QName.create("test", "list-list"))
169 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
170 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
171 final QName leafQname = QName.create("test", "leaf");
173 final LeafSetEntryNode<?> leafNode = mock(LeafSetEntryNode.class);
174 doReturn(new NodeWithValue<>(leafQname, "test-value")).when(leafNode).getIdentifier();
175 doReturn("test-value").when(leafNode).body();
176 nnWriter.write(leafNode);
178 final LeafSetEntryNode<?> leafNode2 = mock(LeafSetEntryNode.class);
179 doReturn(new NodeWithValue<>(leafQname, "test-value-2")).when(leafNode2).getIdentifier();
180 doReturn("test-value-2").when(leafNode2).body();
181 nnWriter.write(leafNode2);
185 assertEquals("(test)list-list(leaf-list)\n"
186 + " (test)leaf(entry)\n"
187 + " (String)=test-value\n"
189 + " (test)leaf(entry)\n"
190 + " (String)=test-value-2\n"
192 + "(end)\n", streamWriter.result());
195 private static NormalizedNode mockedPayload() {
196 final ContainerNode containerNode = mock(ContainerNode.class);
197 final LeafNode<?> leafNode = mock(LeafNode.class);
199 doReturn(new NodeIdentifier(QName.create("test", "payload-container"))).when(containerNode).getIdentifier();
200 doReturn(Set.of(leafNode)).when(containerNode).body();
201 doReturn(new NodeIdentifier(QName.create("test", "payload-leaf"))).when(leafNode).getIdentifier();
202 doReturn("leaf-value").when(leafNode).body();
204 return containerNode;