blob: 792035665f981258b5ee29d7a6ced32897937bab [file] [log] [blame]
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +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.linker;
18
19import java.io.IOException;
20import java.util.Iterator;
21import java.util.ListIterator;
22import org.apache.maven.plugin.MojoExecutionException;
23import org.junit.Test;
24import org.onosproject.yangutils.datamodel.YangDataTypes;
25import org.onosproject.yangutils.datamodel.YangDerivedInfo;
26import org.onosproject.yangutils.datamodel.YangGrouping;
27import org.onosproject.yangutils.datamodel.YangLeaf;
28import org.onosproject.yangutils.datamodel.YangModule;
29import org.onosproject.yangutils.datamodel.YangNode;
30import org.onosproject.yangutils.datamodel.YangNodeType;
31import org.onosproject.yangutils.datamodel.YangTypeDef;
32import org.onosproject.yangutils.datamodel.YangUses;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053033import org.onosproject.yangutils.linker.impl.YangLinkerManager;
34import org.onosproject.yangutils.parser.exceptions.ParserException;
35import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
36import org.onosproject.yangutils.plugin.manager.YangFileInfo;
37import org.onosproject.yangutils.plugin.manager.YangUtilManager;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053038import org.onosproject.yangutils.translator.tojava.utils.YangPluginConfig;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053039import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
40
41import static org.hamcrest.CoreMatchers.nullValue;
42import static org.hamcrest.MatcherAssert.assertThat;
43import static org.hamcrest.core.Is.is;
44import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
45import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
46import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053047import static org.onosproject.yangutils.linker.ResolvableStatus.RESOLVED;
48import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053049
50/**
51 * Test cases for testing inter file linking.
52 */
53public class InterFileLinkingTest {
54
55 private final YangUtilsParserManager manager = new YangUtilsParserManager();
56 private final YangUtilManager utilManager = new YangUtilManager();
57 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
58
59 /**
60 * Checks inter file type linking.
61 */
62 @Test
63 public void processInterFileTypeLinking()
64 throws IOException, ParserException, MojoExecutionException {
65
66 String searchDir = "src/test/resources/interfiletype";
67 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
68 utilManager.parseYangFileInfoSet();
69
70 YangNode refNode = null;
71 YangNode selfNode = null;
72
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053073 // Create YANG node set
74 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
75
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053076 // Add references to import list.
77 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
78
79 // Carry out inter-file linking.
80 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
81
82 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
83
84 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
85
86 if (yangFileInfo.getRootNode().getName().equals("module1")) {
87 selfNode = yangFileInfo.getRootNode();
88 refNode = yangFileInfoIterator.next().getRootNode();
89 } else {
90 refNode = yangFileInfo.getRootNode();
91 selfNode = yangFileInfoIterator.next().getRootNode();
92 }
93
94 // Check whether the data model tree returned is of type module.
95 assertThat(selfNode instanceof YangModule, is(true));
96
97 // Check whether the node type is set properly to module.
98 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
99
100 // Check whether the module name is set correctly.
101 YangModule yangNode = (YangModule) selfNode;
102 assertThat(yangNode.getName(), is("module1"));
103
104 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
105 YangLeaf leafInfo = leafIterator.next();
106
107 assertThat(leafInfo.getName(), is("invalid-interval"));
108 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
109 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
110
111 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
112 is((YangTypeDef) refNode.getChild()));
113
114 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
115
116 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
117
118 // Check for the effective built-in type.
119 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
120
121 // Check for the restriction.
122 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
123 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
124 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
125 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
126 }
127
128 /**
129 * Checks inter file uses linking.
130 */
131 @Test
132 public void processInterFileUsesLinking()
133 throws IOException, ParserException, MojoExecutionException {
134
135 String searchDir = "src/test/resources/interfileuses";
136 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
137 utilManager.parseYangFileInfoSet();
138
139 YangNode refNode = null;
140 YangNode selfNode = null;
141
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530142 // Create YANG node set
143 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
144
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530145 // Add references to import list.
146 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
147
148 // Carry out inter-file linking.
149 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
150
151 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
152
153 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
154
155 if (yangFileInfo.getRootNode().getName().equals("module1")) {
156 selfNode = yangFileInfo.getRootNode();
157 refNode = yangFileInfoIterator.next().getRootNode();
158 } else {
159 refNode = yangFileInfo.getRootNode();
160 selfNode = yangFileInfoIterator.next().getRootNode();
161 }
162
163 // Check whether the data model tree returned is of type module.
164 assertThat((selfNode instanceof YangModule), is(true));
165
166 // Check whether the node type is set properly to module.
167 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
168
169 // Check whether the module name is set correctly.
170 YangModule yangNode = (YangModule) selfNode;
171 assertThat(yangNode.getName(), is("module1"));
172
173 ListIterator<YangLeaf> leafIterator;
174 YangLeaf leafInfo;
175
176 // Check whether grouping is the sibling of module's child.
177 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
178
179 YangGrouping grouping = (YangGrouping) refNode.getChild();
180 leafIterator = grouping.getListOfLeaf().listIterator();
181 leafInfo = leafIterator.next();
182
183 // Check whether the information in the leaf is correct under grouping.
184 assertThat(leafInfo.getName(), is("hello"));
185 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
186 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
187
188 // Check whether uses is module's child.
189 assertThat((yangNode.getChild() instanceof YangUses), is(true));
190 YangUses uses = (YangUses) yangNode.getChild();
191
192 // Check whether uses get resolved.
193 assertThat(uses.getResolvableStatus(),
194 is(ResolvableStatus.RESOLVED));
195
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530196// leafIterator = yangNode.getListOfLeaf().listIterator();
197// leafInfo = leafIterator.next();
198//
199// // Check whether the information in the leaf is correct under module.
200// assertThat(leafInfo.getName(), is("hello"));
201// assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
202// assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530203 }
204
205 /**
206 * Checks inter file type linking with include list.
207 */
208 @Test
209 public void processInterFileTypeLinkingWithIncludeList()
210 throws IOException, ParserException, MojoExecutionException {
211
212 String searchDir = "src/test/resources/interfiletypewithinclude";
213 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
214 utilManager.parseYangFileInfoSet();
215
216 YangNode refNode = null;
217 YangNode selfNode = null;
218
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530219 // Create YANG node set
220 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
221
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530222 // Carry out linking of sub module with module.
223 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangFileInfoSet());
224
225 // Add reference to include list.
226 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangFileInfoSet());
227
228 // Carry out inter-file linking.
229 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
230
231 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
232
233 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
234
235 if (yangFileInfo.getRootNode().getName().equals("module1")) {
236 selfNode = yangFileInfo.getRootNode();
237 refNode = yangFileInfoIterator.next().getRootNode();
238 } else {
239 refNode = yangFileInfo.getRootNode();
240 selfNode = yangFileInfoIterator.next().getRootNode();
241 }
242
243 // Check whether the data model tree returned is of type module.
244 assertThat(selfNode instanceof YangModule, is(true));
245
246 // Check whether the node type is set properly to module.
247 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
248
249 // Check whether the module name is set correctly.
250 YangModule yangNode = (YangModule) selfNode;
251 assertThat(yangNode.getName(), is("module1"));
252
253 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
254 YangLeaf leafInfo = leafIterator.next();
255
256 assertThat(leafInfo.getName(), is("invalid-interval"));
257 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
258 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
259
260 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
261 is((YangTypeDef) refNode.getChild()));
262
263 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
264
265 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
266
267 // Check for the effective built-in type.
268 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
269
270 // Check for the restriction.
271 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
272 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
273 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
274 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
275 }
276
277 /**
278 * Checks inter file uses linking with include list.
279 */
280 @Test
281 public void processInterFileUsesLinkingWithInclude()
282 throws IOException, ParserException, MojoExecutionException {
283
284 String searchDir = "src/test/resources/interfileuseswithinclude";
285 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
286 utilManager.parseYangFileInfoSet();
287
288 YangNode refNode = null;
289 YangNode selfNode = null;
290
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530291 // Create YANG node set
292 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
293
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530294 // Carry out linking of sub module with module.
295 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangFileInfoSet());
296
297 // Add reference to include list.
298 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangFileInfoSet());
299
300 // Carry out inter-file linking.
301 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
302
303 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
304
305 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
306
307 if (yangFileInfo.getRootNode().getName().equals("module1")) {
308 selfNode = yangFileInfo.getRootNode();
309 refNode = yangFileInfoIterator.next().getRootNode();
310 } else {
311 refNode = yangFileInfo.getRootNode();
312 selfNode = yangFileInfoIterator.next().getRootNode();
313 }
314
315 // Check whether the data model tree returned is of type module.
316 assertThat((selfNode instanceof YangModule), is(true));
317
318 // Check whether the node type is set properly to module.
319 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
320
321 // Check whether the module name is set correctly.
322 YangModule yangNode = (YangModule) selfNode;
323 assertThat(yangNode.getName(), is("module1"));
324
325 ListIterator<YangLeaf> leafIterator;
326 YangLeaf leafInfo;
327
328 // Check whether grouping is the sibling of module's child.
329 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
330
331 YangGrouping grouping = (YangGrouping) refNode.getChild();
332 leafIterator = grouping.getListOfLeaf().listIterator();
333 leafInfo = leafIterator.next();
334
335 // Check whether the information in the leaf is correct under grouping.
336 assertThat(leafInfo.getName(), is("hello"));
337 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
338 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
339
340 // Check whether uses is module's child.
341 assertThat((yangNode.getChild() instanceof YangUses), is(true));
342 YangUses uses = (YangUses) yangNode.getChild();
343
344 // Check whether uses get resolved.
345 assertThat(uses.getResolvableStatus(),
346 is(ResolvableStatus.RESOLVED));
347
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530348// leafIterator = yangNode.getListOfLeaf().listIterator();
349// leafInfo = leafIterator.next();
350//
351// // Check whether the information in the leaf is correct under module.
352// assertThat(leafInfo.getName(), is("hello"));
353// assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
354// assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530355 }
356
357 /**
358 * Checks inter file type linking with revision.
359 */
360 @Test
361 public void processInterFileTypeLinkingWithRevision()
362 throws IOException, ParserException, MojoExecutionException {
363
364 String searchDir = "src/test/resources/interfiletypewithrevision";
365 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
366 utilManager.parseYangFileInfoSet();
367
368 YangNode refNode = null;
369 YangNode selfNode = null;
370
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530371 // Create YANG node set
372 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
373
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530374 // Add references to import list.
375 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
376
377 // Carry out inter-file linking.
378 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
379
380 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
381
382 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
383
384 if (yangFileInfo.getRootNode().getName().equals("module1")) {
385 selfNode = yangFileInfo.getRootNode();
386 refNode = yangFileInfoIterator.next().getRootNode();
387 } else {
388 refNode = yangFileInfo.getRootNode();
389 selfNode = yangFileInfoIterator.next().getRootNode();
390 }
391
392 // Check whether the data model tree returned is of type module.
393 assertThat(selfNode instanceof YangModule, is(true));
394
395 // Check whether the node type is set properly to module.
396 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
397
398 // Check whether the module name is set correctly.
399 YangModule yangNode = (YangModule) selfNode;
400 assertThat(yangNode.getName(), is("module1"));
401
402 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
403 YangLeaf leafInfo = leafIterator.next();
404
405 assertThat(leafInfo.getName(), is("invalid-interval"));
406 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
407 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
408
409 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
410 is((YangTypeDef) refNode.getChild()));
411
412 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
413
414 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
415
416 // Check for the effective built-in type.
417 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
418
419 // Check for the restriction.
420 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
421 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
422 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
423 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
424 }
425
426 /**
427 * Checks inter file type linking with revision in name.
428 */
429 @Test
430 public void processInterFileTypeLinkingWithRevisionInName()
431 throws IOException, ParserException, MojoExecutionException {
432
433 String searchDir = "src/test/resources/interfiletypewithrevisioninname";
434 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
435 utilManager.parseYangFileInfoSet();
436
437 YangNode refNode = null;
438 YangNode selfNode = null;
439
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530440 // Create YANG node set
441 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
442
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530443 // Add references to import list.
444 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
445
446 // Carry out inter-file linking.
447 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
448
449 Iterator<YangFileInfo> yangFileInfoIterator = utilManager.getYangFileInfoSet().iterator();
450
451 YangFileInfo yangFileInfo = yangFileInfoIterator.next();
452
453 if (yangFileInfo.getRootNode().getName().equals("module1")) {
454 selfNode = yangFileInfo.getRootNode();
455 refNode = yangFileInfoIterator.next().getRootNode();
456 } else {
457 refNode = yangFileInfo.getRootNode();
458 selfNode = yangFileInfoIterator.next().getRootNode();
459 }
460
461 // Check whether the data model tree returned is of type module.
462 assertThat(selfNode instanceof YangModule, is(true));
463
464 // Check whether the node type is set properly to module.
465 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
466
467 // Check whether the module name is set correctly.
468 YangModule yangNode = (YangModule) selfNode;
469 assertThat(yangNode.getName(), is("module1"));
470
471 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
472 YangLeaf leafInfo = leafIterator.next();
473
474 assertThat(leafInfo.getName(), is("invalid-interval"));
475 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
476 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
477
478 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
479 is((YangTypeDef) refNode.getChild()));
480
481 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
482
483 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
484
485 // Check for the effective built-in type.
486 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
487
488 // Check for the restriction.
489 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
490 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
491 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
492 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
493 }
494
495 /**
496 * Checks hierarchical inter file type linking.
497 */
498 @Test
499 public void processHierarchicalInterFileTypeLinking()
500 throws IOException, ParserException, MojoExecutionException {
501
502 String searchDir = "src/test/resources/hierarchicalinterfiletype";
503 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
504 utilManager.parseYangFileInfoSet();
505
506 YangNode refNode1 = null;
507 YangNode refNode2 = null;
508 YangNode selfNode = null;
509
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530510 // Create YANG node set
511 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
512
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530513 // Add references to import list.
514 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
515
516 // Carry out inter-file linking.
517 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
518
519 for (YangFileInfo yangFile : utilManager.getYangFileInfoSet()) {
520 if (yangFile.getRootNode().getName().equals("ietf-network-topology")) {
521 selfNode = yangFile.getRootNode();
522 } else if (yangFile.getRootNode().getName().equals("ietf-network")) {
523 refNode1 = yangFile.getRootNode();
524 } else {
525 refNode2 = yangFile.getRootNode();
526 }
527 }
528
529 // Check whether the data model tree returned is of type module.
530 assertThat(selfNode instanceof YangModule, is(true));
531
532 // Check whether the node type is set properly to module.
533 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
534
535 // Check whether the module name is set correctly.
536 YangModule yangNode = (YangModule) selfNode;
537 assertThat(yangNode.getName(), is("ietf-network-topology"));
538
539 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
540 YangLeaf leafInfo = leafIterator.next();
541
542 assertThat(leafInfo.getName(), is("source-node"));
543 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
544 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
545
546 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
547 is((YangTypeDef) refNode1.getChild()));
548
549 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
550
551 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
552
553 // Check for the effective built-in type.
554 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
555
556 // Check for the restriction.
557 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
558 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
559 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
560 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
561 }
562
563 /**
564 * Checks hierarchical intra with inter file type linking.
565 */
566 @Test
567 public void processHierarchicalIntraWithInterFileTypeLinking()
568 throws IOException, ParserException, MojoExecutionException {
569
570 String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
571 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
572 utilManager.parseYangFileInfoSet();
573
574 YangNode refNode1 = null;
575 YangNode selfNode = null;
576
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530577 // Create YANG node set
578 yangLinkerManager.createYangNodeSet(utilManager.getYangFileInfoSet());
579
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530580 // Add references to import list.
581 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangFileInfoSet());
582
583 // Carry out inter-file linking.
584 yangLinkerManager.processInterFileLinking(utilManager.getYangFileInfoSet());
585
586 for (YangFileInfo yangFile : utilManager.getYangFileInfoSet()) {
587 if (yangFile.getRootNode().getName().equals("ietf-network")) {
588 selfNode = yangFile.getRootNode();
589 } else if (yangFile.getRootNode().getName().equals("ietf-inet-types")) {
590 refNode1 = yangFile.getRootNode();
591 }
592 }
593
594 // Check whether the data model tree returned is of type module.
595 assertThat(selfNode instanceof YangModule, is(true));
596
597 // Check whether the node type is set properly to module.
598 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
599
600 // Check whether the module name is set correctly.
601 YangModule yangNode = (YangModule) selfNode;
602 assertThat(yangNode.getName(), is("ietf-network"));
603
604 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
605 YangLeaf leafInfo = leafIterator.next();
606
607 assertThat(leafInfo.getName(), is("node-ref"));
608 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
609 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
610
611 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
612 is((YangTypeDef) selfNode.getChild()));
613
614 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
615
616 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
617
618 // Check for the effective built-in type.
619 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
620
621 // Check for the restriction.
622 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
623 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
624 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
625 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
626 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530627
628 /**
629 * Checks hierarchical intra with inter file type linking.
630 */
631 @Test
632 public void interFileWithUsesReferringType()
633 throws IOException, ParserException, MojoExecutionException {
634
635 String searchDir = "src/test/resources/interfilewithusesreferringtype";
636 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
637 utilManager.parseYangFileInfoSet();
638 utilManager.resolveDependenciesUsingLinker();
639
640 String userDir = System.getProperty("user.dir");
641 YangPluginConfig yangPluginConfig = new YangPluginConfig();
642 yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
643
644 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
645
646 deleteDirectory(userDir + "/target/interfilewithusesreferringtype/");
647
648 }
649
650 /**
651 * Checks hierarchical intra with inter file type linking.
652 */
653 @Test
654 public void file1UsesFile2TypeDefFile3Type()
655 throws IOException, ParserException, MojoExecutionException {
656
657 String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
658 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
659 utilManager.parseYangFileInfoSet();
660 utilManager.resolveDependenciesUsingLinker();
661
662 String userDir = System.getProperty("user.dir");
663 YangPluginConfig yangPluginConfig = new YangPluginConfig();
664 yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
665
666 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
667
668 deleteDirectory(userDir + "/target/file1UsesFile2TypeDefFile3Type/");
669
670 }
671
672
673 /**
674 * Checks hierarchical intra with inter file type linking.
675 */
676 @Test
677 public void interFileIetf()
678 throws IOException, ParserException, MojoExecutionException {
679
680 String searchDir = "src/test/resources/interfileietf";
681 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
682 utilManager.parseYangFileInfoSet();
683 utilManager.resolveDependenciesUsingLinker();
684
685 String userDir = System.getProperty("user.dir");
686 YangPluginConfig yangPluginConfig = new YangPluginConfig();
687 yangPluginConfig.setCodeGenDir("target/interfileietf/");
688
689 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
690
691 deleteDirectory(userDir + "/target/interfileietf/");
692
693 }
694
695
696 /**
697 * Checks hierarchical intra with inter file type linking.
698 */
699 @Test
700 public void usesInContainer()
701 throws IOException, ParserException, MojoExecutionException {
702
703 String searchDir = "src/test/resources/usesInContainer";
704 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
705 utilManager.parseYangFileInfoSet();
706 utilManager.resolveDependenciesUsingLinker();
707
708 String userDir = System.getProperty("user.dir");
709 YangPluginConfig yangPluginConfig = new YangPluginConfig();
710 yangPluginConfig.setCodeGenDir("target/usesInContainer/");
711
712 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
713
714 deleteDirectory(userDir + "/target/usesInContainer/");
715
716 }
717
718
719 /**
720 * Checks hierarchical intra with inter file type linking.
721 */
722 @Test
723 public void groupingNodeSameAsModule()
724 throws IOException, ParserException, MojoExecutionException {
725
726 String searchDir = "src/test/resources/groupingNodeSameAsModule";
727 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
728 utilManager.parseYangFileInfoSet();
729 utilManager.resolveDependenciesUsingLinker();
730
731 String userDir = System.getProperty("user.dir");
732 YangPluginConfig yangPluginConfig = new YangPluginConfig();
733 yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
734
735 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
736
737 deleteDirectory(userDir + "/target/groupingNodeSameAsModule/");
738
739 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530740}