blob: 82ad49298bf4b9a9c84c10c31f618a256470f563 [file] [log] [blame]
janani be18b5342016-07-13 21:06:41 +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
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053019import java.io.IOException;
20import java.util.Iterator;
21import java.util.List;
22import java.util.ListIterator;
janani b23ccc312016-07-14 19:35:22 +053023import org.junit.Ignore;
janani be18b5342016-07-13 21:06:41 +053024import org.junit.Rule;
25import org.junit.Test;
26import org.junit.rules.ExpectedException;
27import org.onosproject.yangutils.datamodel.YangAtomicPath;
janani b23ccc312016-07-14 19:35:22 +053028import org.onosproject.yangutils.datamodel.YangAugment;
janani be18b5342016-07-13 21:06:41 +053029import org.onosproject.yangutils.datamodel.YangContainer;
janani b23ccc312016-07-14 19:35:22 +053030import org.onosproject.yangutils.datamodel.YangFeature;
31import org.onosproject.yangutils.datamodel.YangIfFeature;
janani be18b5342016-07-13 21:06:41 +053032import org.onosproject.yangutils.datamodel.YangInput;
33import org.onosproject.yangutils.datamodel.YangLeaf;
34import org.onosproject.yangutils.datamodel.YangLeafList;
35import org.onosproject.yangutils.datamodel.YangLeafRef;
36import org.onosproject.yangutils.datamodel.YangList;
37import org.onosproject.yangutils.datamodel.YangModule;
38import org.onosproject.yangutils.datamodel.YangNode;
39import org.onosproject.yangutils.datamodel.YangNodeType;
40import org.onosproject.yangutils.datamodel.YangPathArgType;
41import org.onosproject.yangutils.datamodel.YangPathOperator;
42import org.onosproject.yangutils.datamodel.YangPathPredicate;
43import org.onosproject.yangutils.datamodel.YangRelativePath;
44import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
janani b23ccc312016-07-14 19:35:22 +053045import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
janani be18b5342016-07-13 21:06:41 +053046import org.onosproject.yangutils.linker.exceptions.LinkerException;
janani b23ccc312016-07-14 19:35:22 +053047import org.onosproject.yangutils.linker.impl.YangLinkerManager;
janani be18b5342016-07-13 21:06:41 +053048import org.onosproject.yangutils.parser.exceptions.ParserException;
49import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
janani b23ccc312016-07-14 19:35:22 +053050import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
51
janani be18b5342016-07-13 21:06:41 +053052import static org.hamcrest.MatcherAssert.assertThat;
53import static org.hamcrest.core.Is.is;
54import static org.hamcrest.core.IsNull.nullValue;
janani b23ccc312016-07-14 19:35:22 +053055import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
56import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
57import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053058import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
janani be18b5342016-07-13 21:06:41 +053059
60/**
61 * Test cases for testing leafref intra file linking.
62 */
63public class IntraFileLeafrefLinkingTest {
64
65 @Rule
66 public ExpectedException thrown = ExpectedException.none();
67
janani b23ccc312016-07-14 19:35:22 +053068 private final YangUtilManager utilManager = new YangUtilManager();
69 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
janani be18b5342016-07-13 21:06:41 +053070 private final YangUtilsParserManager manager = new YangUtilsParserManager();
71
72 /**
73 * Checks self resolution when leafref under module refers to leaf in container.
74 */
75 @Test
76 public void processSelfResolutionWhenLeafrefReferToContainerLeaf()
77 throws IOException, ParserException {
78
janani b23ccc312016-07-14 19:35:22 +053079 String searchDir = "src/test/resources/leafreflinker/intrafile/simpleleafref";
80 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
81 utilManager.parseYangFileInfoSet();
82 utilManager.createYangNodeSet();
83 YangNode selfNode = null;
84
85 // Create YANG node set
86 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
87
88 // Add references to import list.
89 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
90
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053091 updateFilePriority(utilManager.getYangNodeSet());
92
janani b23ccc312016-07-14 19:35:22 +053093 // Carry out inter-file linking.
94 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
95
96 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
97
98 YangNode rootNode = yangNodeIterator.next();
99
100 if (rootNode.getName().equals("SelfResolutionWhenLeafrefReferToContainerLeaf")) {
101 selfNode = rootNode;
102 }
janani be18b5342016-07-13 21:06:41 +0530103
104 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530105 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530106
107 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530108 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530109
110 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530111 YangModule yangNode = (YangModule) selfNode;
112 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefReferToContainerLeaf"));
janani be18b5342016-07-13 21:06:41 +0530113
114 ListIterator<YangLeaf> leafIterator;
115 YangLeaf leafInfo;
116
117 leafIterator = yangNode.getListOfLeaf().listIterator();
118 leafInfo = leafIterator.next();
119
120 // Check whether the information in the leaf is correct.
121 assertThat(leafInfo.getName(), is("network-ref"));
122 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
123 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
124 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
125
126 // Check whether leafref type got resolved.
127 assertThat(leafref.getResolvableStatus(),
128 is(ResolvableStatus.RESOLVED));
129
130 // Check the effective type for the leaf.
131 assertThat(leafref.getEffectiveDataType().getDataType(),
132 is(YangDataTypes.UINT8));
133 }
134
135 /**
136 * Checks self resolution when leafref under module refers to leaf in input of rpc.
137 */
138 @Test
139 public void processSelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc()
140 throws IOException, ParserException {
141
janani b23ccc312016-07-14 19:35:22 +0530142 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpc";
143 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
144 utilManager.parseYangFileInfoSet();
145 utilManager.createYangNodeSet();
146 YangNode selfNode = null;
147
148 // Create YANG node set
149 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
150
151 // Add references to import list.
152 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
153
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530154 updateFilePriority(utilManager.getYangNodeSet());
155
janani b23ccc312016-07-14 19:35:22 +0530156 // Carry out inter-file linking.
157 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
158
159 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
160
161 YangNode rootNode = yangNodeIterator.next();
162
163 if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc")) {
164 selfNode = rootNode;
165 }
janani be18b5342016-07-13 21:06:41 +0530166
167 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530168 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530169
170 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530171 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530172
173 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530174 YangModule yangNode = (YangModule) selfNode;
175 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc"));
janani be18b5342016-07-13 21:06:41 +0530176
177 ListIterator<YangLeaf> leafIterator;
178 YangLeaf leafInfo;
179
180 leafIterator = yangNode.getListOfLeaf().listIterator();
181 leafInfo = leafIterator.next();
182
183 // Check whether the information in the leaf is correct.
184 assertThat(leafInfo.getName(), is("network-ref"));
185 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
186 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
187 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
188
189 // Check whether leafref type got resolved.
190 assertThat(leafref.getResolvableStatus(),
191 is(ResolvableStatus.RESOLVED));
192
193 // Check the effective type for the leaf.
194 assertThat(leafref.getEffectiveDataType().getDataType(),
195 is(YangDataTypes.UINT8));
196 }
197
198 /**
199 * Checks self resolution when leafref under module refers to grouping rpc with input as name.
200 * Rpc has input child also. So here the node search must be done by taking input node.
janani b23ccc312016-07-14 19:35:22 +0530201 * TODO: When path has RPC's input but grouping & typedef with the same name occurs.
janani be18b5342016-07-13 21:06:41 +0530202 */
janani b23ccc312016-07-14 19:35:22 +0530203 @Ignore
janani be18b5342016-07-13 21:06:41 +0530204 public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc()
205 throws IOException, ParserException {
206
janani b23ccc312016-07-14 19:35:22 +0530207 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping";
208 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
209 utilManager.parseYangFileInfoSet();
210 utilManager.createYangNodeSet();
211 YangNode selfNode = null;
212
213 // Create YANG node set
214 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
215
216 // Add references to import list.
217 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
218
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530219 updateFilePriority(utilManager.getYangNodeSet());
220
janani b23ccc312016-07-14 19:35:22 +0530221 // Carry out inter-file linking.
222 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
223
224 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
225
226 YangNode rootNode = yangNodeIterator.next();
227
228 if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc")) {
229 selfNode = rootNode;
230 }
janani be18b5342016-07-13 21:06:41 +0530231
232 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530233 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530234
235 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530236 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530237
238 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530239 YangModule yangNode = (YangModule) selfNode;
240 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc"));
janani be18b5342016-07-13 21:06:41 +0530241
242 ListIterator<YangLeaf> leafIterator;
243 YangLeaf leafInfo;
244
245 leafIterator = yangNode.getListOfLeaf().listIterator();
246 leafInfo = leafIterator.next();
247
248 // Check whether the information in the leaf is correct.
249 assertThat(leafInfo.getName(), is("network-ref"));
250 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
251 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
252 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
253
254 // Check whether leafref type got resolved.
255 assertThat(leafref.getResolvableStatus(),
256 is(ResolvableStatus.RESOLVED));
257
258 // Check the effective type for the leaf.
259 assertThat(leafref.getEffectiveDataType().getDataType(),
260 is(YangDataTypes.UINT8));
261 }
262
263 /**
264 * Checks self resolution when leafref under module refers to grouping under module.
265 * Grouping/typedef cannot be referred.
266 */
267 @Test
268 public void processSelfResolutionWhenLeafrefInModuleReferToGrouping()
269 throws IOException, ParserException {
270
271 thrown.expect(LinkerException.class);
272 thrown.expectMessage(
janani b23ccc312016-07-14 19:35:22 +0530273 "YANG file error: The target node, in the leafref path /networks/network-id, is invalid.");
274
275 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping";
276 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
277 utilManager.parseYangFileInfoSet();
278 utilManager.createYangNodeSet();
279
280 // Create YANG node set
281 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
282
283 // Add references to import list.
284 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
285
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530286 updateFilePriority(utilManager.getYangNodeSet());
287
janani b23ccc312016-07-14 19:35:22 +0530288 // Carry out inter-file linking.
289 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530290 }
291
292 /**
293 * Checks self resolution error scenerio where leafref is without path.
294 */
295 @Test
296 public void processSelfResolutionWhenLeafrefDoesntHavePath()
297 throws IOException, ParserException {
298
299 thrown.expect(ParserException.class);
300 thrown.expectMessage(
301 "YANG file error : a type leafref must have one path statement.");
302 YangNode node = manager
303 .getDataModel("src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang");
304 }
305
306 /**
307 * Checks self resolution when leafref under module refers to invalid node.
janani be18b5342016-07-13 21:06:41 +0530308 */
309 @Test
310 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
311 throws IOException, ParserException {
312
janani b23ccc312016-07-14 19:35:22 +0530313 thrown.expect(LinkerException.class);
314 thrown.expectMessage(
315 "YANG file error: Unable to find base leaf/leaf-list for given leafref path /define/network-id");
316 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode";
317 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
318 utilManager.parseYangFileInfoSet();
319 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +0530320
janani b23ccc312016-07-14 19:35:22 +0530321 // Create YANG node set
322 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530323
janani b23ccc312016-07-14 19:35:22 +0530324 // Add references to import list.
325 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530326
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530327 updateFilePriority(utilManager.getYangNodeSet());
328
janani b23ccc312016-07-14 19:35:22 +0530329 // Carry out inter-file linking.
330 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530331 }
332
333 /**
334 * Checks self resolution when leafref under module refers to invalid node.
335 * Inter file linking also has to be done to know the error message.
336 */
337 @Test
338 public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion()
339 throws IOException, ParserException {
340
janani b23ccc312016-07-14 19:35:22 +0530341 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreflinking";
342 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
343 utilManager.parseYangFileInfoSet();
344 utilManager.createYangNodeSet();
345 YangNode selfNode = null;
346
347 // Create YANG node set
348 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
349
350 // Add references to import list.
351 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
352
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530353 updateFilePriority(utilManager.getYangNodeSet());
354
janani b23ccc312016-07-14 19:35:22 +0530355 // Carry out inter-file linking.
356 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
357
358 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
359
360 YangNode rootNode = yangNodeIterator.next();
361
362 if (rootNode.getName().equals("Test")) {
363 selfNode = rootNode;
364 }
365
janani be18b5342016-07-13 21:06:41 +0530366 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530367 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530368
369 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530370 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530371
372 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530373 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530374 assertThat(yangNode.getName(), is("Test"));
375
376 YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
377 ListIterator<YangLeaf> leafIterator;
378 YangLeaf leafInfo;
379
380 leafIterator = containerParent.getListOfLeaf().listIterator();
381 leafInfo = leafIterator.next();
382
383 // Check whether the information in the leaf is correct.
384 assertThat(leafInfo.getName(), is("name"));
385 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
386 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
387 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
388
389 // Check whether leafref type got resolved.
390 assertThat(leafref.getResolvableStatus(),
391 is(ResolvableStatus.RESOLVED));
392
393 // Check the effective type for the leaf.
394 assertThat(leafref.getEffectiveDataType().getDataType(),
395 is(YangDataTypes.UNION));
396 }
397
398 /**
399 * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
400 */
401 @Test
402 public void processSelfResolutionWhenLeafrefReferToContainerLeafList()
403 throws IOException, ParserException {
404
janani b23ccc312016-07-14 19:35:22 +0530405 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist";
406 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
407 utilManager.parseYangFileInfoSet();
408 utilManager.createYangNodeSet();
409 YangNode selfNode = null;
410
411 // Create YANG node set
412 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
413
414 // Add references to import list.
415 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
416
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530417 updateFilePriority(utilManager.getYangNodeSet());
418
janani b23ccc312016-07-14 19:35:22 +0530419 // Carry out inter-file linking.
420 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
421
422 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
423
424 YangNode rootNode = yangNodeIterator.next();
425
426 if (rootNode.getName().equals("ietf-network")) {
427 selfNode = rootNode;
428 }
janani be18b5342016-07-13 21:06:41 +0530429
430 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530431 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530432
433 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530434 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530435
436 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530437 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530438 assertThat(yangNode.getName(), is("ietf-network"));
439
440 ListIterator<YangLeafList> leafListIterator;
441 YangLeafList leafListInfo;
442
443 leafListIterator = yangNode.getListOfLeafList().listIterator();
444 leafListInfo = leafListIterator.next();
445
446 // Check whether the information in the leaf is correct.
447 assertThat(leafListInfo.getName(), is("network-ref"));
448 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
449 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
450 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
451
452 // Check whether leafref type got resolved.
453 assertThat(leafref.getResolvableStatus(),
454 is(ResolvableStatus.RESOLVED));
455
456 // Check the effective type for the leaf.
457 assertThat(leafref.getEffectiveDataType().getDataType(),
458 is(YangDataTypes.UINT8));
459 }
460
461 /**
462 * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
463 */
464 @Test
465 public void processSelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc()
466 throws IOException, ParserException {
467
janani b23ccc312016-07-14 19:35:22 +0530468 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc";
469 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
470 utilManager.parseYangFileInfoSet();
471 utilManager.createYangNodeSet();
472 YangNode selfNode = null;
janani be18b5342016-07-13 21:06:41 +0530473
janani b23ccc312016-07-14 19:35:22 +0530474 // Create YANG node set
475 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
476
477 // Add references to import list.
478 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
479
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530480 updateFilePriority(utilManager.getYangNodeSet());
481
janani b23ccc312016-07-14 19:35:22 +0530482 // Carry out inter-file linking.
483 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
484
485 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
486
487 YangNode rootNode = yangNodeIterator.next();
488
489 if (rootNode.getName().equals("ietf-network")) {
490 selfNode = rootNode;
491 }
janani be18b5342016-07-13 21:06:41 +0530492
493 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530494 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530495
496 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530497 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530498 assertThat(yangNode.getName(), is("ietf-network"));
499
500 ListIterator<YangLeafList> leafListIterator;
501 YangLeafList leafListInfo;
502
503 leafListIterator = yangNode.getListOfLeafList().listIterator();
504 leafListInfo = leafListIterator.next();
505
506 // Check whether the information in the leaf is correct.
507 assertThat(leafListInfo.getName(), is("network-ref"));
508 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
509 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
510 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
511
512 // Check whether leafref type got resolved.
513 assertThat(leafref.getResolvableStatus(),
514 is(ResolvableStatus.RESOLVED));
515
516 // Check the effective type for the leaf.
517 assertThat(leafref.getEffectiveDataType().getDataType(),
518 is(YangDataTypes.UINT8));
519 }
520
521 /**
522 * Checks self resolution when leafref of leaf-list under module refers to invalid node.
523 * Inter file linking also has to be done to know the error message.
524 */
525 @Test
526 public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
527 throws IOException, ParserException {
528
janani b23ccc312016-07-14 19:35:22 +0530529 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived";
530 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
531 utilManager.parseYangFileInfoSet();
532 utilManager.createYangNodeSet();
533 YangNode selfNode = null;
534
535 // Create YANG node set
536 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
537
538 // Add references to import list.
539 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
540
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530541 updateFilePriority(utilManager.getYangNodeSet());
542
janani b23ccc312016-07-14 19:35:22 +0530543 // Carry out inter-file linking.
544 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
545
546 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
547
548 YangNode rootNode = yangNodeIterator.next();
549
550 if (rootNode.getName().equals("Test")) {
551 selfNode = rootNode;
552 }
janani be18b5342016-07-13 21:06:41 +0530553
554 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530555 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530556
557 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530558 YangModule yangNode = (YangModule) selfNode;
559
janani be18b5342016-07-13 21:06:41 +0530560 assertThat(yangNode.getName(), is("Test"));
561
562 YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
563 ListIterator<YangLeafList> leafListListIterator;
564 YangLeafList leafListInfo;
565
566 leafListListIterator = containerParent.getListOfLeafList().listIterator();
567 leafListInfo = leafListListIterator.next();
568
569 // Check whether the information in the leaf is correct.
570 assertThat(leafListInfo.getName(), is("name"));
571 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
572 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
573 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
574
575 // Check whether leafref type got resolved.
576 assertThat(leafref.getResolvableStatus(),
577 is(ResolvableStatus.RESOLVED));
578
579 // Check the effective type for the leaf.
580 assertThat(leafref.getEffectiveDataType().getDataType(),
581 is(YangDataTypes.ENUMERATION));
582 }
583
584 /**
585 * Checks the error scenerio when the referred node is not a leaf or leaf-list.
586 */
587 @Test
588 public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
589 throws IOException, ParserException {
590
janani b23ccc312016-07-14 19:35:22 +0530591 thrown.expect(LinkerException.class);
592 thrown.expectMessage(
593 "YANG file error: Unable to find base leaf/leaf-list for given leafref path /networks");
594 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf";
595 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
596 utilManager.parseYangFileInfoSet();
597 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +0530598
janani b23ccc312016-07-14 19:35:22 +0530599 // Create YANG node set
600 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530601
janani b23ccc312016-07-14 19:35:22 +0530602 // Add references to import list.
603 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530604
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530605 updateFilePriority(utilManager.getYangNodeSet());
606
janani b23ccc312016-07-14 19:35:22 +0530607 // Carry out inter-file linking.
608 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530609 }
610
611 /**
612 * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
613 */
614 @Test
615 public void processSelfResolutionWhenLeafrefInTypedefReferToContainer()
616 throws IOException, ParserException {
janani b23ccc312016-07-14 19:35:22 +0530617 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedef";
618 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
619 utilManager.parseYangFileInfoSet();
620 utilManager.createYangNodeSet();
621 YangNode selfNode = null;
622 // Create YANG node set
623 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530624
janani b23ccc312016-07-14 19:35:22 +0530625 // Add references to import list.
626 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530627
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530628 updateFilePriority(utilManager.getYangNodeSet());
629
janani b23ccc312016-07-14 19:35:22 +0530630 // Carry out inter-file linking.
631 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
632
633 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
634
635 YangNode rootNode = yangNodeIterator.next();
636
637 if (rootNode.getName().equals("ietf-network")) {
638 selfNode = rootNode;
639 }
janani be18b5342016-07-13 21:06:41 +0530640 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530641 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530642
643 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530644 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530645
646 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530647 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530648 assertThat(yangNode.getName(), is("ietf-network"));
649
650 YangContainer yangContainer = (YangContainer) yangNode.getChild();
651 ListIterator<YangLeaf> leafIterator;
652 YangLeaf leafInfo;
653 leafIterator = yangContainer.getListOfLeaf().listIterator();
654 leafInfo = leafIterator.next();
655
656 // Check whether the information in the leaf is correct under grouping.
657 assertThat(leafInfo.getName(), is("network-id"));
658 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
659
660 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
661
662 // Check whether leafref type got resolved.
663 assertThat(leafref.getResolvableStatus(),
664 is(ResolvableStatus.RESOLVED));
665
666 // Check the effective type for the leaf.
667 assertThat(leafref.getEffectiveDataType().getDataType(),
668 is(YangDataTypes.UINT8));
669 }
670
671 /**
672 * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
673 */
674 @Test
675 public void processSelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc()
676 throws IOException, ParserException {
677
janani b23ccc312016-07-14 19:35:22 +0530678 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist";
679 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
680 utilManager.parseYangFileInfoSet();
681 utilManager.createYangNodeSet();
682 YangNode selfNode = null;
683 // Create YANG node set
684 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530685
janani b23ccc312016-07-14 19:35:22 +0530686 // Add references to import list.
687 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
688
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530689 updateFilePriority(utilManager.getYangNodeSet());
690
janani b23ccc312016-07-14 19:35:22 +0530691 // Carry out inter-file linking.
692 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
693
694 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
695
696 YangNode rootNode = yangNodeIterator.next();
697
698 if (rootNode.getName().equals("ietf-network")) {
699 selfNode = rootNode;
700 }
janani be18b5342016-07-13 21:06:41 +0530701 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530702 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530703
704 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530705 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530706
707 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530708 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530709 assertThat(yangNode.getName(), is("ietf-network"));
710
711 YangInput yangInput = (YangInput) yangNode.getChild().getChild();
712
713 ListIterator<YangLeafList> leafListIterator;
714 YangLeafList yangLeafListInfo;
715 leafListIterator = yangInput.getListOfLeafList().listIterator();
716 yangLeafListInfo = leafListIterator.next();
717
718 // Check whether the information in the leaf is correct under grouping.
719 assertThat(yangLeafListInfo.getName(), is("network-id"));
720 assertThat(yangLeafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
721
722 YangLeafRef leafref = (YangLeafRef) (yangLeafListInfo.getDataType().getDataTypeExtendedInfo());
723
724 // Check whether leafref type got resolved.
725 assertThat(leafref.getResolvableStatus(),
726 is(ResolvableStatus.RESOLVED));
727
728 // Check the effective type for the leaf.
729 assertThat(leafref.getEffectiveDataType().getDataType(),
730 is(YangDataTypes.UINT8));
731 }
732
733 /**
734 * Checks self resolution when leafref of leaf-list under module refers to invalid node.
735 * Inter file linking also has to be done to know the error message.
736 */
737 @Test
738 public void processSelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
739 throws IOException, ParserException {
740
janani b23ccc312016-07-14 19:35:22 +0530741 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef";
742 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
743 utilManager.parseYangFileInfoSet();
744 utilManager.createYangNodeSet();
745 YangNode selfNode = null;
746 // Create YANG node set
747 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
748
749 // Add references to import list.
750 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
751
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530752 updateFilePriority(utilManager.getYangNodeSet());
753
janani b23ccc312016-07-14 19:35:22 +0530754 // Carry out inter-file linking.
755 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
756
757 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
758
759 YangNode rootNode = yangNodeIterator.next();
760
761 if (rootNode.getName().equals("Test")) {
762 selfNode = rootNode;
763 }
janani be18b5342016-07-13 21:06:41 +0530764 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530765 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530766
767 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530768 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530769
770 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530771 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530772 assertThat(yangNode.getName(), is("Test"));
773
774 YangContainer yangContainer = (YangContainer) yangNode.getChild().getChild().getChild().getNextSibling();
775
776 ListIterator<YangLeaf> leafIterator;
777 YangLeaf yangLeafInfo;
778 leafIterator = yangContainer.getListOfLeaf().listIterator();
779 yangLeafInfo = leafIterator.next();
780
781 // Check whether the information in the leaf is correct under grouping.
782 assertThat(yangLeafInfo.getName(), is("interval"));
783 assertThat(yangLeafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
784
785 YangLeafRef leafref = (YangLeafRef) (yangLeafInfo.getDataType().getDataTypeExtendedInfo());
786
787 // Check whether leafref type got resolved.
788 assertThat(leafref.getResolvableStatus(),
789 is(ResolvableStatus.RESOLVED));
790
791 // Check the effective type for the leaf.
792 assertThat(leafref.getEffectiveDataType().getDataType(),
793 is(YangDataTypes.ENUMERATION));
794 }
795
796 /**
797 * Checks self resolution when grouping and uses are siblings.
798 * Grouping followed by uses.
799 */
800 @Test
801 public void processSelfResolutionWhenLeafrefRefersAnotherLeafref()
802 throws IOException, ParserException {
803
janani b23ccc312016-07-14 19:35:22 +0530804 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafref";
805 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
806 utilManager.parseYangFileInfoSet();
807 utilManager.createYangNodeSet();
808 YangNode selfNode = null;
809 // Create YANG node set
810 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
811
812 // Add references to import list.
813 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
814
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530815 updateFilePriority(utilManager.getYangNodeSet());
816
janani b23ccc312016-07-14 19:35:22 +0530817 // Carry out inter-file linking.
818 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
819
820 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
821
822 YangNode rootNode = yangNodeIterator.next();
823
824 if (rootNode.getName().equals("ietf-network")) {
825 selfNode = rootNode;
826 }
janani be18b5342016-07-13 21:06:41 +0530827 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530828 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530829
830 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530831 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530832
833 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530834 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530835 assertThat(yangNode.getName(), is("ietf-network"));
836
837 ListIterator<YangLeaf> leafIterator;
838 YangLeaf leafInfo;
839
840 //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
841 leafIterator = yangNode.getListOfLeaf().listIterator();
842 leafInfo = leafIterator.next();
843
844 // Check whether the information in the leaf is correct under grouping.
845 assertThat(leafInfo.getName(), is("network-ref"));
846 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
847 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
848 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
849
850 assertThat(leafref.getResolvableStatus(),
851 is(ResolvableStatus.RESOLVED));
852
853 assertThat(leafref.getEffectiveDataType().getDataType(),
854 is(YangDataTypes.UINT8));
855 }
856
857 /**
858 * Checks self resolution when leafref refers to many other leafref.
859 */
860 @Test
861 public void processSelfResolutionWhenLeafrefReferToMultipleLeafref()
862 throws IOException, ParserException {
863
janani b23ccc312016-07-14 19:35:22 +0530864 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultileafref";
865 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
866 utilManager.parseYangFileInfoSet();
867 utilManager.createYangNodeSet();
868 YangNode selfNode = null;
869 // Create YANG node set
870 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
871
872 // Add references to import list.
873 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
874
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530875 updateFilePriority(utilManager.getYangNodeSet());
876
janani b23ccc312016-07-14 19:35:22 +0530877 // Carry out inter-file linking.
878 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
879
880 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
881
882 YangNode rootNode = yangNodeIterator.next();
883
884 if (rootNode.getName().equals("Test")) {
885 selfNode = rootNode;
886 }
janani be18b5342016-07-13 21:06:41 +0530887 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530888 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530889
890 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530891 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530892
893 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530894 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530895 assertThat(yangNode.getName(), is("Test"));
896
897 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
898 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
899
900 ListIterator<YangLeaf> leafIterator;
901 YangLeaf leafInfo;
902
903 leafIterator = containerInList.getListOfLeaf().listIterator();
904 leafInfo = leafIterator.next();
905
906 // Check whether the information in the leaf is correct under grouping.
907 assertThat(leafInfo.getName(), is("remove"));
908 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
909 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
910 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
911
912 assertThat(leafref.getResolvableStatus(),
913 is(ResolvableStatus.RESOLVED));
914
915 assertThat(leafref.getEffectiveDataType().getDataType(),
916 is(YangDataTypes.ENUMERATION));
917 }
918
919 /**
920 * Checks self resolution when grouping and uses are siblings.
921 * Grouping followed by uses.
922 */
923 @Test
924 public void processSelfResolutionWhenLeafrefRefersAnotherDerivedType()
925 throws IOException, ParserException {
926
janani b23ccc312016-07-14 19:35:22 +0530927 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoderivedtype";
928 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
929 utilManager.parseYangFileInfoSet();
930 utilManager.createYangNodeSet();
931 YangNode selfNode = null;
932 // Create YANG node set
933 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
934
935 // Add references to import list.
936 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
937
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530938 updateFilePriority(utilManager.getYangNodeSet());
939
janani b23ccc312016-07-14 19:35:22 +0530940 // Carry out inter-file linking.
941 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
942
943 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
944
945 YangNode rootNode = yangNodeIterator.next();
946
947 if (rootNode.getName().equals("ietf-network")) {
948 selfNode = rootNode;
949 }
janani be18b5342016-07-13 21:06:41 +0530950 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530951 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530952
953 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530954 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530955
956 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530957 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530958 assertThat(yangNode.getName(), is("ietf-network"));
959
960 ListIterator<YangLeaf> leafIterator;
961 YangLeaf leafInfo;
962
963 //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
964 leafIterator = yangNode.getListOfLeaf().listIterator();
965 leafInfo = leafIterator.next();
966
967 // Check whether the information in the leaf is correct under grouping.
968 assertThat(leafInfo.getName(), is("network-ref"));
969 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
970 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
971 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
972
973 assertThat(leafref.getResolvableStatus(),
974 is(ResolvableStatus.RESOLVED));
975
976 assertThat(leafref.getEffectiveDataType().getDataType(),
977 is(YangDataTypes.DERIVED));
978 }
979
980 /**
981 * Checks self resolution when leafref refers to many other leafref.
982 */
983 @Test
984 public void processSelfResolutionWhenLeafrefReferToMultipleTypedef()
985 throws IOException, ParserException {
986
janani b23ccc312016-07-14 19:35:22 +0530987 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultitypedef";
988 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
989 utilManager.parseYangFileInfoSet();
990 utilManager.createYangNodeSet();
991 YangNode selfNode = null;
992 // Create YANG node set
993 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
994
995 // Add references to import list.
996 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
997
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530998 updateFilePriority(utilManager.getYangNodeSet());
999
janani b23ccc312016-07-14 19:35:22 +05301000 // Carry out inter-file linking.
1001 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1002
1003 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1004
1005 YangNode rootNode = yangNodeIterator.next();
1006
1007 if (rootNode.getName().equals("Test")) {
1008 selfNode = rootNode;
1009 }
janani be18b5342016-07-13 21:06:41 +05301010 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301011 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301012
1013 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301014 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301015
1016 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301017 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301018 assertThat(yangNode.getName(), is("Test"));
1019
1020 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1021 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1022
1023 ListIterator<YangLeaf> leafIterator;
1024 YangLeaf leafInfo;
1025
1026 leafIterator = containerInList.getListOfLeaf().listIterator();
1027 leafInfo = leafIterator.next();
1028
1029 // Check whether the information in the leaf is correct under grouping.
1030 assertThat(leafInfo.getName(), is("remove"));
1031 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1032 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1033 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1034
1035 assertThat(leafref.getResolvableStatus(),
1036 is(ResolvableStatus.RESOLVED));
1037
1038 assertThat(leafref.getEffectiveDataType().getDataType(),
1039 is(YangDataTypes.DERIVED));
1040 }
1041
1042 /**
1043 * Checks self resolution when leafref refers to many other leaf with derived type
1044 * which in turn referring to another leaf.
1045 */
1046 @Test
1047 public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref()
1048 throws IOException, ParserException {
1049
janani b23ccc312016-07-14 19:35:22 +05301050 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref";
1051 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1052 utilManager.parseYangFileInfoSet();
1053 utilManager.createYangNodeSet();
1054 YangNode selfNode = null;
1055 // Create YANG node set
1056 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1057
1058 // Add references to import list.
1059 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1060
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301061 updateFilePriority(utilManager.getYangNodeSet());
1062
janani b23ccc312016-07-14 19:35:22 +05301063 // Carry out inter-file linking.
1064 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1065
1066 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1067
1068 YangNode rootNode = yangNodeIterator.next();
1069
1070 if (rootNode.getName().equals("Test")) {
1071 selfNode = rootNode;
1072 }
janani be18b5342016-07-13 21:06:41 +05301073 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301074 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301075
1076 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301077 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301078
1079 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301080 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301081 assertThat(yangNode.getName(), is("Test"));
1082
1083 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1084 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1085
1086 ListIterator<YangLeaf> leafIterator;
1087 YangLeaf leafInfo;
1088
1089 leafIterator = containerInList.getListOfLeaf().listIterator();
1090 leafInfo = leafIterator.next();
1091
1092 // Check whether the information in the leaf is correct under grouping.
1093 assertThat(leafInfo.getName(), is("remove"));
1094 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1095 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1096 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1097
1098 assertThat(leafref.getResolvableStatus(),
1099 is(ResolvableStatus.RESOLVED));
1100
1101 assertThat(leafref.getEffectiveDataType().getDataType(),
1102 is(YangDataTypes.ENUMERATION));
1103 }
1104
1105 /**
1106 * Checks self resolution when leafref under module refers to leaf in container with relative path.
1107 */
1108 @Test
1109 public void processSelfResolutionWhenLeafrefReferToContainerLeafRelPath()
1110 throws IOException, ParserException {
1111
janani b23ccc312016-07-14 19:35:22 +05301112 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref";
1113 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1114 utilManager.parseYangFileInfoSet();
1115 utilManager.createYangNodeSet();
1116 YangNode selfNode = null;
1117 // Create YANG node set
1118 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301119
janani b23ccc312016-07-14 19:35:22 +05301120 // Add references to import list.
1121 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1122
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301123 updateFilePriority(utilManager.getYangNodeSet());
1124
janani b23ccc312016-07-14 19:35:22 +05301125 // Carry out inter-file linking.
1126 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1127
1128 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1129
1130 YangNode rootNode = yangNodeIterator.next();
1131
1132 if (rootNode.getName().equals("ietf-network")) {
1133 selfNode = rootNode;
1134 }
janani be18b5342016-07-13 21:06:41 +05301135 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301136 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301137
1138 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301139 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301140
1141 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301142 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301143 assertThat(yangNode.getName(), is("ietf-network"));
1144
1145 ListIterator<YangLeaf> leafIterator;
1146 YangLeaf leafInfo;
1147
1148 leafIterator = yangNode.getListOfLeaf().listIterator();
1149 leafInfo = leafIterator.next();
1150
1151 // Check whether the information in the leaf is correct.
1152 assertThat(leafInfo.getName(), is("network-ref"));
1153 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1154 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1155 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1156
1157 // Check whether leafref type got resolved.
1158 assertThat(leafref.getResolvableStatus(),
1159 is(ResolvableStatus.RESOLVED));
1160
1161 // Check the effective type for the leaf.
1162 assertThat(leafref.getEffectiveDataType().getDataType(),
1163 is(YangDataTypes.UINT8));
1164 }
1165
1166 /**
1167 * Checks self resolution when leafref under module refers to grouping rpc with input as name.
1168 * Rpc has input child also. So here the node search must be done by taking input node using relative path.
1169 */
janani b23ccc312016-07-14 19:35:22 +05301170 @Ignore
janani be18b5342016-07-13 21:06:41 +05301171 public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath()
1172 throws IOException, ParserException {
1173
janani b23ccc312016-07-14 19:35:22 +05301174 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc";
1175 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1176 utilManager.parseYangFileInfoSet();
1177 utilManager.createYangNodeSet();
1178 YangNode selfNode = null;
1179 // Create YANG node set
1180 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301181
janani b23ccc312016-07-14 19:35:22 +05301182 // Add references to import list.
1183 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1184
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301185 updateFilePriority(utilManager.getYangNodeSet());
1186
janani b23ccc312016-07-14 19:35:22 +05301187 // Carry out inter-file linking.
1188 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1189
1190 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1191
1192 YangNode rootNode = yangNodeIterator.next();
1193
1194 if (rootNode.getName().equals("ietf-network")) {
1195 selfNode = rootNode;
1196 }
janani be18b5342016-07-13 21:06:41 +05301197 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301198 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301199
1200 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301201 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301202
1203 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301204 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301205 assertThat(yangNode.getName(), is("ietf-network"));
1206
1207 ListIterator<YangLeaf> leafIterator;
1208 YangLeaf leafInfo;
1209
1210 leafIterator = yangNode.getListOfLeaf().listIterator();
1211 leafInfo = leafIterator.next();
1212
1213 // Check whether the information in the leaf is correct.
1214 assertThat(leafInfo.getName(), is("network-ref"));
1215 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1216 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1217 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1218
1219 // Check whether leafref type got resolved.
1220 assertThat(leafref.getResolvableStatus(),
1221 is(ResolvableStatus.RESOLVED));
1222
1223 // Check the effective type for the leaf.
1224 assertThat(leafref.getEffectiveDataType().getDataType(),
1225 is(YangDataTypes.UINT8));
1226 }
1227
1228 /**
1229 * Checks self resolution when leafref under module refers to invalid root node with relative path.
1230 */
1231 @Test
1232 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath()
1233 throws IOException, ParserException {
1234
1235 thrown.expect(LinkerException.class);
1236 thrown.expectMessage(
janani b23ccc312016-07-14 19:35:22 +05301237 "YANG file error: The target node, in the leafref path ../../../define/network-id, is invalid.");
1238 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess";
1239 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1240 utilManager.parseYangFileInfoSet();
1241 utilManager.createYangNodeSet();
1242
1243 // Create YANG node set
1244 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1245
1246 // Add references to import list.
1247 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1248
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301249 updateFilePriority(utilManager.getYangNodeSet());
1250
janani b23ccc312016-07-14 19:35:22 +05301251 // Carry out inter-file linking.
1252 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301253 }
1254
1255 /**
1256 * Checks self resolution when leafref under module refers to invalid node.
1257 * Inter file linking also has to be done to know the error message with relative path.
1258 */
1259 @Test
1260 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath()
1261 throws IOException, ParserException {
1262
janani be18b5342016-07-13 21:06:41 +05301263
janani b23ccc312016-07-14 19:35:22 +05301264 thrown.expect(LinkerException.class);
1265 thrown.expectMessage(
1266 "YANG file error: Unable to find base leaf/leaf-list for given leafref path ../define/network-id");
1267 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidnode";
1268 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1269 utilManager.parseYangFileInfoSet();
1270 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +05301271
janani b23ccc312016-07-14 19:35:22 +05301272 // Create YANG node set
1273 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301274
janani b23ccc312016-07-14 19:35:22 +05301275 // Add references to import list.
1276 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301277
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301278 updateFilePriority(utilManager.getYangNodeSet());
1279
janani b23ccc312016-07-14 19:35:22 +05301280 //Carry out inter-file linking.
1281 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301282 }
1283
1284 /**
1285 * Checks self resolution when leafref of leaf-list under module refers to leaf in container with relative path.
1286 */
1287 @Test
1288 public void processSelfResolutionWhenLeafrefInTypedefReferToContainerRelPath()
1289 throws IOException, ParserException {
1290
janani b23ccc312016-07-14 19:35:22 +05301291 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef";
1292 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1293 utilManager.parseYangFileInfoSet();
1294 utilManager.createYangNodeSet();
1295 YangNode selfNode = null;
1296 // Create YANG node set
1297 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301298
janani b23ccc312016-07-14 19:35:22 +05301299 // Add references to import list.
1300 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1301
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301302 updateFilePriority(utilManager.getYangNodeSet());
1303
janani b23ccc312016-07-14 19:35:22 +05301304 // Carry out inter-file linking.
1305 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1306
1307 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1308
1309 YangNode rootNode = yangNodeIterator.next();
1310
1311 if (rootNode.getName().equals("ietf-network")) {
1312 selfNode = rootNode;
1313 }
janani be18b5342016-07-13 21:06:41 +05301314 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301315 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301316
1317 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301318 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301319
1320 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301321 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301322 assertThat(yangNode.getName(), is("ietf-network"));
1323 ListIterator<YangLeaf> leafIterator;
1324 YangLeaf leafInfo;
1325 YangContainer yangContainer = (YangContainer) yangNode.getChild();
1326 leafIterator = yangContainer.getListOfLeaf().listIterator();
1327 leafInfo = leafIterator.next();
1328
1329 // Check whether the information in the leaf is correct under grouping.
1330 assertThat(leafInfo.getName(), is("network-id"));
1331 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1332
1333 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1334
1335 // Check whether leafref type got resolved.
1336 assertThat(leafref.getResolvableStatus(),
1337 is(ResolvableStatus.RESOLVED));
1338
1339 // Check the effective type for the leaf.
1340 assertThat(leafref.getEffectiveDataType().getDataType(),
1341 is(YangDataTypes.UINT8));
1342 }
1343
1344 /**
1345 * Checks self resolution when leafref refers to many other leafref with relative path.
1346 */
1347 @Test
1348 public void processSelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath()
1349 throws IOException, ParserException {
1350
janani b23ccc312016-07-14 19:35:22 +05301351 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref";
1352 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1353 utilManager.parseYangFileInfoSet();
1354 utilManager.createYangNodeSet();
1355 YangNode selfNode = null;
1356 // Create YANG node set
1357 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1358
1359 // Add references to import list.
1360 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1361
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301362 updateFilePriority(utilManager.getYangNodeSet());
1363
janani b23ccc312016-07-14 19:35:22 +05301364 // Carry out inter-file linking.
1365 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1366
1367 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1368
1369 YangNode rootNode = yangNodeIterator.next();
1370
1371 if (rootNode.getName().equals("Test")) {
1372 selfNode = rootNode;
1373 }
janani be18b5342016-07-13 21:06:41 +05301374 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301375 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301376
1377 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301378 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301379
1380 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301381 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301382 assertThat(yangNode.getName(), is("Test"));
1383
1384 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1385 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1386
1387 ListIterator<YangLeaf> leafIterator;
1388 YangLeaf leafInfo;
1389
1390 leafIterator = containerInList.getListOfLeaf().listIterator();
1391 leafInfo = leafIterator.next();
1392
1393 // Check whether the information in the leaf is correct under grouping.
1394 assertThat(leafInfo.getName(), is("remove"));
1395 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1396 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1397 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1398
1399 assertThat(leafref.getResolvableStatus(),
1400 is(ResolvableStatus.RESOLVED));
1401
1402 assertThat(leafref.getEffectiveDataType().getDataType(),
1403 is(YangDataTypes.ENUMERATION));
1404 }
1405
1406 /**
1407 * Checks self resolution when leafref refers to many other leaf with derived type
1408 * which in turn referring to another leaf with relative type.
1409 */
1410 @Test
1411 public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType()
1412 throws IOException, ParserException {
1413
janani b23ccc312016-07-14 19:35:22 +05301414 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef";
1415 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1416 utilManager.parseYangFileInfoSet();
1417 utilManager.createYangNodeSet();
1418 YangNode selfNode = null;
1419 // Create YANG node set
1420 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1421
1422 // Add references to import list.
1423 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1424
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301425 updateFilePriority(utilManager.getYangNodeSet());
1426
janani b23ccc312016-07-14 19:35:22 +05301427 // Carry out inter-file linking.
1428 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1429
1430 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1431
1432 YangNode rootNode = yangNodeIterator.next();
1433
1434 if (rootNode.getName().equals("Test")) {
1435 selfNode = rootNode;
1436 }
janani be18b5342016-07-13 21:06:41 +05301437 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301438 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301439
1440 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301441 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301442
1443 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301444 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301445 assertThat(yangNode.getName(), is("Test"));
1446
1447 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1448 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1449
1450 ListIterator<YangLeaf> leafIterator;
1451 YangLeaf leafInfo;
1452
1453 leafIterator = containerInList.getListOfLeaf().listIterator();
1454 leafInfo = leafIterator.next();
1455
1456 // Check whether the information in the leaf is correct under grouping.
1457 assertThat(leafInfo.getName(), is("remove"));
1458 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1459 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1460 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1461
1462 assertThat(leafref.getResolvableStatus(),
1463 is(ResolvableStatus.RESOLVED));
1464
1465 assertThat(leafref.getEffectiveDataType().getDataType(),
1466 is(YangDataTypes.ENUMERATION));
1467 }
1468
1469 /**
1470 * Checks the valid scenerios of path argument having proper setters.
1471 */
1472 @Test
1473 public void processPathArgumentStatement()
1474 throws IOException, ParserException {
1475
janani b23ccc312016-07-14 19:35:22 +05301476 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/pathlistener";
1477 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1478 utilManager.parseYangFileInfoSet();
1479 utilManager.createYangNodeSet();
1480 YangNode selfNode = null;
1481 // Create YANG node set
1482 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1483
1484 // Add references to import list.
1485 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1486
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301487 updateFilePriority(utilManager.getYangNodeSet());
1488
janani b23ccc312016-07-14 19:35:22 +05301489 // Carry out inter-file linking.
1490 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1491
1492 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1493
1494 YangNode rootNode = yangNodeIterator.next();
1495
1496 if (rootNode.getName().equals("PathListener")) {
1497 selfNode = rootNode;
1498 }
janani be18b5342016-07-13 21:06:41 +05301499 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301500 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301501
1502 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301503 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301504
1505 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301506 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301507 assertThat(yangNode.getName(), is("PathListener"));
1508 YangList listInModule = (YangList) yangNode.getChild();
1509
1510 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1511 ListIterator<YangLeaf> leafIterator;
1512 YangLeaf leafInfo;
1513
1514 YangLeaf leafNameInList = listInModule.getListOfLeaf().listIterator().next();
1515
1516 leafIterator = containerInModule.getListOfLeaf().listIterator();
1517 leafInfo = leafIterator.next();
1518
1519 // Check whether the information in the leaf is correct under grouping.
1520 assertThat(leafInfo.getName(), is("ifname"));
1521 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1522 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1523 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
janani b23ccc312016-07-14 19:35:22 +05301524 assertThat(leafref.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
janani be18b5342016-07-13 21:06:41 +05301525
1526 YangRelativePath relativePathForName = leafref.getRelativePath();
1527 assertThat(relativePathForName.getAncestorNodeCount(), is(2));
1528 List<YangAtomicPath> absPathForName = relativePathForName.getAtomicPathList();
1529 Iterator<YangAtomicPath> absPathIteratorForName = absPathForName.listIterator();
1530 YangAtomicPath abspathForName = absPathIteratorForName.next();
1531 assertThat(abspathForName.getNodeIdentifier().getName(), is("interface"));
1532 assertThat(abspathForName.getNodeIdentifier().getPrefix(), is("test"));
1533 YangAtomicPath abspath1 = absPathIteratorForName.next();
1534 assertThat(abspath1.getNodeIdentifier().getName(), is("name"));
1535 assertThat(abspath1.getNodeIdentifier().getPrefix(), is("test"));
1536
1537 YangLeaf leafInfo1 = leafIterator.next();
1538 // Check whether the information in the leaf is correct under grouping.
1539 assertThat(leafInfo1.getName(), is("status"));
1540 assertThat(leafInfo1.getDataType().getDataTypeName(), is("leafref"));
1541 assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1542
1543 YangLeafRef leafref1 = (YangLeafRef) leafInfo1.getDataType().getDataTypeExtendedInfo();
1544 assertThat(leafref1.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
1545
1546 List<YangAtomicPath> absolutePathList = leafref1.getAtomicPath();
1547 Iterator<YangAtomicPath> absPathIterator = absolutePathList.listIterator();
1548 YangAtomicPath abspath = absPathIterator.next();
1549 assertThat(abspath.getNodeIdentifier().getName(), is("interface"));
1550 assertThat(abspath.getNodeIdentifier().getPrefix(), is("test"));
1551
1552 List<YangPathPredicate> pathPredicateList = abspath.getPathPredicatesList();
1553 Iterator<YangPathPredicate> pathPredicate = pathPredicateList.listIterator();
1554 YangPathPredicate pathPredicate1 = pathPredicate.next();
1555 assertThat(pathPredicate1.getNodeIdentifier().getName(), is("name"));
1556 assertThat(pathPredicate1.getNodeIdentifier().getPrefix(), nullValue());
1557 assertThat(pathPredicate1.getRightRelativePath().getAncestorNodeCount(), is(1));
1558 assertThat(pathPredicate1.getPathOperator(), is(YangPathOperator.EQUALTO));
1559 assertThat(pathPredicate1.getRightRelativePath().getAtomicPathList().listIterator().next().getNodeIdentifier()
1560 .getName(), is("ifname"));
janani b23ccc312016-07-14 19:35:22 +05301561 //TODO : Fill the path predicates
1562// assertThat(pathPredicate1.getLeftAxisNode(), is(leafNameInList));
1563// assertThat(pathPredicate1.getRightAxisNode(), is(leafInfo));
1564 }
janani be18b5342016-07-13 21:06:41 +05301565
janani b23ccc312016-07-14 19:35:22 +05301566 /**
1567 * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
1568 */
1569 @Test
1570 public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
1571 throws IOException, ParserException {
1572
1573 String searchDir = "src/test/resources/leafreflinker/interfile" +
1574 "/interfileleafrefreferstomultipleleafrefinmultiplefiles";
1575 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1576 utilManager.parseYangFileInfoSet();
1577 utilManager.createYangNodeSet();
1578 YangNode refNode1 = null;
1579 YangNode refNode2 = null;
1580 YangNode selfNode = null;
1581
1582 // Create YANG node set
1583 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1584
1585 // Add references to import list.
1586 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1587
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301588 updateFilePriority(utilManager.getYangNodeSet());
1589
janani b23ccc312016-07-14 19:35:22 +05301590 // Carry out inter-file linking.
1591 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1592
1593 for (YangNode rootNode : utilManager.getYangNodeSet()) {
1594 if (rootNode.getName().equals("ietf-network-topology")) {
1595 selfNode = rootNode;
1596 } else if (rootNode.getName().equals("ietf-network")) {
1597 refNode1 = rootNode;
1598 } else {
1599 refNode2 = rootNode;
1600 }
1601 }
1602 // Check whether the data model tree returned is of type module.
1603 assertThat(selfNode instanceof YangModule, is(true));
1604
1605 // Check whether the node type is set properly to module.
1606 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
1607
1608 // Check whether the module name is set correctly.
1609 YangModule yangNode = (YangModule) selfNode;
1610 assertThat(yangNode.getName(), is("ietf-network-topology"));
1611
1612 YangList list = (YangList) yangNode.getChild().getChild();
1613 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
1614 YangLeaf leafInfo = leafIterator.next();
1615
1616 assertThat(leafInfo.getName(), is("link-tp"));
1617 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1618 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
1619
1620 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1621
1622 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
1623 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
1624 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
1625
1626 assertThat(leafref.getEffectiveDataType().getDataType(),
1627 is(YangDataTypes.STRING));
1628 }
1629
1630
1631 /**
1632 * Checks addition of if-feature list to leafref.
1633 */
1634 @Test
1635 public void processSelfFileLinkingWithFeatureReferredByLeafref()
1636 throws IOException, ParserException {
1637
1638 String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature";
1639 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1640 utilManager.parseYangFileInfoSet();
1641 utilManager.createYangNodeSet();
1642 YangNode selfNode = null;
1643 // Create YANG node set
1644 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1645
1646 // Add references to import list.
1647 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1648
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301649 updateFilePriority(utilManager.getYangNodeSet());
1650
janani b23ccc312016-07-14 19:35:22 +05301651 // Carry out inter-file linking.
1652 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1653
1654 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1655
1656 YangNode rootNode = yangNodeIterator.next();
1657
1658 if (rootNode.getName().equals("syslog")) {
1659 selfNode = rootNode;
1660 }
1661 // Check whether the data model tree returned is of type module.
1662 assertThat((selfNode instanceof YangModule), is(true));
1663
1664 // Check whether the node type is set properly to module.
1665 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1666
1667 // Check whether the module name is set correctly.
1668 YangModule yangNode = (YangModule) selfNode;
1669 assertThat(yangNode.getName(), is("syslog"));
1670
1671 List<YangFeature> featureList = yangNode.getFeatureList();
1672 YangFeature feature = featureList.iterator().next();
1673 assertThat(feature.getName(), is("local-storage"));
1674
1675 YangContainer container = (YangContainer) yangNode.getChild();
1676 assertThat(container.getName(), is("speed"));
1677
1678 List<YangLeaf> listOfLeaf = container.getListOfLeaf();
1679 YangLeaf leaf = listOfLeaf.iterator().next();
1680 assertThat(leaf.getName(), is("local-storage-limit"));
1681
1682 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
1683 YangIfFeature ifFeature = ifFeatureList.iterator().next();
1684 assertThat(ifFeature.getName().getName(), is("local-storage"));
1685 assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1686
1687 ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
1688 YangLeaf yangLeaf = listOfLeafInModule.next();
1689 assertThat(yangLeaf.getName(), is("storage-value"));
1690
1691 YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
1692
1693 assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
1694
1695 List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
1696 YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
1697 assertThat(ifFeatureInLeafref.getName().getName(), is("local-storage"));
1698 assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1699 }
1700
1701 /**
1702 * Checks addition of if-feature list to leafref when referred leaf is again having leafref in it.
1703 */
1704 @Test
1705 public void processSelfFileLinkingWithFeatureReferredByMultiLeafref()
1706 throws IOException, ParserException {
1707
1708 String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref";
1709 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1710 utilManager.parseYangFileInfoSet();
1711 utilManager.createYangNodeSet();
1712 YangNode selfNode = null;
1713 // Create YANG node set
1714 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1715
1716 // Add references to import list.
1717 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1718
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301719 updateFilePriority(utilManager.getYangNodeSet());
1720
janani b23ccc312016-07-14 19:35:22 +05301721 // Carry out inter-file linking.
1722 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1723
1724 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1725
1726 YangNode rootNode = yangNodeIterator.next();
1727
1728 if (rootNode.getName().equals("syslog")) {
1729 selfNode = rootNode;
1730 }
1731 // Check whether the data model tree returned is of type module.
1732 assertThat((selfNode instanceof YangModule), is(true));
1733
1734 // Check whether the node type is set properly to module.
1735 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1736
1737 // Check whether the module name is set correctly.
1738 YangModule yangNode = (YangModule) selfNode;
1739 assertThat(yangNode.getName(), is("syslog"));
1740
1741 List<YangFeature> featureList = yangNode.getFeatureList();
1742 YangFeature feature = featureList.iterator().next();
1743 assertThat(feature.getName(), is("local-storage"));
1744
1745 YangContainer container = (YangContainer) yangNode.getChild();
1746 assertThat(container.getName(), is("speed"));
1747
1748 List<YangLeaf> listOfLeaf = container.getListOfLeaf();
1749 YangLeaf leaf = listOfLeaf.iterator().next();
1750 assertThat(leaf.getName(), is("local-storage-limit"));
1751
1752 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
1753 YangIfFeature ifFeature = ifFeatureList.iterator().next();
1754 assertThat(ifFeature.getName().getName(), is("local-storage"));
1755 assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1756
1757 ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
1758 YangLeaf yangLeaf = listOfLeafInModule.next();
1759 assertThat(yangLeaf.getName(), is("storage-value"));
1760
1761 YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
1762
1763 assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
1764
1765 List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
1766 YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
1767
1768 assertThat(ifFeatureInLeafref.getName().getName(), is("main-storage"));
1769 assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1770
1771 YangIfFeature ifFeatureInLeafref1 = ifFeatureListInLeafref.iterator().next();
1772
1773 assertThat(ifFeatureInLeafref1.getName().getName(), is("main-storage"));
1774 assertThat(ifFeatureInLeafref1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1775 }
1776
1777 /**
1778 * Checks self resolution when leafref in grouping is copied to augment.
1779 */
1780 @Test
1781 public void processSelfResolutionWhenLeafrefInGroupingIsUnderAugment()
1782 throws IOException, ParserException {
1783
1784 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefInAugment";
1785 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1786 utilManager.parseYangFileInfoSet();
1787 utilManager.createYangNodeSet();
1788 YangNode selfNode = null;
1789
1790 // Create YANG node set
1791 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1792
1793 // Add references to import list.
1794 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1795
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301796 updateFilePriority(utilManager.getYangNodeSet());
1797
janani b23ccc312016-07-14 19:35:22 +05301798 // Carry out inter-file linking.
1799 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1800
1801 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1802
1803 YangNode rootNode = yangNodeIterator.next();
1804
1805 if (rootNode.getName().equals("topology")) {
1806 selfNode = rootNode;
1807 }
1808
1809 // Check whether the data model tree returned is of type module.
1810 assertThat((selfNode instanceof YangModule), is(true));
1811
1812 // Check whether the node type is set properly to module.
1813 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1814
1815 // Check whether the module name is set correctly.
1816 YangModule yangNode = (YangModule) selfNode;
1817 assertThat(yangNode.getName(), is("topology"));
1818
1819 ListIterator<YangLeaf> leafIterator;
1820 YangLeaf leafInfo;
1821
1822 YangAugment augment = (YangAugment) yangNode.getChild().getNextSibling();
1823
1824 YangList list = (YangList) augment.getChild().getChild().getChild().getChild().getChild();
1825
1826 leafIterator = list.getListOfLeaf().listIterator();
1827 leafInfo = leafIterator.next();
1828
1829 // Check whether the information in the leaf is correct.
1830 assertThat(leafInfo.getName(), is("src-tp-ref"));
1831 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1832 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1833 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1834
1835 // Check whether leafref type got resolved.
1836 assertThat(leafref.getResolvableStatus(),
1837 is(ResolvableStatus.RESOLVED));
1838
1839 // Check the effective type for the leaf.
1840 assertThat(leafref.getEffectiveDataType().getDataType(),
1841 is(YangDataTypes.UINT8));
1842 }
1843
1844 /**
1845 * Checks self resolution when leafref under grouping's uses.
1846 */
1847 @Test
1848 public void processSelfResolutionWhenLeafrefUnderGroupingUses()
1849 throws IOException, ParserException {
1850
1851 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping";
1852 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1853 utilManager.parseYangFileInfoSet();
1854 utilManager.createYangNodeSet();
1855 YangNode selfNode = null;
1856 YangNode refNode = null;
1857
1858 // Create YANG node set
1859 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1860
1861 // Add references to import list.
1862 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1863
Vidyashree Rama07c26bb2016-07-28 17:33:15 +05301864 updateFilePriority(utilManager.getYangNodeSet());
1865
janani b23ccc312016-07-14 19:35:22 +05301866 // Carry out inter-file linking.
1867 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1868
1869 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1870
1871 YangNode rootNode = yangNodeIterator.next();
1872
1873 if (rootNode.getName().equals("ietf-network")) {
1874 selfNode = rootNode;
1875 refNode = yangNodeIterator.next();
1876 } else {
1877 refNode = rootNode;
1878 selfNode = yangNodeIterator.next();
1879 }
1880
1881 // Check whether the data model tree returned is of type module.
1882 assertThat(selfNode instanceof YangModule, is(true));
1883
1884 // Check whether the node type is set properly to module.
1885 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
1886
1887 // Check whether the module name is set correctly.
1888 YangModule yangNode = (YangModule) selfNode;
1889 assertThat(yangNode.getName(), is("ietf-network"));
1890
1891 // Check whether the module name is set correctly.
1892 YangModule yangNode1 = (YangModule) refNode;
1893 assertThat(yangNode1.getName(), is("network"));
1894
1895 YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
1896 assertThat(yangContainer.getName(), is("fine"));
1897
1898 YangContainer yangContainer1 = (YangContainer) yangContainer.getChild().getNextSibling();
1899 assertThat(yangContainer1.getName(), is("hi"));
1900
1901 ListIterator<YangLeaf> leafIterator;
1902 YangLeaf leafInfo;
1903
1904 leafIterator = yangContainer1.getListOfLeaf().listIterator();
1905 leafInfo = leafIterator.next();
1906
1907 // Check whether the information in the leaf is correct.
1908 assertThat(leafInfo.getName(), is("network-id-ref"));
1909 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1910 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1911 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1912
1913 // Check whether leafref type got resolved.
1914 assertThat(leafref.getResolvableStatus(),
1915 is(ResolvableStatus.RESOLVED));
1916
1917 // Check the effective type for the leaf.
1918 assertThat(leafref.getEffectiveDataType().getDataType(),
1919 is(YangDataTypes.DERIVED));
janani be18b5342016-07-13 21:06:41 +05301920 }
janani bf9819ff2016-08-03 16:40:01 +05301921
1922 /**
1923 * Checks self resolution when leafref under typedef refers to the node where it is used.
1924 */
1925 @Test
1926 public void processSelfResolutionWhenLeafrefInTypedefIsUsedInSameReferredNode()
1927 throws IOException, ParserException {
1928
1929 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedefwithsamereferpath";
1930 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1931 utilManager.parseYangFileInfoSet();
1932 utilManager.createYangNodeSet();
1933 YangNode selfNode = null;
1934
1935 // Create YANG node set
1936 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1937
1938 // Add references to import list.
1939 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1940
1941 updateFilePriority(utilManager.getYangNodeSet());
1942
1943 // Carry out inter-file linking.
1944 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1945
1946 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1947
1948 YangNode rootNode = yangNodeIterator.next();
1949
1950 if (rootNode.getName().equals("typedef")) {
1951 selfNode = rootNode;
1952 }
1953
1954 // Check whether the data model tree returned is of type module.
1955 assertThat((selfNode instanceof YangModule), is(true));
1956
1957 // Check whether the node type is set properly to module.
1958 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1959
1960 // Check whether the module name is set correctly.
1961 YangModule yangNode = (YangModule) selfNode;
1962 assertThat(yangNode.getName(), is("typedef"));
1963
1964 ListIterator<YangLeaf> leafIterator;
1965 YangLeaf leafInfo;
1966
1967 YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling();
1968
1969 leafIterator = yangContainer.getListOfLeaf().listIterator();
1970 leafInfo = leafIterator.next();
1971
1972 // Check whether the information in the leaf is correct.
1973 assertThat(leafInfo.getName(), is("reference"));
1974 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1975 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1976 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1977
1978 // Check whether leafref type got resolved.
1979 assertThat(leafref.getResolvableStatus(),
1980 is(ResolvableStatus.RESOLVED));
1981
1982 // Check the effective type for the leaf.
1983 assertThat(leafref.getEffectiveDataType().getDataType(),
1984 is(YangDataTypes.UINT8));
1985 }
janani be18b5342016-07-13 21:06:41 +05301986}