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.server.spi;
10 import static org.mockito.Mockito.inOrder;
11 import static org.mockito.Mockito.times;
13 import java.util.List;
15 import org.junit.jupiter.api.Test;
16 import org.junit.jupiter.api.extension.ExtendWith;
17 import org.mockito.Mock;
18 import org.mockito.junit.jupiter.MockitoExtension;
19 import org.opendaylight.restconf.api.query.DepthParam;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
23 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
24 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
28 * Unit test for {@link NormalizedNodeWriter} used with all parameters.
30 @ExtendWith(MockitoExtension.class)
31 class NormalizedNodeWriterParametersTest extends AbstractNormalizedNodeWriterTest {
33 private NormalizedNodeStreamWriter writer;
36 * Test write {@link ContainerNode} when all its children are selected to be written by fields parameter.
37 * Depth parameter is also used and limits output to depth 1.
38 * Fields parameter has effect limiting depth parameter in the way that selected nodes and its ancestors are
39 * written regardless of their depth (some of container children have depth > 1).
40 * Fields parameter selects all container children to be written and also all children of those children.
43 void writeContainerParameterPrioritiesTest() throws Exception {
44 final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, DepthParam.min(),
46 Set.of(LEAF_SET_NID.getNodeType()),
47 Set.of(leafSetEntryNodeIdentifier.getNodeType())));
49 parameterWriter.write(containerNodeData);
51 final var inOrder = inOrder(writer);
52 inOrder.verify(writer).startContainerNode(CONTAINER_NID, 1);
53 inOrder.verify(writer).startLeafSet(LEAF_SET_NID, 1);
54 inOrder.verify(writer).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
55 inOrder.verify(writer).scalarValue(leafSetEntryNodeValue);
56 inOrder.verify(writer, times(3)).endNode();
60 * Test write {@link ContainerNode} which represents data at restconf/data root.
61 * No parameters are used.
64 void writeRootDataTest() throws Exception {
65 final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null);
67 parameterWriter.write(ImmutableNodes.newContainerBuilder()
68 .withNodeIdentifier(NodeIdentifier.create(
69 QName.create("urn:ietf:params:xml:ns:netconf:base:1.0", "data")))
70 .withChild(leafSetNodeData)
73 final var inOrder = inOrder(writer);
74 inOrder.verify(writer).startLeafSet(LEAF_SET_NID, 1);
75 inOrder.verify(writer).startLeafSetEntryNode(leafSetEntryNodeIdentifier);
76 inOrder.verify(writer).scalarValue(leafSetEntryNodeValue);
77 inOrder.verify(writer, times(2)).endNode();
81 void writeEmptyRootContainerTest() throws Exception {
82 final var parameterWriter = NormalizedNodeWriter.forStreamWriter(writer, null);
84 parameterWriter.write(ImmutableNodes.newContainerBuilder()
85 .withNodeIdentifier(new NodeIdentifier(SchemaContext.NAME))