blob: 1554c5f4c8941e0564fd69fd7b8045a3724e1f6c [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
Gaurav Agrawalc5f63272016-06-16 13:09:53 +053017package org.onosproject.yangutils.plugin.manager;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053018
19import java.io.IOException;
20import java.util.Iterator;
21import java.util.ListIterator;
22import org.apache.maven.plugin.MojoExecutionException;
janani be18b5342016-07-13 21:06:41 +053023import org.junit.Rule;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053024import org.junit.Test;
janani be18b5342016-07-13 21:06:41 +053025import org.junit.rules.ExpectedException;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053026import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053027import org.onosproject.yangutils.datamodel.YangDerivedInfo;
28import org.onosproject.yangutils.datamodel.YangGrouping;
29import org.onosproject.yangutils.datamodel.YangLeaf;
janani be18b5342016-07-13 21:06:41 +053030import org.onosproject.yangutils.datamodel.YangLeafRef;
31import org.onosproject.yangutils.datamodel.YangList;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053032import org.onosproject.yangutils.datamodel.YangModule;
33import org.onosproject.yangutils.datamodel.YangNode;
34import org.onosproject.yangutils.datamodel.YangNodeType;
35import org.onosproject.yangutils.datamodel.YangTypeDef;
36import org.onosproject.yangutils.datamodel.YangUses;
Bharat saraswal96dfef02016-06-16 00:29:12 +053037import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
janani be18b5342016-07-13 21:06:41 +053038import org.onosproject.yangutils.linker.exceptions.LinkerException;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053039import org.onosproject.yangutils.linker.impl.YangLinkerManager;
40import org.onosproject.yangutils.parser.exceptions.ParserException;
janani be18b5342016-07-13 21:06:41 +053041import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053042import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053043import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053044
45import static org.hamcrest.CoreMatchers.nullValue;
46import static org.hamcrest.MatcherAssert.assertThat;
47import static org.hamcrest.core.Is.is;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053048import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
janani be18b5342016-07-13 21:06:41 +053049import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
50import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053051import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
Bharat saraswal96dfef02016-06-16 00:29:12 +053052import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053053import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053054
55/**
56 * Test cases for testing inter file linking.
57 */
58public class InterFileLinkingTest {
59
janani be18b5342016-07-13 21:06:41 +053060 @Rule
61 public ExpectedException thrown = ExpectedException.none();
62
63 private final YangUtilsParserManager manager = new YangUtilsParserManager();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053064 private final YangUtilManager utilManager = new YangUtilManager();
65 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
66
67 /**
68 * Checks inter file type linking.
69 */
70 @Test
71 public void processInterFileTypeLinking()
72 throws IOException, ParserException, MojoExecutionException {
73
74 String searchDir = "src/test/resources/interfiletype";
75 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
76 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053077 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053078
79 YangNode refNode = null;
80 YangNode selfNode = null;
81
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053082 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053083 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053084
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053085 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053086 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053087
88 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053089 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053090
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053091 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053092
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053093 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053094
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053095 if (rootNode.getName().equals("module1")) {
96 selfNode = rootNode;
97 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053098 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053099 refNode = rootNode;
100 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530101 }
102
103 // Check whether the data model tree returned is of type module.
104 assertThat(selfNode instanceof YangModule, is(true));
105
106 // Check whether the node type is set properly to module.
107 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
108
109 // Check whether the module name is set correctly.
110 YangModule yangNode = (YangModule) selfNode;
111 assertThat(yangNode.getName(), is("module1"));
112
113 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
114 YangLeaf leafInfo = leafIterator.next();
115
116 assertThat(leafInfo.getName(), is("invalid-interval"));
117 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
118 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
119
120 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
121 is((YangTypeDef) refNode.getChild()));
122
123 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
124
125 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
126
127 // Check for the effective built-in type.
128 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
129
130 // Check for the restriction.
131 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
132 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
133 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
134 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
135 }
136
137 /**
138 * Checks inter file uses linking.
139 */
140 @Test
141 public void processInterFileUsesLinking()
142 throws IOException, ParserException, MojoExecutionException {
143
144 String searchDir = "src/test/resources/interfileuses";
145 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
146 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530147 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530148
149 YangNode refNode = null;
150 YangNode selfNode = null;
151
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530152 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530153 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530154
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530155 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530156 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530157
158 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530159 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530160
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530161 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530162
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530163 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530164
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530165 if (rootNode.getName().equals("module1")) {
166 selfNode = rootNode;
167 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530168 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530169 refNode = rootNode;
170 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530171 }
172
173 // Check whether the data model tree returned is of type module.
174 assertThat((selfNode instanceof YangModule), is(true));
175
176 // Check whether the node type is set properly to module.
177 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
178
179 // Check whether the module name is set correctly.
180 YangModule yangNode = (YangModule) selfNode;
181 assertThat(yangNode.getName(), is("module1"));
182
183 ListIterator<YangLeaf> leafIterator;
184 YangLeaf leafInfo;
185
186 // Check whether grouping is the sibling of module's child.
187 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
188
189 YangGrouping grouping = (YangGrouping) refNode.getChild();
190 leafIterator = grouping.getListOfLeaf().listIterator();
191 leafInfo = leafIterator.next();
192
193 // Check whether the information in the leaf is correct under grouping.
194 assertThat(leafInfo.getName(), is("hello"));
195 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
196 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
197
198 // Check whether uses is module's child.
199 assertThat((yangNode.getChild() instanceof YangUses), is(true));
200 YangUses uses = (YangUses) yangNode.getChild();
201
202 // Check whether uses get resolved.
203 assertThat(uses.getResolvableStatus(),
204 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530205 }
206
207 /**
208 * Checks inter file type linking with include list.
209 */
210 @Test
211 public void processInterFileTypeLinkingWithIncludeList()
212 throws IOException, ParserException, MojoExecutionException {
213
214 String searchDir = "src/test/resources/interfiletypewithinclude";
215 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
216 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530217 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530218
219 YangNode refNode = null;
220 YangNode selfNode = null;
221
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530222 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530223 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530224
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530225 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530226 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530227
228 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530229 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530230
231 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530232 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530233
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530234 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530235
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530236 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530237
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530238 if (rootNode.getName().equals("module1")) {
239 selfNode = rootNode;
240 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530241 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530242 refNode = rootNode;
243 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530244 }
245
246 // Check whether the data model tree returned is of type module.
247 assertThat(selfNode instanceof YangModule, is(true));
248
249 // Check whether the node type is set properly to module.
250 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
251
252 // Check whether the module name is set correctly.
253 YangModule yangNode = (YangModule) selfNode;
254 assertThat(yangNode.getName(), is("module1"));
255
256 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
257 YangLeaf leafInfo = leafIterator.next();
258
259 assertThat(leafInfo.getName(), is("invalid-interval"));
260 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
261 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
262
263 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
264 is((YangTypeDef) refNode.getChild()));
265
266 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
267
268 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
269
270 // Check for the effective built-in type.
271 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
272
273 // Check for the restriction.
274 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
275 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
276 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
277 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
278 }
279
280 /**
281 * Checks inter file uses linking with include list.
282 */
283 @Test
284 public void processInterFileUsesLinkingWithInclude()
285 throws IOException, ParserException, MojoExecutionException {
286
287 String searchDir = "src/test/resources/interfileuseswithinclude";
288 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
289 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530290 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530291
292 YangNode refNode = null;
293 YangNode selfNode = null;
294
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530295 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530296 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530297
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530298 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530299 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530300
301 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530302 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530303
304 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530305 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530306
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530307 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530308
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530309 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530310
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530311 if (rootNode.getName().equals("module1")) {
312 selfNode = rootNode;
313 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530314 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530315 refNode = rootNode;
316 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530317 }
318
319 // Check whether the data model tree returned is of type module.
320 assertThat((selfNode instanceof YangModule), is(true));
321
322 // Check whether the node type is set properly to module.
323 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
324
325 // Check whether the module name is set correctly.
326 YangModule yangNode = (YangModule) selfNode;
327 assertThat(yangNode.getName(), is("module1"));
328
329 ListIterator<YangLeaf> leafIterator;
330 YangLeaf leafInfo;
331
332 // Check whether grouping is the sibling of module's child.
333 assertThat((refNode.getChild() instanceof YangGrouping), is(true));
334
335 YangGrouping grouping = (YangGrouping) refNode.getChild();
336 leafIterator = grouping.getListOfLeaf().listIterator();
337 leafInfo = leafIterator.next();
338
339 // Check whether the information in the leaf is correct under grouping.
340 assertThat(leafInfo.getName(), is("hello"));
341 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
342 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
343
344 // Check whether uses is module's child.
345 assertThat((yangNode.getChild() instanceof YangUses), is(true));
346 YangUses uses = (YangUses) yangNode.getChild();
347
348 // Check whether uses get resolved.
349 assertThat(uses.getResolvableStatus(),
350 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530351 }
352
353 /**
354 * Checks inter file type linking with revision.
355 */
356 @Test
357 public void processInterFileTypeLinkingWithRevision()
358 throws IOException, ParserException, MojoExecutionException {
359
360 String searchDir = "src/test/resources/interfiletypewithrevision";
361 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
362 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530363 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530364
365 YangNode refNode = null;
366 YangNode selfNode = null;
367
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530368 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530369 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530370
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530371 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530372 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530373
374 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530375 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530376
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530377 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530378
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530379 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530380
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530381 if (rootNode.getName().equals("module1")) {
382 selfNode = rootNode;
383 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530384 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530385 refNode = rootNode;
386 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530387 }
388
389 // Check whether the data model tree returned is of type module.
390 assertThat(selfNode instanceof YangModule, is(true));
391
392 // Check whether the node type is set properly to module.
393 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
394
395 // Check whether the module name is set correctly.
396 YangModule yangNode = (YangModule) selfNode;
397 assertThat(yangNode.getName(), is("module1"));
398
399 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
400 YangLeaf leafInfo = leafIterator.next();
401
402 assertThat(leafInfo.getName(), is("invalid-interval"));
403 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
404 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
405
406 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
407 is((YangTypeDef) refNode.getChild()));
408
409 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
410
411 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
412
413 // Check for the effective built-in type.
414 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
415
416 // Check for the restriction.
417 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
418 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
419 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
420 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
421 }
422
423 /**
424 * Checks inter file type linking with revision in name.
425 */
426 @Test
427 public void processInterFileTypeLinkingWithRevisionInName()
428 throws IOException, ParserException, MojoExecutionException {
429
430 String searchDir = "src/test/resources/interfiletypewithrevisioninname";
431 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
432 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530433 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530434
435 YangNode refNode = null;
436 YangNode selfNode = null;
437
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530438 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530439 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530440
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530441 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530442 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530443
444 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530445 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530446
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530447 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530448
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530449 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530450
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530451 if (rootNode.getName().equals("module1")) {
452 selfNode = rootNode;
453 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530454 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530455 refNode = rootNode;
456 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530457 }
458
459 // Check whether the data model tree returned is of type module.
460 assertThat(selfNode instanceof YangModule, is(true));
461
462 // Check whether the node type is set properly to module.
463 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
464
465 // Check whether the module name is set correctly.
466 YangModule yangNode = (YangModule) selfNode;
467 assertThat(yangNode.getName(), is("module1"));
468
469 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
470 YangLeaf leafInfo = leafIterator.next();
471
472 assertThat(leafInfo.getName(), is("invalid-interval"));
473 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
474 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
475
476 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
477 is((YangTypeDef) refNode.getChild()));
478
479 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
480
481 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
482
483 // Check for the effective built-in type.
484 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
485
486 // Check for the restriction.
487 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
488 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
489 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
490 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
491 }
492
493 /**
494 * Checks hierarchical inter file type linking.
495 */
496 @Test
497 public void processHierarchicalInterFileTypeLinking()
498 throws IOException, ParserException, MojoExecutionException {
499
500 String searchDir = "src/test/resources/hierarchicalinterfiletype";
501 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
502 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530503 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530504
505 YangNode refNode1 = null;
506 YangNode refNode2 = null;
507 YangNode selfNode = null;
508
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530509 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530510 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530511
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530512 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530513 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530514
515 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530516 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530517
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530518 for (YangNode rootNode : utilManager.getYangNodeSet()) {
519 if (rootNode.getName().equals("ietf-network-topology")) {
520 selfNode = rootNode;
521 } else if (rootNode.getName().equals("ietf-network")) {
522 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530523 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530524 refNode2 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530525 }
526 }
527
528 // Check whether the data model tree returned is of type module.
529 assertThat(selfNode instanceof YangModule, is(true));
530
531 // Check whether the node type is set properly to module.
532 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
533
534 // Check whether the module name is set correctly.
535 YangModule yangNode = (YangModule) selfNode;
536 assertThat(yangNode.getName(), is("ietf-network-topology"));
537
538 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
539 YangLeaf leafInfo = leafIterator.next();
540
541 assertThat(leafInfo.getName(), is("source-node"));
542 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
543 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
544
545 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
546 is((YangTypeDef) refNode1.getChild()));
547
548 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
549
550 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
551
552 // Check for the effective built-in type.
553 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
554
555 // Check for the restriction.
556 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
557 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
558 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
559 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
560 }
561
562 /**
563 * Checks hierarchical intra with inter file type linking.
564 */
565 @Test
566 public void processHierarchicalIntraWithInterFileTypeLinking()
567 throws IOException, ParserException, MojoExecutionException {
568
569 String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
570 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
571 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530572 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530573
574 YangNode refNode1 = null;
575 YangNode selfNode = null;
576
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530577 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530578 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530579
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530580 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530581 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530582
583 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530584 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530585
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530586 for (YangNode rootNode : utilManager.getYangNodeSet()) {
587 if (rootNode.getName().equals("ietf-network")) {
588 selfNode = rootNode;
589 } else if (rootNode.getName().equals("ietf-inet-types")) {
590 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530591 }
592 }
593
594 // Check whether the data model tree returned is of type module.
595 assertThat(selfNode instanceof YangModule, is(true));
596
597 // Check whether the node type is set properly to module.
598 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
599
600 // Check whether the module name is set correctly.
601 YangModule yangNode = (YangModule) selfNode;
602 assertThat(yangNode.getName(), is("ietf-network"));
603
604 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
605 YangLeaf leafInfo = leafIterator.next();
606
607 assertThat(leafInfo.getName(), is("node-ref"));
608 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
609 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
610
611 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
612 is((YangTypeDef) selfNode.getChild()));
613
614 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
615
616 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
617
618 // Check for the effective built-in type.
619 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
620
621 // Check for the restriction.
622 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
623 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
624 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
625 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
626 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530627
628 /**
629 * Checks hierarchical intra with inter file type linking.
630 */
631 @Test
632 public void interFileWithUsesReferringType()
633 throws IOException, ParserException, MojoExecutionException {
634
635 String searchDir = "src/test/resources/interfilewithusesreferringtype";
636 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
637 utilManager.parseYangFileInfoSet();
638 utilManager.resolveDependenciesUsingLinker();
639
640 String userDir = System.getProperty("user.dir");
641 YangPluginConfig yangPluginConfig = new YangPluginConfig();
642 yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
643
644 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
645
646 deleteDirectory(userDir + "/target/interfilewithusesreferringtype/");
647
648 }
649
650 /**
651 * Checks hierarchical intra with inter file type linking.
652 */
653 @Test
654 public void file1UsesFile2TypeDefFile3Type()
655 throws IOException, ParserException, MojoExecutionException {
656
657 String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
658 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
659 utilManager.parseYangFileInfoSet();
660 utilManager.resolveDependenciesUsingLinker();
661
662 String userDir = System.getProperty("user.dir");
663 YangPluginConfig yangPluginConfig = new YangPluginConfig();
664 yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
665
666 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
667
668 deleteDirectory(userDir + "/target/file1UsesFile2TypeDefFile3Type/");
669
670 }
671
672
673 /**
674 * Checks hierarchical intra with inter file type linking.
675 */
676 @Test
677 public void interFileIetf()
678 throws IOException, ParserException, MojoExecutionException {
679
680 String searchDir = "src/test/resources/interfileietf";
681 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
682 utilManager.parseYangFileInfoSet();
683 utilManager.resolveDependenciesUsingLinker();
684
685 String userDir = System.getProperty("user.dir");
686 YangPluginConfig yangPluginConfig = new YangPluginConfig();
687 yangPluginConfig.setCodeGenDir("target/interfileietf/");
688
689 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
690
691 deleteDirectory(userDir + "/target/interfileietf/");
692
693 }
694
695
696 /**
697 * Checks hierarchical intra with inter file type linking.
698 */
699 @Test
700 public void usesInContainer()
701 throws IOException, ParserException, MojoExecutionException {
702
703 String searchDir = "src/test/resources/usesInContainer";
704 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
705 utilManager.parseYangFileInfoSet();
706 utilManager.resolveDependenciesUsingLinker();
707
708 String userDir = System.getProperty("user.dir");
709 YangPluginConfig yangPluginConfig = new YangPluginConfig();
710 yangPluginConfig.setCodeGenDir("target/usesInContainer/");
711
712 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
713
714 deleteDirectory(userDir + "/target/usesInContainer/");
715
716 }
717
718
719 /**
720 * Checks hierarchical intra with inter file type linking.
721 */
722 @Test
723 public void groupingNodeSameAsModule()
724 throws IOException, ParserException, MojoExecutionException {
725
726 String searchDir = "src/test/resources/groupingNodeSameAsModule";
727 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
728 utilManager.parseYangFileInfoSet();
729 utilManager.resolveDependenciesUsingLinker();
730
731 String userDir = System.getProperty("user.dir");
732 YangPluginConfig yangPluginConfig = new YangPluginConfig();
733 yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
734
735 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
736
737 deleteDirectory(userDir + "/target/groupingNodeSameAsModule/");
738
739 }
janani be18b5342016-07-13 21:06:41 +0530740
741 /**
742 * Checks inter file leafref linking.
743 */
744 @Test
745 public void processInterFileLeafrefLinking()
746 throws IOException, ParserException, MojoExecutionException {
747
748 String searchDir = "src/test/resources/interfileleafref";
749 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
750 utilManager.parseYangFileInfoSet();
751 utilManager.createYangNodeSet();
752 YangNode refNode = null;
753 YangNode selfNode = null;
754
755 // Create YANG node set
756 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
757
758 // Add references to import list.
759 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
760
761 // Carry out inter-file linking.
762 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
763
764 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
765
766 YangNode rootNode = yangNodeIterator.next();
767
768 if (rootNode.getName().equals("module1")) {
769 selfNode = rootNode;
770 refNode = yangNodeIterator.next();
771 } else {
772 refNode = rootNode;
773 selfNode = yangNodeIterator.next();
774 }
775
776 // Check whether the data model tree returned is of type module.
777 assertThat(selfNode instanceof YangModule, is(true));
778
779 // Check whether the node type is set properly to module.
780 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
781
782 // Check whether the module name is set correctly.
783 YangModule yangNode = (YangModule) selfNode;
784 assertThat(yangNode.getName(), is("module1"));
785
786 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
787 YangLeaf leafInfo = leafIterator.next();
788
789 assertThat(leafInfo.getName(), is("invalid-interval"));
790 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
791 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
792
793 // Check whether the data model tree returned is of type module.
794 assertThat(refNode instanceof YangModule, is(true));
795
796 // Check whether the node type is set properly to module.
797 assertThat(refNode.getNodeType(), is(MODULE_NODE));
798
799 // Check whether the module name is set correctly.
800 YangModule yangNode1 = (YangModule) refNode;
801 assertThat(yangNode1.getName(), is("module2"));
802 YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
803
804 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
805
806 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
807 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
808
809 assertThat(leafref.getEffectiveDataType().getDataType(),
810 is(YangDataTypes.STRING));
811 }
812
813 /**
814 * Checks error scenerio where the node is invalid.
815 */
816 @Test
817 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
818 throws IOException, ParserException {
819
820 thrown.expect(LinkerException.class);
821 thrown.expectMessage(
822 "YANG file error: Unable to find base leaf/leaf-list for given leafref");
823 String searchDir = "src/test/resources/interFileInvalidNode";
824 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
825 utilManager.parseYangFileInfoSet();
826 utilManager.createYangNodeSet();
827
828 YangNode selfNode = null;
829
830 // Create YANG node set
831 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
832
833 // Add references to import list.
834 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
835
836 // Carry out inter-file linking.
837 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
838 }
839
840 /**
841 * Checks the error scenerio when there is no referref leaf/leaf-list in any file.
842 */
843 @Test
844 public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
845 throws IOException, ParserException {
846
847 thrown.expect(LinkerException.class);
848 thrown.expectMessage(
849 "YANG file error: Unable to find base leaf/leaf-list for given leafref");
850 String searchDir = "src/test/resources/interfileleafrefwithinvaliddestinationnode";
851 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
852 utilManager.parseYangFileInfoSet();
853 utilManager.createYangNodeSet();
854 YangNode selfNode = null;
855
856 // Create YANG node set
857 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
858
859 // Add references to import list.
860 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
861
862 // Carry out inter-file linking.
863 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
864 }
865
866 /**
867 * Checks inter file resolution when leafref from grouping refers to other file.
868 */
869 @Test
870 public void processInterFileLeafrefFromGroupingRefersToOtherFile()
871 throws IOException, ParserException {
872
873 String searchDir = "src/test/resources/interfileleafreffromgroupingreferstootherfile";
874 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
875 utilManager.parseYangFileInfoSet();
876 utilManager.createYangNodeSet();
877 YangNode selfNode = null;
878 YangNode refNode = null;
879
880 // Create YANG node set
881 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
882
883 // Add references to import list.
884 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
885
886 // Carry out inter-file linking.
887 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
888
889 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
890
891 YangNode rootNode = yangNodeIterator.next();
892
893 if (rootNode.getName().equals("module1")) {
894 selfNode = rootNode;
895 refNode = yangNodeIterator.next();
896 } else {
897 refNode = rootNode;
898 selfNode = yangNodeIterator.next();
899 }
900
901 // Check whether the data model tree returned is of type module.
902 assertThat(selfNode instanceof YangModule, is(true));
903
904 // Check whether the node type is set properly to module.
905 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
906
907 // Check whether the module name is set correctly.
908 YangModule yangNode = (YangModule) selfNode;
909 assertThat(yangNode.getName(), is("module1"));
910
911 YangList list = (YangList) yangNode.getChild().getChild();
912 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
913 YangLeaf leafInfo = leafIterator.next();
914
915 assertThat(leafInfo.getName(), is("link-tp"));
916 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
917 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
918
919 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
920
921 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
922 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
923 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
924
925 assertThat(leafref.getEffectiveDataType().getDataType(),
926 is(YangDataTypes.STRING));
927 }
928
929 /**
930 * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
931 */
932 @Test
933 public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
934 throws IOException, ParserException {
935
936 String searchDir = "src/test/resources/interfileleafrefreferstomultipleleafrefinmultiplefiles";
937 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
938 utilManager.parseYangFileInfoSet();
939 utilManager.createYangNodeSet();
940 YangNode refNode1 = null;
941 YangNode refNode2 = null;
942 YangNode selfNode = null;
943
944 // Create YANG node set
945 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
946
947 // Add references to import list.
948 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
949
950 // Carry out inter-file linking.
951 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
952
953 for (YangNode rootNode : utilManager.getYangNodeSet()) {
954 if (rootNode.getName().equals("ietf-network-topology")) {
955 selfNode = rootNode;
956 } else if (rootNode.getName().equals("ietf-network")) {
957 refNode1 = rootNode;
958 } else {
959 refNode2 = rootNode;
960 }
961 }
962 // Check whether the data model tree returned is of type module.
963 assertThat(selfNode instanceof YangModule, is(true));
964
965 // Check whether the node type is set properly to module.
966 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
967
968 // Check whether the module name is set correctly.
969 YangModule yangNode = (YangModule) selfNode;
970 assertThat(yangNode.getName(), is("ietf-network-topology"));
971
972 YangList list = (YangList) yangNode.getChild().getChild();
973 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
974 YangLeaf leafInfo = leafIterator.next();
975
976 assertThat(leafInfo.getName(), is("link-tp"));
977 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
978 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
979
980 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
981
982 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
983 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
984 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
985
986 assertThat(leafref.getEffectiveDataType().getDataType(),
987 is(YangDataTypes.STRING));
988 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530989}