2 * Copyright (c) 2016 Cisco Systems, Inc. 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.restconf.nb.rfc8040.jersey.providers;
10 import static org.mockito.Mockito.inOrder;
11 import static org.mockito.Mockito.times;
12 import static org.mockito.Mockito.verifyNoMoreInteractions;
13 import static org.mockito.Mockito.when;
15 import java.util.Collection;
16 import java.util.List;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.InOrder;
22 import org.mockito.Mock;
23 import org.mockito.junit.MockitoJUnitRunner;
24 import org.opendaylight.yangtools.yang.common.QName;
25 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
26 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
28 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
30 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
31 import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
32 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
33 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
34 import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode;
35 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
36 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
39 * Unit test for {@link ParameterAwareNormalizedNodeWriter} used with fields parameter.
41 @RunWith(MockitoJUnitRunner.StrictStubs.class)
42 public class ParameterAwareNormalizedNodeWriterFieldsTest {
44 private NormalizedNodeStreamWriter writer;
46 private ContainerNode containerNodeData;
48 private SystemMapNode mapNodeData;
50 private MapEntryNode mapEntryNodeData;
52 private SystemLeafSetNode<String> leafSetNodeData;
54 private LeafSetEntryNode<String> leafSetEntryNodeData;
56 private LeafNode<String> keyLeafNodeData;
58 private NodeIdentifier containerNodeIdentifier;
59 private NodeIdentifier mapNodeIdentifier;
60 private NodeIdentifierWithPredicates mapEntryNodeIdentifier;
61 private NodeIdentifier leafSetNodeIdentifier;
62 private NodeWithValue<String> leafSetEntryNodeIdentifier;
63 private NodeIdentifier keyLeafNodeIdentifier;
65 private Collection<DataContainerChild> containerNodeValue;
66 private Collection<MapEntryNode> mapNodeValue;
67 private Collection<DataContainerChild> mapEntryNodeValue;
68 private Collection<LeafSetEntryNode<String>> leafSetNodeValue;
69 private String leafSetEntryNodeValue;
70 private String keyLeafNodeValue;
75 containerNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "container"));
76 when(containerNodeData.getIdentifier()).thenReturn(containerNodeIdentifier);
78 mapNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "list"));
79 when(mapNodeData.getIdentifier()).thenReturn(mapNodeIdentifier);
81 final QName leafSetEntryNodeQName = QName.create("namespace", "leaf-set-entry");
82 leafSetEntryNodeValue = "leaf-set-value";
83 leafSetEntryNodeIdentifier = new NodeWithValue<>(leafSetEntryNodeQName, leafSetEntryNodeValue);
84 when(leafSetEntryNodeData.getIdentifier()).thenReturn(leafSetEntryNodeIdentifier);
86 leafSetNodeIdentifier = NodeIdentifier.create(QName.create("namespace", "leaf-set"));
87 when(leafSetNodeData.getIdentifier()).thenReturn(leafSetNodeIdentifier);
89 final QName mapEntryNodeKey = QName.create("namespace", "key-field");
90 keyLeafNodeIdentifier = NodeIdentifier.create(mapEntryNodeKey);
91 keyLeafNodeValue = "key-value";
93 mapEntryNodeIdentifier = NodeIdentifierWithPredicates.of(
94 QName.create("namespace", "list-entry"), mapEntryNodeKey, keyLeafNodeValue);
95 when(mapEntryNodeData.getIdentifier()).thenReturn(mapEntryNodeIdentifier);
96 when(mapEntryNodeData.childByArg(keyLeafNodeIdentifier)).thenReturn(keyLeafNodeData);
98 when(keyLeafNodeData.body()).thenReturn(keyLeafNodeValue);
99 when(keyLeafNodeData.getIdentifier()).thenReturn(keyLeafNodeIdentifier);
102 when(leafSetEntryNodeData.body()).thenReturn(leafSetEntryNodeValue);
104 leafSetNodeValue = List.of(leafSetEntryNodeData);
105 when(leafSetNodeData.body()).thenReturn(leafSetNodeValue);
107 containerNodeValue = Set.of(leafSetNodeData);
108 when(containerNodeData.body()).thenReturn(containerNodeValue);
110 mapEntryNodeValue = Set.of(keyLeafNodeData);
111 when(mapEntryNodeData.body()).thenReturn(mapEntryNodeValue);
113 mapNodeValue = Set.of(mapEntryNodeData);
114 when(mapNodeData.body()).thenReturn(mapNodeValue);
118 * Test write {@link ContainerNode} when children which will be written are limited.
119 * Fields parameter selects 0/1 of container children to be written.
122 public void writeContainerWithLimitedFieldsTest() throws Exception {
123 final List<Set<QName>> limitedFields = List.of(Set.of());
125 final ParameterAwareNormalizedNodeWriter parameterWriter = ParameterAwareNormalizedNodeWriter.forStreamWriter(
126 writer, null, limitedFields);
128 parameterWriter.write(containerNodeData);
130 final InOrder inOrder = inOrder(writer);
131 inOrder.verify(writer, times(1)).startContainerNode(containerNodeIdentifier, containerNodeValue.size());
132 inOrder.verify(writer, times(1)).endNode();
133 verifyNoMoreInteractions(writer);
137 * Test write {@link ContainerNode} when all its children are selected to be written.
138 * Fields parameter selects 1/1 of container children to be written.
141 public void writeContainerAllFieldsTest() throws Exception {
142 final List<Set<QName>> limitedFields = List.of(Set.of(leafSetNodeIdentifier.getNodeType()));
144 final ParameterAwareNormalizedNodeWriter parameterWriter = ParameterAwareNormalizedNodeWriter.forStreamWriter(
145 writer, null, limitedFields);
147 parameterWriter.write(containerNodeData);
149 final InOrder inOrder = inOrder(writer);
150 inOrder.verify(writer, times(1)).startContainerNode(containerNodeIdentifier, containerNodeValue.size());
151 inOrder.verify(writer, times(1)).startLeafSet(leafSetNodeIdentifier, leafSetNodeValue.size());
152 inOrder.verify(writer, times(1)).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
153 inOrder.verify(writer, times(1)).scalarValue(leafSetEntryNodeValue);
154 inOrder.verify(writer, times(3)).endNode();
155 verifyNoMoreInteractions(writer);
159 * Test write {@link MapEntryNode} as child of {@link MapNode} when children which will be written are limited.
160 * Fields parameter selects 0/1 of map entry node children to be written.
163 public void writeMapEntryNodeWithLimitedFieldsTest() throws Exception {
164 final List<Set<QName>> limitedFields = List.of(Set.of());
166 final ParameterAwareNormalizedNodeWriter parameterWriter = ParameterAwareNormalizedNodeWriter.forStreamWriter(
167 writer, null, limitedFields);
169 parameterWriter.write(mapNodeData);
171 final InOrder inOrder = inOrder(writer);
172 inOrder.verify(writer, times(1)).startMapNode(mapNodeIdentifier, mapNodeValue.size());
173 inOrder.verify(writer, times(1)).startMapEntryNode(mapEntryNodeIdentifier, mapEntryNodeValue.size());
174 inOrder.verify(writer, times(2)).endNode();
175 verifyNoMoreInteractions(writer);
179 * Test write {@link MapEntryNode} as child of {@link MapNode} when all its children will be written.
180 * Fields parameter selects 1/1 of map entry node children to be written.
183 public void writeMapNodeAllFieldsTest() throws Exception {
184 final List<Set<QName>> limitedFields = List.of(Set.of(keyLeafNodeData.getIdentifier().getNodeType()));
186 final ParameterAwareNormalizedNodeWriter parameterWriter = ParameterAwareNormalizedNodeWriter.forStreamWriter(
187 writer, null, limitedFields);
189 parameterWriter.write(mapNodeData);
191 final InOrder inOrder = inOrder(writer);
192 inOrder.verify(writer, times(1)).startMapNode(mapNodeIdentifier, mapNodeValue.size());
193 inOrder.verify(writer, times(1)).startMapEntryNode(mapEntryNodeIdentifier, mapEntryNodeValue.size());
194 inOrder.verify(writer, times(1)).startLeafNode(keyLeafNodeIdentifier);
195 inOrder.verify(writer, times(1)).scalarValue(keyLeafNodeValue);
196 inOrder.verify(writer, times(3)).endNode();
197 verifyNoMoreInteractions(writer);