NoddeWithValue is generic
[yangtools.git] / yang / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / InstanceIdToNodesTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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.
7  */
8 package org.opendaylight.yangtools.yang.data.impl.schema;
9
10 import static org.junit.Assert.assertEquals;
11 import com.google.common.base.Function;
12 import com.google.common.collect.Collections2;
13 import com.google.common.io.ByteSource;
14 import java.io.IOException;
15 import java.io.InputStream;
16 import java.util.Collections;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
25 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
26 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
27 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
28 import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
29 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
30 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
31 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
32 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
33
34 public class InstanceIdToNodesTest {
35
36     private static final String NS = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:normalization:test";
37     private static final String REVISION = "2014-03-13";
38     private static final QName ID = QName.create(NS, REVISION, "id");
39     private SchemaContext ctx;
40
41     private final NodeIdentifier rootContainer = new NodeIdentifier(QName.create(NS, REVISION, "test"));
42     private final NodeIdentifier outerContainer = new NodeIdentifier(QName.create(NS, REVISION, "outer-container"));
43     private final NodeIdentifier augmentedLeaf = new NodeIdentifier(QName.create(NS, REVISION, "augmented-leaf"));
44     private final AugmentationIdentifier augmentation = new AugmentationIdentifier(Collections.singleton(augmentedLeaf.getNodeType()));
45
46     private final NodeIdentifier outerList = new NodeIdentifier(QName.create(NS, REVISION, "outer-list"));
47     private final NodeIdentifierWithPredicates outerListWithKey = new NodeIdentifierWithPredicates(QName.create(NS, REVISION, "outer-list"), ID, 1);
48     private final NodeIdentifier choice = new NodeIdentifier(QName.create(NS, REVISION, "outer-choice"));
49     private final NodeIdentifier leafFromCase = new NodeIdentifier(QName.create(NS, REVISION, "one"));
50
51     private final NodeIdentifier leafList = new NodeIdentifier(QName.create(NS, REVISION, "ordered-leaf-list"));
52     private final NodeWithValue<?> leafListWithValue = new NodeWithValue<>(leafList.getNodeType(), "abcd");
53
54     static SchemaContext createTestContext() throws IOException, YangSyntaxErrorException {
55         final YangParserImpl parser = new YangParserImpl();
56         return parser.parseSources(Collections2.transform(Collections.singletonList("/filter-test.yang"), new Function<String, ByteSource>() {
57             @Override
58             public ByteSource apply(final String input) {
59                 return new ByteSource() {
60                     @Override
61                     public InputStream openStream() throws IOException {
62                         return InstanceIdToNodesTest.class.getResourceAsStream(input);
63                     }
64                 };
65             }
66         }));
67     }
68
69     @Before
70     public void setUp() throws Exception {
71         ctx = createTestContext();
72
73     }
74
75     @Test
76     public void testInAugment() throws Exception {
77         final ContainerNode expectedFilter = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
78                 Builders.containerBuilder().withNodeIdentifier(outerContainer).withChild(
79                         Builders.augmentationBuilder().withNodeIdentifier(augmentation).withChild(
80                                 Builders.leafBuilder().withNodeIdentifier(augmentedLeaf).build()
81                         ).build()
82                 ).build()
83         ).build();
84
85         final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf));
86         assertEquals(expectedFilter, filter);
87     }
88
89     @Test
90     public void testInAugmentLeafOverride() throws Exception {
91         final LeafNode<Object> lastLeaf = Builders.leafBuilder().withNodeIdentifier(augmentedLeaf).withValue("randomValue").build();
92
93         final ContainerNode expectedFilter = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
94                 Builders.containerBuilder().withNodeIdentifier(outerContainer).withChild(
95                         Builders.augmentationBuilder().withNodeIdentifier(augmentation).withChild(
96                                 lastLeaf
97                         ).build()
98                 ).build()
99         ).build();
100
101         final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, outerContainer, augmentation, augmentedLeaf), lastLeaf);
102         assertEquals(expectedFilter, filter);
103     }
104
105     @Test
106     public void testListChoice() throws Exception {
107         final ContainerNode expectedFilter = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
108                 Builders.mapBuilder().withNodeIdentifier(outerList).withChild(
109                         Builders.mapEntryBuilder().withNodeIdentifier(outerListWithKey).withChild(
110                                 Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID)).withValue(1).build()
111                         ).withChild(
112                                 Builders.choiceBuilder().withNodeIdentifier(choice).withChild(
113                                         Builders.leafBuilder().withNodeIdentifier(leafFromCase).build()
114                                 ).build()
115                         ).build()
116                 ).build()
117         ).build();
118
119         final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey, choice, leafFromCase));
120         assertEquals(expectedFilter, filter);
121     }
122
123     @Test
124     public void testTopContainerLastChildOverride() throws Exception {
125         final ContainerNode expectedStructure = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
126                 Builders.mapBuilder().withNodeIdentifier(outerList).withChild(
127                         Builders.mapEntryBuilder().withNodeIdentifier(outerListWithKey).withChild(
128                                 Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID)).withValue(1).build()
129                         ).withChild(
130                                 Builders.choiceBuilder().withNodeIdentifier(choice).withChild(
131                                         Builders.leafBuilder().withNodeIdentifier(leafFromCase).build()
132                                 ).build()
133                         ).build()
134                 ).build()
135         ).build();
136
137         final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer), expectedStructure);
138         assertEquals(expectedStructure, filter);
139     }
140
141     @Test
142     public void testListLastChildOverride() throws Exception {
143         final MapEntryNode outerListEntry = Builders.mapEntryBuilder().withNodeIdentifier(outerListWithKey).withChild(
144                 Builders.leafBuilder().withNodeIdentifier(new NodeIdentifier(ID)).withValue(1).build()
145         ).build();
146         final MapNode lastChild = Builders.mapBuilder().withNodeIdentifier(this.outerList).withChild(
147                 outerListEntry
148         ).build();
149         final ContainerNode expectedStructure = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
150                 lastChild
151         ).build();
152
153         NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey), outerListEntry);
154         assertEquals(expectedStructure, filter);
155         filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, outerList, outerListWithKey));
156         assertEquals(expectedStructure, filter);
157     }
158
159     @Test
160     public void testLeafList() throws Exception {
161         final ContainerNode expectedFilter = Builders.containerBuilder().withNodeIdentifier(rootContainer).withChild(
162                 Builders.orderedLeafSetBuilder().withNodeIdentifier(leafList).withChild(
163                         Builders.leafSetEntryBuilder().withNodeIdentifier(leafListWithValue).withValue(leafListWithValue.getValue()).build()
164                 ).build()
165         ).build();
166
167         final NormalizedNode<?, ?> filter = ImmutableNodes.fromInstanceId(ctx, YangInstanceIdentifier.create(rootContainer, leafList, leafListWithValue));
168         assertEquals(expectedFilter, filter);
169     }
170 }