blob: eda4873912c11074637e0f53a6a1883d59d58b0f [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;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053037import org.onosproject.yangutils.plugin.manager.YangUtilManager;
38import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053039import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053040
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;
Bharat saraswal96dfef02016-06-16 00:29:12 +053047import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053048import 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();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053069 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053070
71 YangNode refNode = null;
72 YangNode selfNode = null;
73
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053074 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053075 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053076
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053077 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053078 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053079
80 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053081 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053082
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053083 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053084
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053085 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053086
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053087 if (rootNode.getName().equals("module1")) {
88 selfNode = rootNode;
89 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053090 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053091 refNode = rootNode;
92 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053093 }
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();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530139 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530140
141 YangNode refNode = null;
142 YangNode selfNode = null;
143
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530144 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530145 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530146
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530147 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530148 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530149
150 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530151 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530152
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530153 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530154
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530155 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530156
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530157 if (rootNode.getName().equals("module1")) {
158 selfNode = rootNode;
159 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530160 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530161 refNode = rootNode;
162 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530163 }
164
165 // Check whether the data model tree returned is of type module.
166 assertThat((selfNode instanceof YangModule), is(true));
167
168 // Check whether the node type is set properly to module.
169 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
170
171 // Check whether the module name is set correctly.
172 YangModule yangNode = (YangModule) selfNode;
173 assertThat(yangNode.getName(), is("module1"));
174
175 ListIterator<YangLeaf> leafIterator;
176 YangLeaf leafInfo;
177
178 // Check whether grouping is the sibling of module's child.
179 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
180
181 YangGrouping grouping = (YangGrouping) refNode.getChild();
182 leafIterator = grouping.getListOfLeaf().listIterator();
183 leafInfo = leafIterator.next();
184
185 // Check whether the information in the leaf is correct under grouping.
186 assertThat(leafInfo.getName(), is("hello"));
187 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
188 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
189
190 // Check whether uses is module's child.
191 assertThat((yangNode.getChild() instanceof YangUses), is(true));
192 YangUses uses = (YangUses) yangNode.getChild();
193
194 // Check whether uses get resolved.
195 assertThat(uses.getResolvableStatus(),
196 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530197 }
198
199 /**
200 * Checks inter file type linking with include list.
201 */
202 @Test
203 public void processInterFileTypeLinkingWithIncludeList()
204 throws IOException, ParserException, MojoExecutionException {
205
206 String searchDir = "src/test/resources/interfiletypewithinclude";
207 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
208 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530209 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530210
211 YangNode refNode = null;
212 YangNode selfNode = null;
213
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530214 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530215 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530216
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530217 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530218 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530219
220 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530221 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530222
223 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530224 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530225
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530226 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530227
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530228 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530229
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530230 if (rootNode.getName().equals("module1")) {
231 selfNode = rootNode;
232 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530233 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530234 refNode = rootNode;
235 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530236 }
237
238 // Check whether the data model tree returned is of type module.
239 assertThat(selfNode instanceof YangModule, is(true));
240
241 // Check whether the node type is set properly to module.
242 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
243
244 // Check whether the module name is set correctly.
245 YangModule yangNode = (YangModule) selfNode;
246 assertThat(yangNode.getName(), is("module1"));
247
248 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
249 YangLeaf leafInfo = leafIterator.next();
250
251 assertThat(leafInfo.getName(), is("invalid-interval"));
252 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
253 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
254
255 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
256 is((YangTypeDef) refNode.getChild()));
257
258 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
259
260 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
261
262 // Check for the effective built-in type.
263 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
264
265 // Check for the restriction.
266 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
267 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
268 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
269 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
270 }
271
272 /**
273 * Checks inter file uses linking with include list.
274 */
275 @Test
276 public void processInterFileUsesLinkingWithInclude()
277 throws IOException, ParserException, MojoExecutionException {
278
279 String searchDir = "src/test/resources/interfileuseswithinclude";
280 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
281 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530282 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530283
284 YangNode refNode = null;
285 YangNode selfNode = null;
286
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530287 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530288 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530289
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530290 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530291 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530292
293 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530294 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530295
296 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530297 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530298
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530299 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530300
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530301 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530302
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530303 if (rootNode.getName().equals("module1")) {
304 selfNode = rootNode;
305 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530306 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530307 refNode = rootNode;
308 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530309 }
310
311 // Check whether the data model tree returned is of type module.
312 assertThat((selfNode instanceof YangModule), is(true));
313
314 // Check whether the node type is set properly to module.
315 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
316
317 // Check whether the module name is set correctly.
318 YangModule yangNode = (YangModule) selfNode;
319 assertThat(yangNode.getName(), is("module1"));
320
321 ListIterator<YangLeaf> leafIterator;
322 YangLeaf leafInfo;
323
324 // Check whether grouping is the sibling of module's child.
325 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
326
327 YangGrouping grouping = (YangGrouping) refNode.getChild();
328 leafIterator = grouping.getListOfLeaf().listIterator();
329 leafInfo = leafIterator.next();
330
331 // Check whether the information in the leaf is correct under grouping.
332 assertThat(leafInfo.getName(), is("hello"));
333 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
334 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
335
336 // Check whether uses is module's child.
337 assertThat((yangNode.getChild() instanceof YangUses), is(true));
338 YangUses uses = (YangUses) yangNode.getChild();
339
340 // Check whether uses get resolved.
341 assertThat(uses.getResolvableStatus(),
342 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530343 }
344
345 /**
346 * Checks inter file type linking with revision.
347 */
348 @Test
349 public void processInterFileTypeLinkingWithRevision()
350 throws IOException, ParserException, MojoExecutionException {
351
352 String searchDir = "src/test/resources/interfiletypewithrevision";
353 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
354 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530355 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530356
357 YangNode refNode = null;
358 YangNode selfNode = null;
359
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530360 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530361 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530362
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530363 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530364 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530365
366 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530367 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530368
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530369 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530370
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530371 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530372
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530373 if (rootNode.getName().equals("module1")) {
374 selfNode = rootNode;
375 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530376 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530377 refNode = rootNode;
378 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530379 }
380
381 // Check whether the data model tree returned is of type module.
382 assertThat(selfNode instanceof YangModule, is(true));
383
384 // Check whether the node type is set properly to module.
385 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
386
387 // Check whether the module name is set correctly.
388 YangModule yangNode = (YangModule) selfNode;
389 assertThat(yangNode.getName(), is("module1"));
390
391 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
392 YangLeaf leafInfo = leafIterator.next();
393
394 assertThat(leafInfo.getName(), is("invalid-interval"));
395 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
396 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
397
398 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
399 is((YangTypeDef) refNode.getChild()));
400
401 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
402
403 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
404
405 // Check for the effective built-in type.
406 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
407
408 // Check for the restriction.
409 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
410 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
411 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
412 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
413 }
414
415 /**
416 * Checks inter file type linking with revision in name.
417 */
418 @Test
419 public void processInterFileTypeLinkingWithRevisionInName()
420 throws IOException, ParserException, MojoExecutionException {
421
422 String searchDir = "src/test/resources/interfiletypewithrevisioninname";
423 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
424 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530425 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530426
427 YangNode refNode = null;
428 YangNode selfNode = null;
429
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530430 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530431 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530432
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530433 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530434 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530435
436 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530437 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530438
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530439 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530440
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530441 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530442
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530443 if (rootNode.getName().equals("module1")) {
444 selfNode = rootNode;
445 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530446 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530447 refNode = rootNode;
448 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530449 }
450
451 // Check whether the data model tree returned is of type module.
452 assertThat(selfNode instanceof YangModule, is(true));
453
454 // Check whether the node type is set properly to module.
455 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
456
457 // Check whether the module name is set correctly.
458 YangModule yangNode = (YangModule) selfNode;
459 assertThat(yangNode.getName(), is("module1"));
460
461 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
462 YangLeaf leafInfo = leafIterator.next();
463
464 assertThat(leafInfo.getName(), is("invalid-interval"));
465 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
466 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
467
468 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
469 is((YangTypeDef) refNode.getChild()));
470
471 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
472
473 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
474
475 // Check for the effective built-in type.
476 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
477
478 // Check for the restriction.
479 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
480 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
481 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
482 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
483 }
484
485 /**
486 * Checks hierarchical inter file type linking.
487 */
488 @Test
489 public void processHierarchicalInterFileTypeLinking()
490 throws IOException, ParserException, MojoExecutionException {
491
492 String searchDir = "src/test/resources/hierarchicalinterfiletype";
493 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
494 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530495 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530496
497 YangNode refNode1 = null;
498 YangNode refNode2 = null;
499 YangNode selfNode = null;
500
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530501 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530502 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530503
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530504 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530505 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530506
507 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530508 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530509
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530510 for (YangNode rootNode : utilManager.getYangNodeSet()) {
511 if (rootNode.getName().equals("ietf-network-topology")) {
512 selfNode = rootNode;
513 } else if (rootNode.getName().equals("ietf-network")) {
514 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530515 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530516 refNode2 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530517 }
518 }
519
520 // Check whether the data model tree returned is of type module.
521 assertThat(selfNode instanceof YangModule, is(true));
522
523 // Check whether the node type is set properly to module.
524 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
525
526 // Check whether the module name is set correctly.
527 YangModule yangNode = (YangModule) selfNode;
528 assertThat(yangNode.getName(), is("ietf-network-topology"));
529
530 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
531 YangLeaf leafInfo = leafIterator.next();
532
533 assertThat(leafInfo.getName(), is("source-node"));
534 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
535 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
536
537 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
538 is((YangTypeDef) refNode1.getChild()));
539
540 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
541
542 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
543
544 // Check for the effective built-in type.
545 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
546
547 // Check for the restriction.
548 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
549 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
550 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
551 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
552 }
553
554 /**
555 * Checks hierarchical intra with inter file type linking.
556 */
557 @Test
558 public void processHierarchicalIntraWithInterFileTypeLinking()
559 throws IOException, ParserException, MojoExecutionException {
560
561 String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
562 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
563 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530564 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530565
566 YangNode refNode1 = null;
567 YangNode selfNode = null;
568
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530569 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530570 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530571
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530572 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530573 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530574
575 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530576 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530577
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530578 for (YangNode rootNode : utilManager.getYangNodeSet()) {
579 if (rootNode.getName().equals("ietf-network")) {
580 selfNode = rootNode;
581 } else if (rootNode.getName().equals("ietf-inet-types")) {
582 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530583 }
584 }
585
586 // Check whether the data model tree returned is of type module.
587 assertThat(selfNode instanceof YangModule, is(true));
588
589 // Check whether the node type is set properly to module.
590 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
591
592 // Check whether the module name is set correctly.
593 YangModule yangNode = (YangModule) selfNode;
594 assertThat(yangNode.getName(), is("ietf-network"));
595
596 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
597 YangLeaf leafInfo = leafIterator.next();
598
599 assertThat(leafInfo.getName(), is("node-ref"));
600 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
601 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
602
603 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
604 is((YangTypeDef) selfNode.getChild()));
605
606 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
607
608 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
609
610 // Check for the effective built-in type.
611 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
612
613 // Check for the restriction.
614 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
615 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
616 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
617 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
618 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530619
620 /**
621 * Checks hierarchical intra with inter file type linking.
622 */
623 @Test
624 public void interFileWithUsesReferringType()
625 throws IOException, ParserException, MojoExecutionException {
626
627 String searchDir = "src/test/resources/interfilewithusesreferringtype";
628 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
629 utilManager.parseYangFileInfoSet();
630 utilManager.resolveDependenciesUsingLinker();
631
632 String userDir = System.getProperty("user.dir");
633 YangPluginConfig yangPluginConfig = new YangPluginConfig();
634 yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
635
636 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
637
638 deleteDirectory(userDir + "/target/interfilewithusesreferringtype/");
639
640 }
641
642 /**
643 * Checks hierarchical intra with inter file type linking.
644 */
645 @Test
646 public void file1UsesFile2TypeDefFile3Type()
647 throws IOException, ParserException, MojoExecutionException {
648
649 String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
650 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
651 utilManager.parseYangFileInfoSet();
652 utilManager.resolveDependenciesUsingLinker();
653
654 String userDir = System.getProperty("user.dir");
655 YangPluginConfig yangPluginConfig = new YangPluginConfig();
656 yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
657
658 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
659
660 deleteDirectory(userDir + "/target/file1UsesFile2TypeDefFile3Type/");
661
662 }
663
664
665 /**
666 * Checks hierarchical intra with inter file type linking.
667 */
668 @Test
669 public void interFileIetf()
670 throws IOException, ParserException, MojoExecutionException {
671
672 String searchDir = "src/test/resources/interfileietf";
673 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
674 utilManager.parseYangFileInfoSet();
675 utilManager.resolveDependenciesUsingLinker();
676
677 String userDir = System.getProperty("user.dir");
678 YangPluginConfig yangPluginConfig = new YangPluginConfig();
679 yangPluginConfig.setCodeGenDir("target/interfileietf/");
680
681 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
682
683 deleteDirectory(userDir + "/target/interfileietf/");
684
685 }
686
687
688 /**
689 * Checks hierarchical intra with inter file type linking.
690 */
691 @Test
692 public void usesInContainer()
693 throws IOException, ParserException, MojoExecutionException {
694
695 String searchDir = "src/test/resources/usesInContainer";
696 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
697 utilManager.parseYangFileInfoSet();
698 utilManager.resolveDependenciesUsingLinker();
699
700 String userDir = System.getProperty("user.dir");
701 YangPluginConfig yangPluginConfig = new YangPluginConfig();
702 yangPluginConfig.setCodeGenDir("target/usesInContainer/");
703
704 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
705
706 deleteDirectory(userDir + "/target/usesInContainer/");
707
708 }
709
710
711 /**
712 * Checks hierarchical intra with inter file type linking.
713 */
714 @Test
715 public void groupingNodeSameAsModule()
716 throws IOException, ParserException, MojoExecutionException {
717
718 String searchDir = "src/test/resources/groupingNodeSameAsModule";
719 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
720 utilManager.parseYangFileInfoSet();
721 utilManager.resolveDependenciesUsingLinker();
722
723 String userDir = System.getProperty("user.dir");
724 YangPluginConfig yangPluginConfig = new YangPluginConfig();
725 yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
726
727 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
728
729 deleteDirectory(userDir + "/target/groupingNodeSameAsModule/");
730
731 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530732}