blob: f27ae113f781938ba3b8d3de1da78d75609d9619 [file] [log] [blame]
janani b23ccc312016-07-14 19:35:22 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.plugin.manager;
18
19import org.apache.maven.plugin.MojoExecutionException;
20import org.junit.Rule;
21import org.junit.Test;
22import org.junit.rules.ExpectedException;
23import org.onosproject.yangutils.datamodel.YangContainer;
24import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangLeafRef;
26import org.onosproject.yangutils.datamodel.YangList;
27import org.onosproject.yangutils.datamodel.YangModule;
28import org.onosproject.yangutils.datamodel.YangNode;
29import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
30import org.onosproject.yangutils.linker.impl.YangLinkerManager;
31import org.onosproject.yangutils.parser.exceptions.ParserException;
32import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
33import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
34
35import java.io.IOException;
36import java.util.Iterator;
37import java.util.ListIterator;
38
39import static org.hamcrest.MatcherAssert.assertThat;
40import static org.hamcrest.core.Is.is;
41import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
42import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
43import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
44
45/**
46 * Test cases for testing leafref inter file linking.
47 */
48public class InterFileLeafrefLinkingTest {
49
50 @Rule
51 public ExpectedException thrown = ExpectedException.none();
52
53 private final YangUtilManager utilManager = new YangUtilManager();
54 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
55 private final YangUtilsParserManager manager = new YangUtilsParserManager();
56
57 /**
58 * Checks inter file leafref linking.
59 */
60 @Test
61 public void processInterFileLeafrefLinking()
62 throws IOException, ParserException, MojoExecutionException {
63
64 String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafrefwithimport";
65 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
66 utilManager.parseYangFileInfoSet();
67 utilManager.createYangNodeSet();
68 YangNode refNode = null;
69 YangNode selfNode = null;
70
71 // Create YANG node set
72 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
73
74 // Add references to import list.
75 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
76
77 // Carry out inter-file linking.
78 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
79
80 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
81
82 YangNode rootNode = yangNodeIterator.next();
83
84 if (rootNode.getName().equals("module1")) {
85 selfNode = rootNode;
86 refNode = yangNodeIterator.next();
87 } else {
88 refNode = rootNode;
89 selfNode = yangNodeIterator.next();
90 }
91
92 // Check whether the data model tree returned is of type module.
93 assertThat(selfNode instanceof YangModule, is(true));
94
95 // Check whether the node type is set properly to module.
96 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
97
98 // Check whether the module name is set correctly.
99 YangModule yangNode = (YangModule) selfNode;
100 assertThat(yangNode.getName(), is("module1"));
101
102 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
103 YangLeaf leafInfo = leafIterator.next();
104
105 assertThat(leafInfo.getName(), is("invalid-interval"));
106 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
107 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
108
109 // Check whether the data model tree returned is of type module.
110 assertThat(refNode instanceof YangModule, is(true));
111
112 // Check whether the node type is set properly to module.
113 assertThat(refNode.getNodeType(), is(MODULE_NODE));
114
115 // Check whether the module name is set correctly.
116 YangModule yangNode1 = (YangModule) refNode;
117 assertThat(yangNode1.getName(), is("module2"));
118 YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
119
120 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
121
122 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
123 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
124
125 assertThat(leafref.getEffectiveDataType().getDataType(),
126 is(YangDataTypes.STRING));
127 }
128
129 /**
130 * Checks inter file resolution when leafref from grouping refers to other file.
131 */
132 @Test
133 public void processInterFileLeafrefFromGroupingRefersToOtherFile()
134 throws IOException, ParserException {
135
136 String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile";
137 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
138 utilManager.parseYangFileInfoSet();
139 utilManager.createYangNodeSet();
140 YangNode selfNode = null;
141 YangNode refNode = null;
142
143 // Create YANG node set
144 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
145
146 // Add references to import list.
147 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
148
149 // Carry out inter-file linking.
150 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
151
152 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
153
154 YangNode rootNode = yangNodeIterator.next();
155
156 if (rootNode.getName().equals("module1")) {
157 selfNode = rootNode;
158 refNode = yangNodeIterator.next();
159 } else {
160 refNode = rootNode;
161 selfNode = yangNodeIterator.next();
162 }
163
164 // Check whether the data model tree returned is of type module.
165 assertThat(selfNode instanceof YangModule, is(true));
166
167 // Check whether the node type is set properly to module.
168 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
169
170 // Check whether the module name is set correctly.
171 YangModule yangNode = (YangModule) selfNode;
172 assertThat(yangNode.getName(), is("module1"));
173
174 YangList list = (YangList) yangNode.getChild().getChild();
175 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
176 YangLeaf leafInfo = leafIterator.next();
177
178 assertThat(leafInfo.getName(), is("link-tp"));
179 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
180 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
181
182 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
183
184 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
185 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
186 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
187
188 assertThat(leafref.getEffectiveDataType().getDataType(),
189 is(YangDataTypes.STRING));
190 }
191
192 /**
193 * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning.
194 */
195 @Test
196 public void processInterFileLeafrefFromGroupingWithPrefixIsCloned()
197 throws IOException, ParserException {
198
199 String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix";
200 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
201 utilManager.parseYangFileInfoSet();
202 utilManager.createYangNodeSet();
203 YangNode selfNode = null;
204 YangNode refNode = null;
205
206 // Create YANG node set
207 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
208
209 // Add references to import list.
210 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
211
212 // Carry out inter-file linking.
213 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
214
215 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
216
217 YangNode rootNode = yangNodeIterator.next();
218
219 if (rootNode.getName().equals("LeafrefInGroupingOfModule1")) {
220 selfNode = rootNode;
221 refNode = yangNodeIterator.next();
222 } else {
223 refNode = rootNode;
224 selfNode = yangNodeIterator.next();
225 }
226
227 // Check whether the data model tree returned is of type module.
228 assertThat(selfNode instanceof YangModule, is(true));
229
230 // Check whether the node type is set properly to module.
231 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
232
233 // Check whether the module name is set correctly.
234 YangModule yangNode = (YangModule) selfNode;
235 assertThat(yangNode.getName(), is("LeafrefInGroupingOfModule1"));
236
237 // Check whether the module name is set correctly.
238 YangModule yangNode1 = (YangModule) refNode;
239 assertThat(yangNode1.getName(), is("GroupingCopiedInModule2"));
240
241 YangContainer yangContainer = (YangContainer) yangNode1.getChild();
242
243 ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
244 YangLeaf leafInfo = leafIterator.next();
245
246 assertThat(leafInfo.getName(), is("network-ref"));
247 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
248 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
249
250 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
251
252 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
253 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
254 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
255
256 assertThat(leafref.getEffectiveDataType().getDataType(),
257 is(YangDataTypes.STRING));
258 }
259
260 /**
261 * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning with
262 * multi reference.
263 */
264 @Test
265 public void processInterFileLeafrefFromGroupingWithPrefixIsClonedMultiReference()
266 throws IOException, ParserException {
267
268 String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference";
269 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
270 utilManager.parseYangFileInfoSet();
271 utilManager.createYangNodeSet();
272 YangNode selfNode = null;
273 YangNode refNode = null;
274
275 // Create YANG node set
276 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
277
278 // Add references to import list.
279 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
280
281 // Carry out inter-file linking.
282 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
283
284 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
285
286 YangNode rootNode = yangNodeIterator.next();
287
288 if (rootNode.getName().equals("ietf-network")) {
289 selfNode = rootNode;
290 refNode = yangNodeIterator.next();
291 } else {
292 refNode = rootNode;
293 selfNode = yangNodeIterator.next();
294 }
295
296 // Check whether the data model tree returned is of type module.
297 assertThat(selfNode instanceof YangModule, is(true));
298
299 // Check whether the node type is set properly to module.
300 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
301
302 // Check whether the module name is set correctly.
303 YangModule yangNode = (YangModule) selfNode;
304 assertThat(yangNode.getName(), is("ietf-network"));
305
306 // Check whether the module name is set correctly.
307 YangModule yangNode1 = (YangModule) refNode;
308 assertThat(yangNode1.getName(), is("ietf-te-topology"));
309
310 YangContainer yangContainer = (YangContainer) yangNode1.getChild().getNextSibling();
311 ListIterator<YangLeaf> leafIterator;
312 YangLeaf leafInfo;
313
314 leafIterator = yangContainer.getListOfLeaf().listIterator();
315 leafInfo = leafIterator.next();
316 leafInfo = leafIterator.next();
317
318 assertThat(leafInfo.getName(), is("node-ref"));
319 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
320 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
321
322 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
323
324 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
325 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
326 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
327
328 assertThat(leafref.getEffectiveDataType().getDataType(),
329 is(YangDataTypes.DERIVED));
330
331 leafInfo = leafIterator.next();
332
333 assertThat(leafInfo.getName(), is("network-ref"));
334 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
335 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
336
337 YangLeafRef leafref1 = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
338
339 YangLeaf leafInfo4 = (YangLeaf) leafref1.getReferredLeafOrLeafList();
340 assertThat(leafref1.getReferredLeafOrLeafList(), is(leafInfo4));
341 assertThat(leafref1.getResolvableStatus(), is(RESOLVED));
342
343 assertThat(leafref1.getEffectiveDataType().getDataType(),
344 is(YangDataTypes.DERIVED));
345 }
346}