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.yangtools.yang.data.impl.schema;
10 import static org.junit.Assert.assertEquals;
12 import java.io.IOException;
13 import java.net.URISyntaxException;
14 import java.util.Collections;
15 import org.junit.BeforeClass;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
23 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
24 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
25 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
27 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
29 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
30 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
31 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
33 public class InstanceIdToNodesTest {
35 private static final String NS = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:normalization:test";
36 private static final String REVISION = "2014-03-13";
37 private static final QName ID = QName.create(NS, REVISION, "id");
38 private static SchemaContext ctx;
40 private final NodeIdentifier rootContainer = new NodeIdentifier(QName.create(NS, REVISION, "test"));
41 private final NodeIdentifier outerContainer = new NodeIdentifier(QName.create(NS, REVISION, "outer-container"));
42 private final NodeIdentifier augmentedLeaf = new NodeIdentifier(QName.create(NS, REVISION, "augmented-leaf"));
43 private final AugmentationIdentifier augmentation = new AugmentationIdentifier(
44 Collections.singleton(augmentedLeaf.getNodeType()));
46 private final NodeIdentifier outerList = new NodeIdentifier(
47 QName.create(NS, REVISION, "outer-list"));
48 private final NodeIdentifierWithPredicates outerListWithKey = new NodeIdentifierWithPredicates(
49 QName.create(NS, REVISION, "outer-list"), ID, 1);
50 private final NodeIdentifier choice = new NodeIdentifier(QName.create(NS, REVISION, "outer-choice"));
51 private final NodeIdentifier leafFromCase = new NodeIdentifier(QName.create(NS, REVISION, "one"));
53 private final NodeIdentifier leafList = new NodeIdentifier(QName.create(NS, REVISION, "ordered-leaf-list"));
54 private final NodeWithValue<?> leafListWithValue = new NodeWithValue<>(
55 leafList.getNodeType(), "abcd");
57 static SchemaContext createTestContext() throws URISyntaxException, ReactorException, IOException,
58 YangSyntaxErrorException {
59 return YangParserTestUtils.parseYangResources(InstanceIdToNodesTest.class, "/filter-test.yang");
63 public static void setUp() throws Exception {
64 ctx = createTestContext();
69 public void testInAugment() throws Exception {
70 final LeafNode<?> leaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf).withValue("").build();
71 final ContainerNode expectedFilter = Builders
73 .withNodeIdentifier(rootContainer)
75 Builders.containerBuilder()
76 .withNodeIdentifier(outerContainer)
78 Builders.augmentationBuilder()
79 .withNodeIdentifier(augmentation)
81 leaf).build()).build()).build();
83 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
84 YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), leaf);
85 assertEquals(expectedFilter, filter);
89 public void testInAugmentLeafOverride() throws Exception {
90 final LeafNode<Object> lastLeaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf)
91 .withValue("randomValue").build();
93 final ContainerNode expectedFilter = Builders
95 .withNodeIdentifier(rootContainer)
97 Builders.containerBuilder()
98 .withNodeIdentifier(outerContainer)
100 Builders.augmentationBuilder().withNodeIdentifier(augmentation)
101 .withChild(lastLeaf).build()).build()).build();
103 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
104 YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), lastLeaf);
105 assertEquals(expectedFilter, filter);
109 public void testListChoice() throws Exception {
110 final LeafNode<?> leaf = Builders.leafBuilder().withNodeIdentifier(leafFromCase).withValue("").build();
111 final ContainerNode expectedFilter = Builders
113 .withNodeIdentifier(rootContainer)
115 Builders.mapBuilder()
116 .withNodeIdentifier(outerList)
118 Builders.mapEntryBuilder()
119 .withNodeIdentifier(outerListWithKey)
121 Builders.leafBuilder()
123 new NodeIdentifier(ID))
124 .withValue(1).build())
126 Builders.choiceBuilder()
127 .withNodeIdentifier(choice)
134 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
135 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase), leaf);
136 assertEquals(expectedFilter, filter);
140 public void testTopContainerLastChildOverride() throws Exception {
141 final ContainerNode expectedStructure = Builders
143 .withNodeIdentifier(rootContainer)
145 Builders.mapBuilder()
146 .withNodeIdentifier(outerList)
148 Builders.mapEntryBuilder()
149 .withNodeIdentifier(outerListWithKey)
151 Builders.leafBuilder()
153 new NodeIdentifier(ID))
154 .withValue(1).build())
156 Builders.choiceBuilder()
157 .withNodeIdentifier(choice)
159 Builders.leafBuilder()
160 .withNodeIdentifier(leafFromCase)
162 .build()).build()).build()).build())
165 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
166 YangInstanceIdentifier.create(rootContainer), expectedStructure);
167 assertEquals(expectedStructure, filter);
171 public void testListLastChildOverride() throws Exception {
172 final MapEntryNode outerListEntry = Builders
174 .withNodeIdentifier(outerListWithKey)
176 Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID))
177 .withValue(1).build()).build();
178 final MapNode lastChild = Builders.mapBuilder().withNodeIdentifier(this.outerList).withChild(outerListEntry)
180 final ContainerNode expectedStructure = Builders.containerBuilder().withNodeIdentifier(rootContainer)
181 .withChild(lastChild).build();
183 NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
184 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey), outerListEntry);
185 assertEquals(expectedStructure, filter);
186 filter = ImmutableNodes.fromInstanceId(ctx,
187 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey));
188 assertEquals(expectedStructure, filter);
192 public void testLeafList() throws Exception {
193 final ContainerNode expectedFilter = Builders
195 .withNodeIdentifier(rootContainer)
197 Builders.orderedLeafSetBuilder()
198 .withNodeIdentifier(leafList)
200 Builders.leafSetEntryBuilder().withNodeIdentifier(leafListWithValue)
201 .withValue(leafListWithValue.getValue()).build()).build()).build();
203 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
204 YangInstanceIdentifier.create(rootContainer, leafList, leafListWithValue));
205 assertEquals(expectedFilter, filter);