blob: fb1b523f7d957b67684d97b802c6410d3a5f81fd [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
janani b23ccc312016-07-14 19:35:22 +053019import org.junit.Ignore;
janani be18b5342016-07-13 21:06:41 +053020import org.junit.Rule;
21import org.junit.Test;
22import org.junit.rules.ExpectedException;
23import org.onosproject.yangutils.datamodel.YangAtomicPath;
janani b23ccc312016-07-14 19:35:22 +053024import org.onosproject.yangutils.datamodel.YangAugment;
janani be18b5342016-07-13 21:06:41 +053025import org.onosproject.yangutils.datamodel.YangContainer;
janani b23ccc312016-07-14 19:35:22 +053026import org.onosproject.yangutils.datamodel.YangFeature;
27import org.onosproject.yangutils.datamodel.YangIfFeature;
janani be18b5342016-07-13 21:06:41 +053028import org.onosproject.yangutils.datamodel.YangInput;
29import org.onosproject.yangutils.datamodel.YangLeaf;
30import org.onosproject.yangutils.datamodel.YangLeafList;
31import org.onosproject.yangutils.datamodel.YangLeafRef;
32import org.onosproject.yangutils.datamodel.YangList;
33import org.onosproject.yangutils.datamodel.YangModule;
34import org.onosproject.yangutils.datamodel.YangNode;
35import org.onosproject.yangutils.datamodel.YangNodeType;
36import org.onosproject.yangutils.datamodel.YangPathArgType;
37import org.onosproject.yangutils.datamodel.YangPathOperator;
38import org.onosproject.yangutils.datamodel.YangPathPredicate;
39import org.onosproject.yangutils.datamodel.YangRelativePath;
40import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
janani b23ccc312016-07-14 19:35:22 +053041import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
janani be18b5342016-07-13 21:06:41 +053042import org.onosproject.yangutils.linker.exceptions.LinkerException;
janani b23ccc312016-07-14 19:35:22 +053043import org.onosproject.yangutils.linker.impl.YangLinkerManager;
janani be18b5342016-07-13 21:06:41 +053044import org.onosproject.yangutils.parser.exceptions.ParserException;
45import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
janani b23ccc312016-07-14 19:35:22 +053046import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
47
48import java.io.IOException;
49import java.util.Iterator;
50import java.util.List;
51import java.util.ListIterator;
janani be18b5342016-07-13 21:06:41 +053052
janani be18b5342016-07-13 21:06:41 +053053import static org.hamcrest.MatcherAssert.assertThat;
54import static org.hamcrest.core.Is.is;
55import static org.hamcrest.core.IsNull.nullValue;
janani b23ccc312016-07-14 19:35:22 +053056import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
57import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
58import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
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
91 // Carry out inter-file linking.
92 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
93
94 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
95
96 YangNode rootNode = yangNodeIterator.next();
97
98 if (rootNode.getName().equals("SelfResolutionWhenLeafrefReferToContainerLeaf")) {
99 selfNode = rootNode;
100 }
janani be18b5342016-07-13 21:06:41 +0530101
102 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530103 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530104
105 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530106 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530107
108 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530109 YangModule yangNode = (YangModule) selfNode;
110 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefReferToContainerLeaf"));
janani be18b5342016-07-13 21:06:41 +0530111
112 ListIterator<YangLeaf> leafIterator;
113 YangLeaf leafInfo;
114
115 leafIterator = yangNode.getListOfLeaf().listIterator();
116 leafInfo = leafIterator.next();
117
118 // Check whether the information in the leaf is correct.
119 assertThat(leafInfo.getName(), is("network-ref"));
120 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
121 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
122 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
123
124 // Check whether leafref type got resolved.
125 assertThat(leafref.getResolvableStatus(),
126 is(ResolvableStatus.RESOLVED));
127
128 // Check the effective type for the leaf.
129 assertThat(leafref.getEffectiveDataType().getDataType(),
130 is(YangDataTypes.UINT8));
131 }
132
133 /**
134 * Checks self resolution when leafref under module refers to leaf in input of rpc.
135 */
136 @Test
137 public void processSelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc()
138 throws IOException, ParserException {
139
janani b23ccc312016-07-14 19:35:22 +0530140 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpc";
141 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
142 utilManager.parseYangFileInfoSet();
143 utilManager.createYangNodeSet();
144 YangNode selfNode = null;
145
146 // Create YANG node set
147 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
148
149 // Add references to import list.
150 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
151
152 // Carry out inter-file linking.
153 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
154
155 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
156
157 YangNode rootNode = yangNodeIterator.next();
158
159 if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc")) {
160 selfNode = rootNode;
161 }
janani be18b5342016-07-13 21:06:41 +0530162
163 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530164 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530165
166 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530167 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530168
169 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530170 YangModule yangNode = (YangModule) selfNode;
171 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToLeafInInputOfRpc"));
janani be18b5342016-07-13 21:06:41 +0530172
173 ListIterator<YangLeaf> leafIterator;
174 YangLeaf leafInfo;
175
176 leafIterator = yangNode.getListOfLeaf().listIterator();
177 leafInfo = leafIterator.next();
178
179 // Check whether the information in the leaf is correct.
180 assertThat(leafInfo.getName(), is("network-ref"));
181 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
182 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
183 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
184
185 // Check whether leafref type got resolved.
186 assertThat(leafref.getResolvableStatus(),
187 is(ResolvableStatus.RESOLVED));
188
189 // Check the effective type for the leaf.
190 assertThat(leafref.getEffectiveDataType().getDataType(),
191 is(YangDataTypes.UINT8));
192 }
193
194 /**
195 * Checks self resolution when leafref under module refers to grouping rpc with input as name.
196 * Rpc has input child also. So here the node search must be done by taking input node.
janani b23ccc312016-07-14 19:35:22 +0530197 * TODO: When path has RPC's input but grouping & typedef with the same name occurs.
janani be18b5342016-07-13 21:06:41 +0530198 */
janani b23ccc312016-07-14 19:35:22 +0530199 @Ignore
janani be18b5342016-07-13 21:06:41 +0530200 public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc()
201 throws IOException, ParserException {
202
janani b23ccc312016-07-14 19:35:22 +0530203 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrpcandgrouping";
204 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
205 utilManager.parseYangFileInfoSet();
206 utilManager.createYangNodeSet();
207 YangNode selfNode = null;
208
209 // Create YANG node set
210 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
211
212 // Add references to import list.
213 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
214
215 // Carry out inter-file linking.
216 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
217
218 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
219
220 YangNode rootNode = yangNodeIterator.next();
221
222 if (rootNode.getName().equals("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc")) {
223 selfNode = rootNode;
224 }
janani be18b5342016-07-13 21:06:41 +0530225
226 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530227 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530228
229 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530230 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530231
232 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530233 YangModule yangNode = (YangModule) selfNode;
234 assertThat(yangNode.getName(), is("SelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpc"));
janani be18b5342016-07-13 21:06:41 +0530235
236 ListIterator<YangLeaf> leafIterator;
237 YangLeaf leafInfo;
238
239 leafIterator = yangNode.getListOfLeaf().listIterator();
240 leafInfo = leafIterator.next();
241
242 // Check whether the information in the leaf is correct.
243 assertThat(leafInfo.getName(), is("network-ref"));
244 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
245 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
246 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
247
248 // Check whether leafref type got resolved.
249 assertThat(leafref.getResolvableStatus(),
250 is(ResolvableStatus.RESOLVED));
251
252 // Check the effective type for the leaf.
253 assertThat(leafref.getEffectiveDataType().getDataType(),
254 is(YangDataTypes.UINT8));
255 }
256
257 /**
258 * Checks self resolution when leafref under module refers to grouping under module.
259 * Grouping/typedef cannot be referred.
260 */
261 @Test
262 public void processSelfResolutionWhenLeafrefInModuleReferToGrouping()
263 throws IOException, ParserException {
264
265 thrown.expect(LinkerException.class);
266 thrown.expectMessage(
janani b23ccc312016-07-14 19:35:22 +0530267 "YANG file error: The target node, in the leafref path /networks/network-id, is invalid.");
268
269 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidscenerioforgrouping";
270 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
271 utilManager.parseYangFileInfoSet();
272 utilManager.createYangNodeSet();
273
274 // Create YANG node set
275 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
276
277 // Add references to import list.
278 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
279
280 // Carry out inter-file linking.
281 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530282 }
283
284 /**
285 * Checks self resolution error scenerio where leafref is without path.
286 */
287 @Test
288 public void processSelfResolutionWhenLeafrefDoesntHavePath()
289 throws IOException, ParserException {
290
291 thrown.expect(ParserException.class);
292 thrown.expectMessage(
293 "YANG file error : a type leafref must have one path statement.");
294 YangNode node = manager
295 .getDataModel("src/test/resources/SelfResolutionWhenLeafrefDoesntHavePath.yang");
296 }
297
298 /**
299 * Checks self resolution when leafref under module refers to invalid node.
janani be18b5342016-07-13 21:06:41 +0530300 */
301 @Test
302 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
303 throws IOException, ParserException {
304
janani b23ccc312016-07-14 19:35:22 +0530305 thrown.expect(LinkerException.class);
306 thrown.expectMessage(
307 "YANG file error: Unable to find base leaf/leaf-list for given leafref path /define/network-id");
308 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithinvalidnode";
309 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
310 utilManager.parseYangFileInfoSet();
311 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +0530312
janani b23ccc312016-07-14 19:35:22 +0530313 // Create YANG node set
314 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530315
janani b23ccc312016-07-14 19:35:22 +0530316 // Add references to import list.
317 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530318
janani b23ccc312016-07-14 19:35:22 +0530319 // Carry out inter-file linking.
320 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530321 }
322
323 /**
324 * Checks self resolution when leafref under module refers to invalid node.
325 * Inter file linking also has to be done to know the error message.
326 */
327 @Test
328 public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafIsInModuleWithReferredTypeUnion()
329 throws IOException, ParserException {
330
janani b23ccc312016-07-14 19:35:22 +0530331 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreflinking";
332 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
333 utilManager.parseYangFileInfoSet();
334 utilManager.createYangNodeSet();
335 YangNode selfNode = null;
336
337 // Create YANG node set
338 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
339
340 // Add references to import list.
341 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
342
343 // Carry out inter-file linking.
344 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
345
346 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
347
348 YangNode rootNode = yangNodeIterator.next();
349
350 if (rootNode.getName().equals("Test")) {
351 selfNode = rootNode;
352 }
353
janani be18b5342016-07-13 21:06:41 +0530354 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530355 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530356
357 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530358 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530359
360 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530361 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530362 assertThat(yangNode.getName(), is("Test"));
363
364 YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
365 ListIterator<YangLeaf> leafIterator;
366 YangLeaf leafInfo;
367
368 leafIterator = containerParent.getListOfLeaf().listIterator();
369 leafInfo = leafIterator.next();
370
371 // Check whether the information in the leaf is correct.
372 assertThat(leafInfo.getName(), is("name"));
373 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
374 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
375 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
376
377 // Check whether leafref type got resolved.
378 assertThat(leafref.getResolvableStatus(),
379 is(ResolvableStatus.RESOLVED));
380
381 // Check the effective type for the leaf.
382 assertThat(leafref.getEffectiveDataType().getDataType(),
383 is(YangDataTypes.UNION));
384 }
385
386 /**
387 * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
388 */
389 @Test
390 public void processSelfResolutionWhenLeafrefReferToContainerLeafList()
391 throws IOException, ParserException {
392
janani b23ccc312016-07-14 19:35:22 +0530393 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefreferingtoleaflist";
394 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
395 utilManager.parseYangFileInfoSet();
396 utilManager.createYangNodeSet();
397 YangNode selfNode = null;
398
399 // Create YANG node set
400 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
401
402 // Add references to import list.
403 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
404
405 // Carry out inter-file linking.
406 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
407
408 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
409
410 YangNode rootNode = yangNodeIterator.next();
411
412 if (rootNode.getName().equals("ietf-network")) {
413 selfNode = rootNode;
414 }
janani be18b5342016-07-13 21:06:41 +0530415
416 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530417 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530418
419 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530420 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530421
422 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530423 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530424 assertThat(yangNode.getName(), is("ietf-network"));
425
426 ListIterator<YangLeafList> leafListIterator;
427 YangLeafList leafListInfo;
428
429 leafListIterator = yangNode.getListOfLeafList().listIterator();
430 leafListInfo = leafListIterator.next();
431
432 // Check whether the information in the leaf is correct.
433 assertThat(leafListInfo.getName(), is("network-ref"));
434 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
435 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
436 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
437
438 // Check whether leafref type got resolved.
439 assertThat(leafref.getResolvableStatus(),
440 is(ResolvableStatus.RESOLVED));
441
442 // Check the effective type for the leaf.
443 assertThat(leafref.getEffectiveDataType().getDataType(),
444 is(YangDataTypes.UINT8));
445 }
446
447 /**
448 * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
449 */
450 @Test
451 public void processSelfResolutionWhenLeafrefInModuleReferToLeafListInInputOfRpc()
452 throws IOException, ParserException {
453
janani b23ccc312016-07-14 19:35:22 +0530454 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoinputinrpc";
455 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
456 utilManager.parseYangFileInfoSet();
457 utilManager.createYangNodeSet();
458 YangNode selfNode = null;
janani be18b5342016-07-13 21:06:41 +0530459
janani b23ccc312016-07-14 19:35:22 +0530460 // Create YANG node set
461 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
462
463 // Add references to import list.
464 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
465
466 // Carry out inter-file linking.
467 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
468
469 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
470
471 YangNode rootNode = yangNodeIterator.next();
472
473 if (rootNode.getName().equals("ietf-network")) {
474 selfNode = rootNode;
475 }
janani be18b5342016-07-13 21:06:41 +0530476
477 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530478 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530479
480 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530481 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530482 assertThat(yangNode.getName(), is("ietf-network"));
483
484 ListIterator<YangLeafList> leafListIterator;
485 YangLeafList leafListInfo;
486
487 leafListIterator = yangNode.getListOfLeafList().listIterator();
488 leafListInfo = leafListIterator.next();
489
490 // Check whether the information in the leaf is correct.
491 assertThat(leafListInfo.getName(), is("network-ref"));
492 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
493 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
494 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
495
496 // Check whether leafref type got resolved.
497 assertThat(leafref.getResolvableStatus(),
498 is(ResolvableStatus.RESOLVED));
499
500 // Check the effective type for the leaf.
501 assertThat(leafref.getEffectiveDataType().getDataType(),
502 is(YangDataTypes.UINT8));
503 }
504
505 /**
506 * Checks self resolution when leafref of leaf-list under module refers to invalid node.
507 * Inter file linking also has to be done to know the error message.
508 */
509 @Test
510 public void processSelfResolutionWhenLeafrefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
511 throws IOException, ParserException {
512
janani b23ccc312016-07-14 19:35:22 +0530513 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefwithrefleafderived";
514 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
515 utilManager.parseYangFileInfoSet();
516 utilManager.createYangNodeSet();
517 YangNode selfNode = null;
518
519 // Create YANG node set
520 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
521
522 // Add references to import list.
523 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
524
525 // Carry out inter-file linking.
526 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
527
528 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
529
530 YangNode rootNode = yangNodeIterator.next();
531
532 if (rootNode.getName().equals("Test")) {
533 selfNode = rootNode;
534 }
janani be18b5342016-07-13 21:06:41 +0530535
536 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530537 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530538
539 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530540 YangModule yangNode = (YangModule) selfNode;
541
janani be18b5342016-07-13 21:06:41 +0530542 assertThat(yangNode.getName(), is("Test"));
543
544 YangContainer containerParent = (YangContainer) yangNode.getChild().getChild().getChild();
545 ListIterator<YangLeafList> leafListListIterator;
546 YangLeafList leafListInfo;
547
548 leafListListIterator = containerParent.getListOfLeafList().listIterator();
549 leafListInfo = leafListListIterator.next();
550
551 // Check whether the information in the leaf is correct.
552 assertThat(leafListInfo.getName(), is("name"));
553 assertThat(leafListInfo.getDataType().getDataTypeName(), is("leafref"));
554 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
555 YangLeafRef leafref = (YangLeafRef) (leafListInfo.getDataType().getDataTypeExtendedInfo());
556
557 // Check whether leafref type got resolved.
558 assertThat(leafref.getResolvableStatus(),
559 is(ResolvableStatus.RESOLVED));
560
561 // Check the effective type for the leaf.
562 assertThat(leafref.getEffectiveDataType().getDataType(),
563 is(YangDataTypes.ENUMERATION));
564 }
565
566 /**
567 * Checks the error scenerio when the referred node is not a leaf or leaf-list.
568 */
569 @Test
570 public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
571 throws IOException, ParserException {
572
janani b23ccc312016-07-14 19:35:22 +0530573 thrown.expect(LinkerException.class);
574 thrown.expectMessage(
575 "YANG file error: Unable to find base leaf/leaf-list for given leafref path /networks");
576 String searchDir = "src/test/resources/leafreflinker/intrafile/invalidsceneriowithnorefleaf";
577 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
578 utilManager.parseYangFileInfoSet();
579 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +0530580
janani b23ccc312016-07-14 19:35:22 +0530581 // Create YANG node set
582 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530583
janani b23ccc312016-07-14 19:35:22 +0530584 // Add references to import list.
585 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530586
janani b23ccc312016-07-14 19:35:22 +0530587 // Carry out inter-file linking.
588 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530589 }
590
591 /**
592 * Checks self resolution when leafref of leaf-list under module refers to leaf in container.
593 */
594 @Test
595 public void processSelfResolutionWhenLeafrefInTypedefReferToContainer()
596 throws IOException, ParserException {
janani b23ccc312016-07-14 19:35:22 +0530597 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefintypedef";
598 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
599 utilManager.parseYangFileInfoSet();
600 utilManager.createYangNodeSet();
601 YangNode selfNode = null;
602 // Create YANG node set
603 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530604
janani b23ccc312016-07-14 19:35:22 +0530605 // Add references to import list.
606 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530607
janani b23ccc312016-07-14 19:35:22 +0530608 // Carry out inter-file linking.
609 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
610
611 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
612
613 YangNode rootNode = yangNodeIterator.next();
614
615 if (rootNode.getName().equals("ietf-network")) {
616 selfNode = rootNode;
617 }
janani be18b5342016-07-13 21:06:41 +0530618 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530619 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530620
621 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530622 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530623
624 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530625 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530626 assertThat(yangNode.getName(), is("ietf-network"));
627
628 YangContainer yangContainer = (YangContainer) yangNode.getChild();
629 ListIterator<YangLeaf> leafIterator;
630 YangLeaf leafInfo;
631 leafIterator = yangContainer.getListOfLeaf().listIterator();
632 leafInfo = leafIterator.next();
633
634 // Check whether the information in the leaf is correct under grouping.
635 assertThat(leafInfo.getName(), is("network-id"));
636 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
637
638 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
639
640 // Check whether leafref type got resolved.
641 assertThat(leafref.getResolvableStatus(),
642 is(ResolvableStatus.RESOLVED));
643
644 // Check the effective type for the leaf.
645 assertThat(leafref.getEffectiveDataType().getDataType(),
646 is(YangDataTypes.UINT8));
647 }
648
649 /**
650 * Checks self resolution when leafref of leaf-list under module refers to leaf-list in input of rpc.
651 */
652 @Test
653 public void processSelfResolutionWhenLeafrefInTypedefModuleReferToLeafListInInputOfRpc()
654 throws IOException, ParserException {
655
janani b23ccc312016-07-14 19:35:22 +0530656 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftorpcinputleaflist";
657 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
658 utilManager.parseYangFileInfoSet();
659 utilManager.createYangNodeSet();
660 YangNode selfNode = null;
661 // Create YANG node set
662 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +0530663
janani b23ccc312016-07-14 19:35:22 +0530664 // Add references to import list.
665 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
666
667 // Carry out inter-file linking.
668 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
669
670 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
671
672 YangNode rootNode = yangNodeIterator.next();
673
674 if (rootNode.getName().equals("ietf-network")) {
675 selfNode = rootNode;
676 }
janani be18b5342016-07-13 21:06:41 +0530677 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530678 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530679
680 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530681 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530682
683 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530684 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530685 assertThat(yangNode.getName(), is("ietf-network"));
686
687 YangInput yangInput = (YangInput) yangNode.getChild().getChild();
688
689 ListIterator<YangLeafList> leafListIterator;
690 YangLeafList yangLeafListInfo;
691 leafListIterator = yangInput.getListOfLeafList().listIterator();
692 yangLeafListInfo = leafListIterator.next();
693
694 // Check whether the information in the leaf is correct under grouping.
695 assertThat(yangLeafListInfo.getName(), is("network-id"));
696 assertThat(yangLeafListInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
697
698 YangLeafRef leafref = (YangLeafRef) (yangLeafListInfo.getDataType().getDataTypeExtendedInfo());
699
700 // Check whether leafref type got resolved.
701 assertThat(leafref.getResolvableStatus(),
702 is(ResolvableStatus.RESOLVED));
703
704 // Check the effective type for the leaf.
705 assertThat(leafref.getEffectiveDataType().getDataType(),
706 is(YangDataTypes.UINT8));
707 }
708
709 /**
710 * Checks self resolution when leafref of leaf-list under module refers to invalid node.
711 * Inter file linking also has to be done to know the error message.
712 */
713 @Test
714 public void processSelfResolutionWhenLeafrefInTypedefIsInDeepTreeAndLeafListIsInModuleWithReferredTypeEnumeration()
715 throws IOException, ParserException {
716
janani b23ccc312016-07-14 19:35:22 +0530717 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafrefwithtypedef";
718 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
719 utilManager.parseYangFileInfoSet();
720 utilManager.createYangNodeSet();
721 YangNode selfNode = null;
722 // Create YANG node set
723 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
724
725 // Add references to import list.
726 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
727
728 // Carry out inter-file linking.
729 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
730
731 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
732
733 YangNode rootNode = yangNodeIterator.next();
734
735 if (rootNode.getName().equals("Test")) {
736 selfNode = rootNode;
737 }
janani be18b5342016-07-13 21:06:41 +0530738 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530739 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530740
741 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530742 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530743
744 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530745 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530746 assertThat(yangNode.getName(), is("Test"));
747
748 YangContainer yangContainer = (YangContainer) yangNode.getChild().getChild().getChild().getNextSibling();
749
750 ListIterator<YangLeaf> leafIterator;
751 YangLeaf yangLeafInfo;
752 leafIterator = yangContainer.getListOfLeaf().listIterator();
753 yangLeafInfo = leafIterator.next();
754
755 // Check whether the information in the leaf is correct under grouping.
756 assertThat(yangLeafInfo.getName(), is("interval"));
757 assertThat(yangLeafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
758
759 YangLeafRef leafref = (YangLeafRef) (yangLeafInfo.getDataType().getDataTypeExtendedInfo());
760
761 // Check whether leafref type got resolved.
762 assertThat(leafref.getResolvableStatus(),
763 is(ResolvableStatus.RESOLVED));
764
765 // Check the effective type for the leaf.
766 assertThat(leafref.getEffectiveDataType().getDataType(),
767 is(YangDataTypes.ENUMERATION));
768 }
769
770 /**
771 * Checks self resolution when grouping and uses are siblings.
772 * Grouping followed by uses.
773 */
774 @Test
775 public void processSelfResolutionWhenLeafrefRefersAnotherLeafref()
776 throws IOException, ParserException {
777
janani b23ccc312016-07-14 19:35:22 +0530778 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoleafref";
779 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
780 utilManager.parseYangFileInfoSet();
781 utilManager.createYangNodeSet();
782 YangNode selfNode = null;
783 // Create YANG node set
784 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
785
786 // Add references to import list.
787 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
788
789 // Carry out inter-file linking.
790 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
791
792 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
793
794 YangNode rootNode = yangNodeIterator.next();
795
796 if (rootNode.getName().equals("ietf-network")) {
797 selfNode = rootNode;
798 }
janani be18b5342016-07-13 21:06:41 +0530799 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530800 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530801
802 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530803 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530804
805 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530806 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530807 assertThat(yangNode.getName(), is("ietf-network"));
808
809 ListIterator<YangLeaf> leafIterator;
810 YangLeaf leafInfo;
811
812 //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
813 leafIterator = yangNode.getListOfLeaf().listIterator();
814 leafInfo = leafIterator.next();
815
816 // Check whether the information in the leaf is correct under grouping.
817 assertThat(leafInfo.getName(), is("network-ref"));
818 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
819 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
820 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
821
822 assertThat(leafref.getResolvableStatus(),
823 is(ResolvableStatus.RESOLVED));
824
825 assertThat(leafref.getEffectiveDataType().getDataType(),
826 is(YangDataTypes.UINT8));
827 }
828
829 /**
830 * Checks self resolution when leafref refers to many other leafref.
831 */
832 @Test
833 public void processSelfResolutionWhenLeafrefReferToMultipleLeafref()
834 throws IOException, ParserException {
835
janani b23ccc312016-07-14 19:35:22 +0530836 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultileafref";
837 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
838 utilManager.parseYangFileInfoSet();
839 utilManager.createYangNodeSet();
840 YangNode selfNode = null;
841 // Create YANG node set
842 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
843
844 // Add references to import list.
845 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
846
847 // Carry out inter-file linking.
848 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
849
850 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
851
852 YangNode rootNode = yangNodeIterator.next();
853
854 if (rootNode.getName().equals("Test")) {
855 selfNode = rootNode;
856 }
janani be18b5342016-07-13 21:06:41 +0530857 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530858 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530859
860 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530861 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530862
863 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530864 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530865 assertThat(yangNode.getName(), is("Test"));
866
867 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
868 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
869
870 ListIterator<YangLeaf> leafIterator;
871 YangLeaf leafInfo;
872
873 leafIterator = containerInList.getListOfLeaf().listIterator();
874 leafInfo = leafIterator.next();
875
876 // Check whether the information in the leaf is correct under grouping.
877 assertThat(leafInfo.getName(), is("remove"));
878 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
879 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
880 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
881
882 assertThat(leafref.getResolvableStatus(),
883 is(ResolvableStatus.RESOLVED));
884
885 assertThat(leafref.getEffectiveDataType().getDataType(),
886 is(YangDataTypes.ENUMERATION));
887 }
888
889 /**
890 * Checks self resolution when grouping and uses are siblings.
891 * Grouping followed by uses.
892 */
893 @Test
894 public void processSelfResolutionWhenLeafrefRefersAnotherDerivedType()
895 throws IOException, ParserException {
896
janani b23ccc312016-07-14 19:35:22 +0530897 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftoderivedtype";
898 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
899 utilManager.parseYangFileInfoSet();
900 utilManager.createYangNodeSet();
901 YangNode selfNode = null;
902 // Create YANG node set
903 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
904
905 // Add references to import list.
906 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
907
908 // Carry out inter-file linking.
909 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
910
911 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
912
913 YangNode rootNode = yangNodeIterator.next();
914
915 if (rootNode.getName().equals("ietf-network")) {
916 selfNode = rootNode;
917 }
janani be18b5342016-07-13 21:06:41 +0530918 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530919 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530920
921 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530922 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530923
924 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530925 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530926 assertThat(yangNode.getName(), is("ietf-network"));
927
928 ListIterator<YangLeaf> leafIterator;
929 YangLeaf leafInfo;
930
931 //YangGrouping grouping = (YangGrouping) yangNode.getChild().getNextSibling();
932 leafIterator = yangNode.getListOfLeaf().listIterator();
933 leafInfo = leafIterator.next();
934
935 // Check whether the information in the leaf is correct under grouping.
936 assertThat(leafInfo.getName(), is("network-ref"));
937 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
938 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
939 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
940
941 assertThat(leafref.getResolvableStatus(),
942 is(ResolvableStatus.RESOLVED));
943
944 assertThat(leafref.getEffectiveDataType().getDataType(),
945 is(YangDataTypes.DERIVED));
946 }
947
948 /**
949 * Checks self resolution when leafref refers to many other leafref.
950 */
951 @Test
952 public void processSelfResolutionWhenLeafrefReferToMultipleTypedef()
953 throws IOException, ParserException {
954
janani b23ccc312016-07-14 19:35:22 +0530955 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftomultitypedef";
956 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
957 utilManager.parseYangFileInfoSet();
958 utilManager.createYangNodeSet();
959 YangNode selfNode = null;
960 // Create YANG node set
961 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
962
963 // Add references to import list.
964 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
965
966 // Carry out inter-file linking.
967 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
968
969 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
970
971 YangNode rootNode = yangNodeIterator.next();
972
973 if (rootNode.getName().equals("Test")) {
974 selfNode = rootNode;
975 }
janani be18b5342016-07-13 21:06:41 +0530976 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +0530977 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +0530978
979 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +0530980 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +0530981
982 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +0530983 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +0530984 assertThat(yangNode.getName(), is("Test"));
985
986 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
987 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
988
989 ListIterator<YangLeaf> leafIterator;
990 YangLeaf leafInfo;
991
992 leafIterator = containerInList.getListOfLeaf().listIterator();
993 leafInfo = leafIterator.next();
994
995 // Check whether the information in the leaf is correct under grouping.
996 assertThat(leafInfo.getName(), is("remove"));
997 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
998 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
999 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1000
1001 assertThat(leafref.getResolvableStatus(),
1002 is(ResolvableStatus.RESOLVED));
1003
1004 assertThat(leafref.getEffectiveDataType().getDataType(),
1005 is(YangDataTypes.DERIVED));
1006 }
1007
1008 /**
1009 * Checks self resolution when leafref refers to many other leaf with derived type
1010 * which in turn referring to another leaf.
1011 */
1012 @Test
1013 public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafref()
1014 throws IOException, ParserException {
1015
janani b23ccc312016-07-14 19:35:22 +05301016 String searchDir = "src/test/resources/leafreflinker/intrafile/leafreftotypedefwithleafref";
1017 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1018 utilManager.parseYangFileInfoSet();
1019 utilManager.createYangNodeSet();
1020 YangNode selfNode = null;
1021 // Create YANG node set
1022 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1023
1024 // Add references to import list.
1025 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1026
1027 // Carry out inter-file linking.
1028 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1029
1030 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1031
1032 YangNode rootNode = yangNodeIterator.next();
1033
1034 if (rootNode.getName().equals("Test")) {
1035 selfNode = rootNode;
1036 }
janani be18b5342016-07-13 21:06:41 +05301037 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301038 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301039
1040 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301041 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301042
1043 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301044 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301045 assertThat(yangNode.getName(), is("Test"));
1046
1047 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1048 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1049
1050 ListIterator<YangLeaf> leafIterator;
1051 YangLeaf leafInfo;
1052
1053 leafIterator = containerInList.getListOfLeaf().listIterator();
1054 leafInfo = leafIterator.next();
1055
1056 // Check whether the information in the leaf is correct under grouping.
1057 assertThat(leafInfo.getName(), is("remove"));
1058 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1059 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1060 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1061
1062 assertThat(leafref.getResolvableStatus(),
1063 is(ResolvableStatus.RESOLVED));
1064
1065 assertThat(leafref.getEffectiveDataType().getDataType(),
1066 is(YangDataTypes.ENUMERATION));
1067 }
1068
1069 /**
1070 * Checks self resolution when leafref under module refers to leaf in container with relative path.
1071 */
1072 @Test
1073 public void processSelfResolutionWhenLeafrefReferToContainerLeafRelPath()
1074 throws IOException, ParserException {
1075
janani b23ccc312016-07-14 19:35:22 +05301076 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/simpleleafref";
1077 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1078 utilManager.parseYangFileInfoSet();
1079 utilManager.createYangNodeSet();
1080 YangNode selfNode = null;
1081 // Create YANG node set
1082 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301083
janani b23ccc312016-07-14 19:35:22 +05301084 // Add references to import list.
1085 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1086
1087 // Carry out inter-file linking.
1088 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1089
1090 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1091
1092 YangNode rootNode = yangNodeIterator.next();
1093
1094 if (rootNode.getName().equals("ietf-network")) {
1095 selfNode = rootNode;
1096 }
janani be18b5342016-07-13 21:06:41 +05301097 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301098 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301099
1100 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301101 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301102
1103 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301104 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301105 assertThat(yangNode.getName(), is("ietf-network"));
1106
1107 ListIterator<YangLeaf> leafIterator;
1108 YangLeaf leafInfo;
1109
1110 leafIterator = yangNode.getListOfLeaf().listIterator();
1111 leafInfo = leafIterator.next();
1112
1113 // Check whether the information in the leaf is correct.
1114 assertThat(leafInfo.getName(), is("network-ref"));
1115 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1116 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1117 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1118
1119 // Check whether leafref type got resolved.
1120 assertThat(leafref.getResolvableStatus(),
1121 is(ResolvableStatus.RESOLVED));
1122
1123 // Check the effective type for the leaf.
1124 assertThat(leafref.getEffectiveDataType().getDataType(),
1125 is(YangDataTypes.UINT8));
1126 }
1127
1128 /**
1129 * Checks self resolution when leafref under module refers to grouping rpc with input as name.
1130 * Rpc has input child also. So here the node search must be done by taking input node using relative path.
1131 */
janani b23ccc312016-07-14 19:35:22 +05301132 @Ignore
janani be18b5342016-07-13 21:06:41 +05301133 public void processSelfResolutionWhenLeafrefInModuleReferToGroupingWithInputInRpcRelPath()
1134 throws IOException, ParserException {
1135
janani b23ccc312016-07-14 19:35:22 +05301136 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftoinputwithgroupinginrpc";
1137 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1138 utilManager.parseYangFileInfoSet();
1139 utilManager.createYangNodeSet();
1140 YangNode selfNode = null;
1141 // Create YANG node set
1142 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301143
janani b23ccc312016-07-14 19:35:22 +05301144 // Add references to import list.
1145 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1146
1147 // Carry out inter-file linking.
1148 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1149
1150 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1151
1152 YangNode rootNode = yangNodeIterator.next();
1153
1154 if (rootNode.getName().equals("ietf-network")) {
1155 selfNode = rootNode;
1156 }
janani be18b5342016-07-13 21:06:41 +05301157 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301158 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301159
1160 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301161 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301162
1163 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301164 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301165 assertThat(yangNode.getName(), is("ietf-network"));
1166
1167 ListIterator<YangLeaf> leafIterator;
1168 YangLeaf leafInfo;
1169
1170 leafIterator = yangNode.getListOfLeaf().listIterator();
1171 leafInfo = leafIterator.next();
1172
1173 // Check whether the information in the leaf is correct.
1174 assertThat(leafInfo.getName(), is("network-ref"));
1175 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1176 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1177 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1178
1179 // Check whether leafref type got resolved.
1180 assertThat(leafref.getResolvableStatus(),
1181 is(ResolvableStatus.RESOLVED));
1182
1183 // Check the effective type for the leaf.
1184 assertThat(leafref.getEffectiveDataType().getDataType(),
1185 is(YangDataTypes.UINT8));
1186 }
1187
1188 /**
1189 * Checks self resolution when leafref under module refers to invalid root node with relative path.
1190 */
1191 @Test
1192 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidRootNodeRelPath()
1193 throws IOException, ParserException {
1194
1195 thrown.expect(LinkerException.class);
1196 thrown.expectMessage(
janani b23ccc312016-07-14 19:35:22 +05301197 "YANG file error: The target node, in the leafref path ../../../define/network-id, is invalid.");
1198 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidrelativeancestoraccess";
1199 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1200 utilManager.parseYangFileInfoSet();
1201 utilManager.createYangNodeSet();
1202
1203 // Create YANG node set
1204 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1205
1206 // Add references to import list.
1207 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1208
1209 // Carry out inter-file linking.
1210 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301211 }
1212
1213 /**
1214 * Checks self resolution when leafref under module refers to invalid node.
1215 * Inter file linking also has to be done to know the error message with relative path.
1216 */
1217 @Test
1218 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNodeRelPath()
1219 throws IOException, ParserException {
1220
janani be18b5342016-07-13 21:06:41 +05301221
janani b23ccc312016-07-14 19:35:22 +05301222 thrown.expect(LinkerException.class);
1223 thrown.expectMessage(
1224 "YANG file error: Unable to find base leaf/leaf-list for given leafref path ../define/network-id");
1225 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/invalidnode";
1226 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1227 utilManager.parseYangFileInfoSet();
1228 utilManager.createYangNodeSet();
janani be18b5342016-07-13 21:06:41 +05301229
janani b23ccc312016-07-14 19:35:22 +05301230 // Create YANG node set
1231 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301232
janani b23ccc312016-07-14 19:35:22 +05301233 // Add references to import list.
1234 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301235
janani b23ccc312016-07-14 19:35:22 +05301236 //Carry out inter-file linking.
1237 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301238 }
1239
1240 /**
1241 * Checks self resolution when leafref of leaf-list under module refers to leaf in container with relative path.
1242 */
1243 @Test
1244 public void processSelfResolutionWhenLeafrefInTypedefReferToContainerRelPath()
1245 throws IOException, ParserException {
1246
janani b23ccc312016-07-14 19:35:22 +05301247 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafrefintypedef";
1248 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1249 utilManager.parseYangFileInfoSet();
1250 utilManager.createYangNodeSet();
1251 YangNode selfNode = null;
1252 // Create YANG node set
1253 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
janani be18b5342016-07-13 21:06:41 +05301254
janani b23ccc312016-07-14 19:35:22 +05301255 // Add references to import list.
1256 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1257
1258 // Carry out inter-file linking.
1259 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1260
1261 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1262
1263 YangNode rootNode = yangNodeIterator.next();
1264
1265 if (rootNode.getName().equals("ietf-network")) {
1266 selfNode = rootNode;
1267 }
janani be18b5342016-07-13 21:06:41 +05301268 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301269 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301270
1271 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301272 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301273
1274 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301275 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301276 assertThat(yangNode.getName(), is("ietf-network"));
1277 ListIterator<YangLeaf> leafIterator;
1278 YangLeaf leafInfo;
1279 YangContainer yangContainer = (YangContainer) yangNode.getChild();
1280 leafIterator = yangContainer.getListOfLeaf().listIterator();
1281 leafInfo = leafIterator.next();
1282
1283 // Check whether the information in the leaf is correct under grouping.
1284 assertThat(leafInfo.getName(), is("network-id"));
1285 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1286
1287 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1288
1289 // Check whether leafref type got resolved.
1290 assertThat(leafref.getResolvableStatus(),
1291 is(ResolvableStatus.RESOLVED));
1292
1293 // Check the effective type for the leaf.
1294 assertThat(leafref.getEffectiveDataType().getDataType(),
1295 is(YangDataTypes.UINT8));
1296 }
1297
1298 /**
1299 * Checks self resolution when leafref refers to many other leafref with relative path.
1300 */
1301 @Test
1302 public void processSelfResolutionWhenLeafrefReferToMultipleLeafrefRelPath()
1303 throws IOException, ParserException {
1304
janani b23ccc312016-07-14 19:35:22 +05301305 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftomultileafref";
1306 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1307 utilManager.parseYangFileInfoSet();
1308 utilManager.createYangNodeSet();
1309 YangNode selfNode = null;
1310 // Create YANG node set
1311 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1312
1313 // Add references to import list.
1314 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1315
1316 // Carry out inter-file linking.
1317 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1318
1319 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1320
1321 YangNode rootNode = yangNodeIterator.next();
1322
1323 if (rootNode.getName().equals("Test")) {
1324 selfNode = rootNode;
1325 }
janani be18b5342016-07-13 21:06:41 +05301326 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301327 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301328
1329 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301330 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301331
1332 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301333 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301334 assertThat(yangNode.getName(), is("Test"));
1335
1336 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1337 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1338
1339 ListIterator<YangLeaf> leafIterator;
1340 YangLeaf leafInfo;
1341
1342 leafIterator = containerInList.getListOfLeaf().listIterator();
1343 leafInfo = leafIterator.next();
1344
1345 // Check whether the information in the leaf is correct under grouping.
1346 assertThat(leafInfo.getName(), is("remove"));
1347 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1348 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1349 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1350
1351 assertThat(leafref.getResolvableStatus(),
1352 is(ResolvableStatus.RESOLVED));
1353
1354 assertThat(leafref.getEffectiveDataType().getDataType(),
1355 is(YangDataTypes.ENUMERATION));
1356 }
1357
1358 /**
1359 * Checks self resolution when leafref refers to many other leaf with derived type
1360 * which in turn referring to another leaf with relative type.
1361 */
1362 @Test
1363 public void processSelfResolutionWhenLeafrefReferToDerivedTypeReferringToLeafWithLeafrefRelType()
1364 throws IOException, ParserException {
1365
janani b23ccc312016-07-14 19:35:22 +05301366 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/leafreftotypedef";
1367 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1368 utilManager.parseYangFileInfoSet();
1369 utilManager.createYangNodeSet();
1370 YangNode selfNode = null;
1371 // Create YANG node set
1372 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1373
1374 // Add references to import list.
1375 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1376
1377 // Carry out inter-file linking.
1378 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1379
1380 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1381
1382 YangNode rootNode = yangNodeIterator.next();
1383
1384 if (rootNode.getName().equals("Test")) {
1385 selfNode = rootNode;
1386 }
janani be18b5342016-07-13 21:06:41 +05301387 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301388 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301389
1390 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301391 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301392
1393 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301394 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301395 assertThat(yangNode.getName(), is("Test"));
1396
1397 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1398 YangContainer containerInList = (YangContainer) containerInModule.getChild().getChild();
1399
1400 ListIterator<YangLeaf> leafIterator;
1401 YangLeaf leafInfo;
1402
1403 leafIterator = containerInList.getListOfLeaf().listIterator();
1404 leafInfo = leafIterator.next();
1405
1406 // Check whether the information in the leaf is correct under grouping.
1407 assertThat(leafInfo.getName(), is("remove"));
1408 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1409 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1410 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1411
1412 assertThat(leafref.getResolvableStatus(),
1413 is(ResolvableStatus.RESOLVED));
1414
1415 assertThat(leafref.getEffectiveDataType().getDataType(),
1416 is(YangDataTypes.ENUMERATION));
1417 }
1418
1419 /**
1420 * Checks the valid scenerios of path argument having proper setters.
1421 */
1422 @Test
1423 public void processPathArgumentStatement()
1424 throws IOException, ParserException {
1425
janani b23ccc312016-07-14 19:35:22 +05301426 String searchDir = "src/test/resources/leafreflinker/intrafile/relativepath/pathlistener";
1427 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1428 utilManager.parseYangFileInfoSet();
1429 utilManager.createYangNodeSet();
1430 YangNode selfNode = null;
1431 // Create YANG node set
1432 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1433
1434 // Add references to import list.
1435 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1436
1437 // Carry out inter-file linking.
1438 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1439
1440 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1441
1442 YangNode rootNode = yangNodeIterator.next();
1443
1444 if (rootNode.getName().equals("PathListener")) {
1445 selfNode = rootNode;
1446 }
janani be18b5342016-07-13 21:06:41 +05301447 // Check whether the data model tree returned is of type module.
janani b23ccc312016-07-14 19:35:22 +05301448 assertThat((selfNode instanceof YangModule), is(true));
janani be18b5342016-07-13 21:06:41 +05301449
1450 // Check whether the node type is set properly to module.
janani b23ccc312016-07-14 19:35:22 +05301451 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
janani be18b5342016-07-13 21:06:41 +05301452
1453 // Check whether the module name is set correctly.
janani b23ccc312016-07-14 19:35:22 +05301454 YangModule yangNode = (YangModule) selfNode;
janani be18b5342016-07-13 21:06:41 +05301455 assertThat(yangNode.getName(), is("PathListener"));
1456 YangList listInModule = (YangList) yangNode.getChild();
1457
1458 YangContainer containerInModule = (YangContainer) yangNode.getChild().getNextSibling();
1459 ListIterator<YangLeaf> leafIterator;
1460 YangLeaf leafInfo;
1461
1462 YangLeaf leafNameInList = listInModule.getListOfLeaf().listIterator().next();
1463
1464 leafIterator = containerInModule.getListOfLeaf().listIterator();
1465 leafInfo = leafIterator.next();
1466
1467 // Check whether the information in the leaf is correct under grouping.
1468 assertThat(leafInfo.getName(), is("ifname"));
1469 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1470 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1471 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
janani b23ccc312016-07-14 19:35:22 +05301472 assertThat(leafref.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
janani be18b5342016-07-13 21:06:41 +05301473
1474 YangRelativePath relativePathForName = leafref.getRelativePath();
1475 assertThat(relativePathForName.getAncestorNodeCount(), is(2));
1476 List<YangAtomicPath> absPathForName = relativePathForName.getAtomicPathList();
1477 Iterator<YangAtomicPath> absPathIteratorForName = absPathForName.listIterator();
1478 YangAtomicPath abspathForName = absPathIteratorForName.next();
1479 assertThat(abspathForName.getNodeIdentifier().getName(), is("interface"));
1480 assertThat(abspathForName.getNodeIdentifier().getPrefix(), is("test"));
1481 YangAtomicPath abspath1 = absPathIteratorForName.next();
1482 assertThat(abspath1.getNodeIdentifier().getName(), is("name"));
1483 assertThat(abspath1.getNodeIdentifier().getPrefix(), is("test"));
1484
1485 YangLeaf leafInfo1 = leafIterator.next();
1486 // Check whether the information in the leaf is correct under grouping.
1487 assertThat(leafInfo1.getName(), is("status"));
1488 assertThat(leafInfo1.getDataType().getDataTypeName(), is("leafref"));
1489 assertThat(leafInfo1.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1490
1491 YangLeafRef leafref1 = (YangLeafRef) leafInfo1.getDataType().getDataTypeExtendedInfo();
1492 assertThat(leafref1.getPathType(), is(YangPathArgType.ABSOLUTE_PATH));
1493
1494 List<YangAtomicPath> absolutePathList = leafref1.getAtomicPath();
1495 Iterator<YangAtomicPath> absPathIterator = absolutePathList.listIterator();
1496 YangAtomicPath abspath = absPathIterator.next();
1497 assertThat(abspath.getNodeIdentifier().getName(), is("interface"));
1498 assertThat(abspath.getNodeIdentifier().getPrefix(), is("test"));
1499
1500 List<YangPathPredicate> pathPredicateList = abspath.getPathPredicatesList();
1501 Iterator<YangPathPredicate> pathPredicate = pathPredicateList.listIterator();
1502 YangPathPredicate pathPredicate1 = pathPredicate.next();
1503 assertThat(pathPredicate1.getNodeIdentifier().getName(), is("name"));
1504 assertThat(pathPredicate1.getNodeIdentifier().getPrefix(), nullValue());
1505 assertThat(pathPredicate1.getRightRelativePath().getAncestorNodeCount(), is(1));
1506 assertThat(pathPredicate1.getPathOperator(), is(YangPathOperator.EQUALTO));
1507 assertThat(pathPredicate1.getRightRelativePath().getAtomicPathList().listIterator().next().getNodeIdentifier()
1508 .getName(), is("ifname"));
janani b23ccc312016-07-14 19:35:22 +05301509 //TODO : Fill the path predicates
1510// assertThat(pathPredicate1.getLeftAxisNode(), is(leafNameInList));
1511// assertThat(pathPredicate1.getRightAxisNode(), is(leafInfo));
1512 }
janani be18b5342016-07-13 21:06:41 +05301513
janani b23ccc312016-07-14 19:35:22 +05301514 /**
1515 * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
1516 */
1517 @Test
1518 public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
1519 throws IOException, ParserException {
1520
1521 String searchDir = "src/test/resources/leafreflinker/interfile" +
1522 "/interfileleafrefreferstomultipleleafrefinmultiplefiles";
1523 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1524 utilManager.parseYangFileInfoSet();
1525 utilManager.createYangNodeSet();
1526 YangNode refNode1 = null;
1527 YangNode refNode2 = null;
1528 YangNode selfNode = null;
1529
1530 // Create YANG node set
1531 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1532
1533 // Add references to import list.
1534 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1535
1536 // Carry out inter-file linking.
1537 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1538
1539 for (YangNode rootNode : utilManager.getYangNodeSet()) {
1540 if (rootNode.getName().equals("ietf-network-topology")) {
1541 selfNode = rootNode;
1542 } else if (rootNode.getName().equals("ietf-network")) {
1543 refNode1 = rootNode;
1544 } else {
1545 refNode2 = rootNode;
1546 }
1547 }
1548 // Check whether the data model tree returned is of type module.
1549 assertThat(selfNode instanceof YangModule, is(true));
1550
1551 // Check whether the node type is set properly to module.
1552 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
1553
1554 // Check whether the module name is set correctly.
1555 YangModule yangNode = (YangModule) selfNode;
1556 assertThat(yangNode.getName(), is("ietf-network-topology"));
1557
1558 YangList list = (YangList) yangNode.getChild().getChild();
1559 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
1560 YangLeaf leafInfo = leafIterator.next();
1561
1562 assertThat(leafInfo.getName(), is("link-tp"));
1563 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1564 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
1565
1566 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
1567
1568 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
1569 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
1570 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
1571
1572 assertThat(leafref.getEffectiveDataType().getDataType(),
1573 is(YangDataTypes.STRING));
1574 }
1575
1576
1577 /**
1578 * Checks addition of if-feature list to leafref.
1579 */
1580 @Test
1581 public void processSelfFileLinkingWithFeatureReferredByLeafref()
1582 throws IOException, ParserException {
1583
1584 String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/simpleleafrefwithiffeature";
1585 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1586 utilManager.parseYangFileInfoSet();
1587 utilManager.createYangNodeSet();
1588 YangNode selfNode = null;
1589 // Create YANG node set
1590 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1591
1592 // Add references to import list.
1593 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1594
1595 // Carry out inter-file linking.
1596 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1597
1598 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1599
1600 YangNode rootNode = yangNodeIterator.next();
1601
1602 if (rootNode.getName().equals("syslog")) {
1603 selfNode = rootNode;
1604 }
1605 // Check whether the data model tree returned is of type module.
1606 assertThat((selfNode instanceof YangModule), is(true));
1607
1608 // Check whether the node type is set properly to module.
1609 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1610
1611 // Check whether the module name is set correctly.
1612 YangModule yangNode = (YangModule) selfNode;
1613 assertThat(yangNode.getName(), is("syslog"));
1614
1615 List<YangFeature> featureList = yangNode.getFeatureList();
1616 YangFeature feature = featureList.iterator().next();
1617 assertThat(feature.getName(), is("local-storage"));
1618
1619 YangContainer container = (YangContainer) yangNode.getChild();
1620 assertThat(container.getName(), is("speed"));
1621
1622 List<YangLeaf> listOfLeaf = container.getListOfLeaf();
1623 YangLeaf leaf = listOfLeaf.iterator().next();
1624 assertThat(leaf.getName(), is("local-storage-limit"));
1625
1626 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
1627 YangIfFeature ifFeature = ifFeatureList.iterator().next();
1628 assertThat(ifFeature.getName().getName(), is("local-storage"));
1629 assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1630
1631 ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
1632 YangLeaf yangLeaf = listOfLeafInModule.next();
1633 assertThat(yangLeaf.getName(), is("storage-value"));
1634
1635 YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
1636
1637 assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
1638
1639 List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
1640 YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
1641 assertThat(ifFeatureInLeafref.getName().getName(), is("local-storage"));
1642 assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1643 }
1644
1645 /**
1646 * Checks addition of if-feature list to leafref when referred leaf is again having leafref in it.
1647 */
1648 @Test
1649 public void processSelfFileLinkingWithFeatureReferredByMultiLeafref()
1650 throws IOException, ParserException {
1651
1652 String searchDir = "src/test/resources/leafreflinker/iffeatuinleafref/featurebymultileafref";
1653 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1654 utilManager.parseYangFileInfoSet();
1655 utilManager.createYangNodeSet();
1656 YangNode selfNode = null;
1657 // Create YANG node set
1658 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1659
1660 // Add references to import list.
1661 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1662
1663 // Carry out inter-file linking.
1664 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1665
1666 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1667
1668 YangNode rootNode = yangNodeIterator.next();
1669
1670 if (rootNode.getName().equals("syslog")) {
1671 selfNode = rootNode;
1672 }
1673 // Check whether the data model tree returned is of type module.
1674 assertThat((selfNode instanceof YangModule), is(true));
1675
1676 // Check whether the node type is set properly to module.
1677 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1678
1679 // Check whether the module name is set correctly.
1680 YangModule yangNode = (YangModule) selfNode;
1681 assertThat(yangNode.getName(), is("syslog"));
1682
1683 List<YangFeature> featureList = yangNode.getFeatureList();
1684 YangFeature feature = featureList.iterator().next();
1685 assertThat(feature.getName(), is("local-storage"));
1686
1687 YangContainer container = (YangContainer) yangNode.getChild();
1688 assertThat(container.getName(), is("speed"));
1689
1690 List<YangLeaf> listOfLeaf = container.getListOfLeaf();
1691 YangLeaf leaf = listOfLeaf.iterator().next();
1692 assertThat(leaf.getName(), is("local-storage-limit"));
1693
1694 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
1695 YangIfFeature ifFeature = ifFeatureList.iterator().next();
1696 assertThat(ifFeature.getName().getName(), is("local-storage"));
1697 assertThat(ifFeature.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1698
1699 ListIterator<YangLeaf> listOfLeafInModule = yangNode.getListOfLeaf().listIterator();
1700 YangLeaf yangLeaf = listOfLeafInModule.next();
1701 assertThat(yangLeaf.getName(), is("storage-value"));
1702
1703 YangLeafRef leafRef = (YangLeafRef) yangLeaf.getDataType().getDataTypeExtendedInfo();
1704
1705 assertThat(leafRef.getEffectiveDataType().getDataType(), is(YangDataTypes.UINT64));
1706
1707 List<YangIfFeature> ifFeatureListInLeafref = leafRef.getIfFeatureList();
1708 YangIfFeature ifFeatureInLeafref = ifFeatureListInLeafref.iterator().next();
1709
1710 assertThat(ifFeatureInLeafref.getName().getName(), is("main-storage"));
1711 assertThat(ifFeatureInLeafref.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1712
1713 YangIfFeature ifFeatureInLeafref1 = ifFeatureListInLeafref.iterator().next();
1714
1715 assertThat(ifFeatureInLeafref1.getName().getName(), is("main-storage"));
1716 assertThat(ifFeatureInLeafref1.getResolvableStatus(), is(ResolvableStatus.RESOLVED));
1717 }
1718
1719 /**
1720 * Checks self resolution when leafref in grouping is copied to augment.
1721 */
1722 @Test
1723 public void processSelfResolutionWhenLeafrefInGroupingIsUnderAugment()
1724 throws IOException, ParserException {
1725
1726 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefInAugment";
1727 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1728 utilManager.parseYangFileInfoSet();
1729 utilManager.createYangNodeSet();
1730 YangNode selfNode = null;
1731
1732 // Create YANG node set
1733 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1734
1735 // Add references to import list.
1736 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1737
1738 // Carry out inter-file linking.
1739 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1740
1741 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1742
1743 YangNode rootNode = yangNodeIterator.next();
1744
1745 if (rootNode.getName().equals("topology")) {
1746 selfNode = rootNode;
1747 }
1748
1749 // Check whether the data model tree returned is of type module.
1750 assertThat((selfNode instanceof YangModule), is(true));
1751
1752 // Check whether the node type is set properly to module.
1753 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
1754
1755 // Check whether the module name is set correctly.
1756 YangModule yangNode = (YangModule) selfNode;
1757 assertThat(yangNode.getName(), is("topology"));
1758
1759 ListIterator<YangLeaf> leafIterator;
1760 YangLeaf leafInfo;
1761
1762 YangAugment augment = (YangAugment) yangNode.getChild().getNextSibling();
1763
1764 YangList list = (YangList) augment.getChild().getChild().getChild().getChild().getChild();
1765
1766 leafIterator = list.getListOfLeaf().listIterator();
1767 leafInfo = leafIterator.next();
1768
1769 // Check whether the information in the leaf is correct.
1770 assertThat(leafInfo.getName(), is("src-tp-ref"));
1771 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1772 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1773 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1774
1775 // Check whether leafref type got resolved.
1776 assertThat(leafref.getResolvableStatus(),
1777 is(ResolvableStatus.RESOLVED));
1778
1779 // Check the effective type for the leaf.
1780 assertThat(leafref.getEffectiveDataType().getDataType(),
1781 is(YangDataTypes.UINT8));
1782 }
1783
1784 /**
1785 * Checks self resolution when leafref under grouping's uses.
1786 */
1787 @Test
1788 public void processSelfResolutionWhenLeafrefUnderGroupingUses()
1789 throws IOException, ParserException {
1790
1791 String searchDir = "src/test/resources/leafreflinker/intrafile/leafrefinusesundergrouping";
1792 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
1793 utilManager.parseYangFileInfoSet();
1794 utilManager.createYangNodeSet();
1795 YangNode selfNode = null;
1796 YangNode refNode = null;
1797
1798 // Create YANG node set
1799 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
1800
1801 // Add references to import list.
1802 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
1803
1804 // Carry out inter-file linking.
1805 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
1806
1807 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
1808
1809 YangNode rootNode = yangNodeIterator.next();
1810
1811 if (rootNode.getName().equals("ietf-network")) {
1812 selfNode = rootNode;
1813 refNode = yangNodeIterator.next();
1814 } else {
1815 refNode = rootNode;
1816 selfNode = yangNodeIterator.next();
1817 }
1818
1819 // Check whether the data model tree returned is of type module.
1820 assertThat(selfNode instanceof YangModule, is(true));
1821
1822 // Check whether the node type is set properly to module.
1823 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
1824
1825 // Check whether the module name is set correctly.
1826 YangModule yangNode = (YangModule) selfNode;
1827 assertThat(yangNode.getName(), is("ietf-network"));
1828
1829 // Check whether the module name is set correctly.
1830 YangModule yangNode1 = (YangModule) refNode;
1831 assertThat(yangNode1.getName(), is("network"));
1832
1833 YangContainer yangContainer = (YangContainer) yangNode.getChild().getNextSibling().getNextSibling();
1834 assertThat(yangContainer.getName(), is("fine"));
1835
1836 YangContainer yangContainer1 = (YangContainer) yangContainer.getChild().getNextSibling();
1837 assertThat(yangContainer1.getName(), is("hi"));
1838
1839 ListIterator<YangLeaf> leafIterator;
1840 YangLeaf leafInfo;
1841
1842 leafIterator = yangContainer1.getListOfLeaf().listIterator();
1843 leafInfo = leafIterator.next();
1844
1845 // Check whether the information in the leaf is correct.
1846 assertThat(leafInfo.getName(), is("network-id-ref"));
1847 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
1848 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.LEAFREF));
1849 YangLeafRef leafref = (YangLeafRef) (leafInfo.getDataType().getDataTypeExtendedInfo());
1850
1851 // Check whether leafref type got resolved.
1852 assertThat(leafref.getResolvableStatus(),
1853 is(ResolvableStatus.RESOLVED));
1854
1855 // Check the effective type for the leaf.
1856 assertThat(leafref.getEffectiveDataType().getDataType(),
1857 is(YangDataTypes.DERIVED));
janani be18b5342016-07-13 21:06:41 +05301858 }
1859}