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