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