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.FileNotFoundException;
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.parser.spi.meta.ReactorException;
30 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
32 public class InstanceIdToNodesTest {
34 private static final String NS = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:normalization:test";
35 private static final String REVISION = "2014-03-13";
36 private static final QName ID = QName.create(NS, REVISION, "id");
37 private static SchemaContext ctx;
39 private final NodeIdentifier rootContainer = new NodeIdentifier(QName.create(NS, REVISION, "test"));
40 private final NodeIdentifier outerContainer = new NodeIdentifier(QName.create(NS, REVISION, "outer-container"));
41 private final NodeIdentifier augmentedLeaf = new NodeIdentifier(QName.create(NS, REVISION, "augmented-leaf"));
42 private final AugmentationIdentifier augmentation = new AugmentationIdentifier(
43 Collections.singleton(augmentedLeaf.getNodeType()));
45 private final NodeIdentifier outerList = new NodeIdentifier(
46 QName.create(NS, REVISION, "outer-list"));
47 private final NodeIdentifierWithPredicates outerListWithKey = new NodeIdentifierWithPredicates(
48 QName.create(NS, REVISION, "outer-list"), ID, 1);
49 private final NodeIdentifier choice = new NodeIdentifier(QName.create(NS, REVISION, "outer-choice"));
50 private final NodeIdentifier leafFromCase = new NodeIdentifier(QName.create(NS, REVISION, "one"));
52 private final NodeIdentifier leafList = new NodeIdentifier(QName.create(NS, REVISION, "ordered-leaf-list"));
53 private final NodeWithValue<?> leafListWithValue = new NodeWithValue<>(
54 leafList.getNodeType(), "abcd");
56 static SchemaContext createTestContext() throws URISyntaxException, FileNotFoundException, ReactorException {
57 final File resourceFile = new File(InstanceIdToNodesTest.class.getResource("/filter-test.yang").toURI());
58 return YangParserTestUtils.parseYangSources(resourceFile);
62 public static void setUp() throws Exception {
63 ctx = createTestContext();
68 public void testInAugment() throws Exception {
69 final ContainerNode expectedFilter = Builders
71 .withNodeIdentifier(rootContainer)
73 Builders.containerBuilder()
74 .withNodeIdentifier(outerContainer)
76 Builders.augmentationBuilder()
77 .withNodeIdentifier(augmentation)
79 Builders.leafBuilder().withNodeIdentifier(augmentedLeaf)
80 .build()).build()).build()).build();
82 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
83 YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf));
84 assertEquals(expectedFilter, filter);
88 public void testInAugmentLeafOverride() throws Exception {
89 final LeafNode<Object> lastLeaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf)
90 .withValue("randomValue").build();
92 final ContainerNode expectedFilter = Builders
94 .withNodeIdentifier(rootContainer)
96 Builders.containerBuilder()
97 .withNodeIdentifier(outerContainer)
99 Builders.augmentationBuilder().withNodeIdentifier(augmentation)
100 .withChild(lastLeaf).build()).build()).build();
102 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
103 YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), lastLeaf);
104 assertEquals(expectedFilter, filter);
108 public void testListChoice() throws Exception {
109 final ContainerNode expectedFilter = Builders
111 .withNodeIdentifier(rootContainer)
113 Builders.mapBuilder()
114 .withNodeIdentifier(outerList)
116 Builders.mapEntryBuilder()
117 .withNodeIdentifier(outerListWithKey)
119 Builders.leafBuilder()
121 new NodeIdentifier(ID))
122 .withValue(1).build())
124 Builders.choiceBuilder()
125 .withNodeIdentifier(choice)
127 Builders.leafBuilder()
128 .withNodeIdentifier(leafFromCase)
129 .build()).build()).build()).build())
132 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
133 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase));
134 assertEquals(expectedFilter, filter);
138 public void testTopContainerLastChildOverride() throws Exception {
139 final ContainerNode expectedStructure = Builders
141 .withNodeIdentifier(rootContainer)
143 Builders.mapBuilder()
144 .withNodeIdentifier(outerList)
146 Builders.mapEntryBuilder()
147 .withNodeIdentifier(outerListWithKey)
149 Builders.leafBuilder()
151 new NodeIdentifier(ID))
152 .withValue(1).build())
154 Builders.choiceBuilder()
155 .withNodeIdentifier(choice)
157 Builders.leafBuilder()
158 .withNodeIdentifier(leafFromCase)
159 .build()).build()).build()).build())
162 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
163 YangInstanceIdentifier.create(rootContainer), expectedStructure);
164 assertEquals(expectedStructure, filter);
168 public void testListLastChildOverride() throws Exception {
169 final MapEntryNode outerListEntry = Builders
171 .withNodeIdentifier(outerListWithKey)
173 Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID))
174 .withValue(1).build()).build();
175 final MapNode lastChild = Builders.mapBuilder().withNodeIdentifier(this.outerList).withChild(outerListEntry)
177 final ContainerNode expectedStructure = Builders.containerBuilder().withNodeIdentifier(rootContainer)
178 .withChild(lastChild).build();
180 NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
181 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey), outerListEntry);
182 assertEquals(expectedStructure, filter);
183 filter = ImmutableNodes.fromInstanceId(ctx,
184 YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey));
185 assertEquals(expectedStructure, filter);
189 public void testLeafList() throws Exception {
190 final ContainerNode expectedFilter = Builders
192 .withNodeIdentifier(rootContainer)
194 Builders.orderedLeafSetBuilder()
195 .withNodeIdentifier(leafList)
197 Builders.leafSetEntryBuilder().withNodeIdentifier(leafListWithValue)
198 .withValue(leafListWithValue.getValue()).build()).build()).build();
200 final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx,
201 YangInstanceIdentifier.create(rootContainer, leafList, leafListWithValue));
202 assertEquals(expectedFilter, filter);