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 private 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());
58 (test)container-1(container)
59 (test)container-2(container)
60 (test)container-3(container)
61 (test)payload-container(container)
62 (test)payload-leaf(leaf)
69 """, streamWriter.result());
73 public void testAugmentationIdentifier() throws IOException {
74 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
76 final QName augmented = QName.create("augment-namespace", "augmented-container");
78 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
79 .node(QName.create("test", "container-1"))
80 .node(AugmentationIdentifier.create(Set.of(augmented)))
82 .node(QName.create(augmented, "container-2"))
85 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
86 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
87 nnWriter.write(mockedPayload());
92 (test)container-1(container)
93 AugmentationIdentifier{childNames=[(augment-namespace)augmented-container]}(augmentation)
94 (augment-namespace)augmented-container(container)
95 (augment-namespace)container-2(container)
96 (test)payload-container(container)
97 (test)payload-leaf(leaf)
105 """, streamWriter.result());
109 public void testMapIdentifier() throws IOException {
110 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
112 final QName listQname = QName.create("test", "list-1");
114 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
116 .nodeWithKey(listQname, QName.create("test", "list-1-key"), "test-list-entry")
117 .node(QName.create("test", "container-1"))
120 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
121 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
122 nnWriter.write(mockedPayload());
128 (test)list-1[{(test)list-1-key=test-list-entry}][](key)
129 (test)container-1(container)
130 (test)payload-container(container)
131 (test)payload-leaf(leaf)
138 """, streamWriter.result());
142 public void testChoiceIdentifier() throws IOException {
143 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
145 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
146 .node(QName.create("test", "choice-node"))
147 .node(QName.create("test", "container-in-case"))
150 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
151 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
152 nnWriter.write(mockedPayload());
157 (test)choice-node(choice)
158 (test)container-in-case(container)
159 (test)payload-container(container)
160 (test)payload-leaf(leaf)
166 """, streamWriter.result());
170 public void testLeafSetIdentifier() throws IOException {
171 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
173 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
174 .node(QName.create("test", "list-list"))
177 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
178 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
179 final QName leafQname = QName.create("test", "leaf");
181 final LeafSetEntryNode<?> leafNode = mock(LeafSetEntryNode.class);
182 doReturn(new NodeWithValue<>(leafQname, "test-value")).when(leafNode).getIdentifier();
183 doReturn("test-value").when(leafNode).body();
184 nnWriter.write(leafNode);
186 final LeafSetEntryNode<?> leafNode2 = mock(LeafSetEntryNode.class);
187 doReturn(new NodeWithValue<>(leafQname, "test-value-2")).when(leafNode2).getIdentifier();
188 doReturn("test-value-2").when(leafNode2).body();
189 nnWriter.write(leafNode2);
194 (test)list-list(leaf-list)
199 (String)=test-value-2
202 """, streamWriter.result());
205 private static NormalizedNode mockedPayload() {
206 final ContainerNode containerNode = mock(ContainerNode.class);
207 final LeafNode<?> leafNode = mock(LeafNode.class);
209 doReturn(new NodeIdentifier(QName.create("test", "payload-container"))).when(containerNode).getIdentifier();
210 doReturn(Set.of(leafNode)).when(containerNode).body();
211 doReturn(new NodeIdentifier(QName.create("test", "payload-leaf"))).when(leafNode).getIdentifier();
212 doReturn("leaf-value").when(leafNode).body();
214 return containerNode;