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.NodeIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
24 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
27 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
28 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
29 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
31 @ExtendWith(MockitoExtension.class)
32 public class YangInstanceIdentifierWriterTest {
33 private static EffectiveModelContext CONTEXT;
36 public static void beforeAll() {
37 CONTEXT = YangParserTestUtils.parseYangResourceDirectory("/YT1392");
41 public void testYangInstanceIdentifierWriter() throws IOException {
42 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
44 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
45 .node(QName.create("test", "container-1"))
46 .node(QName.create("test", "container-2"))
47 .node(QName.create("test", "container-3"))
50 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
51 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
52 nnWriter.write(mockedPayload());
57 (test)container-1(container)
58 (test)container-2(container)
59 (test)container-3(container)
60 (test)payload-container(container)
61 (test)payload-leaf(leaf)
68 """, streamWriter.result());
72 public void testAugmentationIdentifier() throws IOException {
73 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
75 final QName augmented = QName.create("augment-namespace", "augmented-container");
77 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
78 .node(QName.create("test", "container-1"))
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());
90 (test)container-1(container)
91 (augment-namespace)augmented-container(container)
92 (augment-namespace)container-2(container)
93 (test)payload-container(container)
94 (test)payload-leaf(leaf)
101 """, 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());
124 (test)list-1[{(test)list-1-key=test-list-entry}][](key)
125 (test)container-1(container)
126 (test)payload-container(container)
127 (test)payload-leaf(leaf)
134 """, streamWriter.result());
138 public void testChoiceIdentifier() throws IOException {
139 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
141 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
142 .node(QName.create("test", "choice-node"))
143 .node(QName.create("test", "container-in-case"))
146 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
147 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
148 nnWriter.write(mockedPayload());
153 (test)choice-node(choice)
154 (test)container-in-case(container)
155 (test)payload-container(container)
156 (test)payload-leaf(leaf)
162 """, streamWriter.result());
166 public void testLeafSetIdentifier() throws IOException {
167 final FormattingNormalizedNodeStreamWriter streamWriter = new FormattingNormalizedNodeStreamWriter();
169 final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
170 .node(QName.create("test", "list-list"))
173 try (var iidWriter = YangInstanceIdentifierWriter.open(streamWriter, CONTEXT, path)) {
174 try (var nnWriter = new NormalizedNodeWriter(streamWriter)) {
175 final QName leafQname = QName.create("test", "leaf");
177 final LeafSetEntryNode<?> leafNode = mock(LeafSetEntryNode.class);
178 doReturn(new NodeWithValue<>(leafQname, "test-value")).when(leafNode).getIdentifier();
179 doReturn("test-value").when(leafNode).body();
180 nnWriter.write(leafNode);
182 final LeafSetEntryNode<?> leafNode2 = mock(LeafSetEntryNode.class);
183 doReturn(new NodeWithValue<>(leafQname, "test-value-2")).when(leafNode2).getIdentifier();
184 doReturn("test-value-2").when(leafNode2).body();
185 nnWriter.write(leafNode2);
190 (test)list-list(leaf-list)
195 (String)=test-value-2
198 """, streamWriter.result());
201 private static NormalizedNode mockedPayload() {
202 final ContainerNode containerNode = mock(ContainerNode.class);
203 final LeafNode<?> leafNode = mock(LeafNode.class);
205 doReturn(new NodeIdentifier(QName.create("test", "payload-container"))).when(containerNode).getIdentifier();
206 doReturn(Set.of(leafNode)).when(containerNode).body();
207 doReturn(new NodeIdentifier(QName.create("test", "payload-leaf"))).when(leafNode).getIdentifier();
208 doReturn("leaf-value").when(leafNode).body();
210 return containerNode;