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