blob: b5fd40b689366ca35ebc553bad1ad88dc1a2b8a9 [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;
Bharat saraswalb1170bd2016-07-14 13:26:18 +053022
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053023import org.apache.maven.plugin.MojoExecutionException;
janani be18b5342016-07-13 21:06:41 +053024import org.junit.Rule;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053025import org.junit.Test;
janani be18b5342016-07-13 21:06:41 +053026import org.junit.rules.ExpectedException;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053027import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053028import org.onosproject.yangutils.datamodel.YangDerivedInfo;
29import org.onosproject.yangutils.datamodel.YangGrouping;
30import org.onosproject.yangutils.datamodel.YangLeaf;
janani be18b5342016-07-13 21:06:41 +053031import org.onosproject.yangutils.datamodel.YangLeafRef;
32import org.onosproject.yangutils.datamodel.YangList;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053033import org.onosproject.yangutils.datamodel.YangModule;
34import org.onosproject.yangutils.datamodel.YangNode;
35import org.onosproject.yangutils.datamodel.YangNodeType;
36import org.onosproject.yangutils.datamodel.YangTypeDef;
37import org.onosproject.yangutils.datamodel.YangUses;
Bharat saraswal96dfef02016-06-16 00:29:12 +053038import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
janani be18b5342016-07-13 21:06:41 +053039import org.onosproject.yangutils.linker.exceptions.LinkerException;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053040import org.onosproject.yangutils.linker.impl.YangLinkerManager;
41import org.onosproject.yangutils.parser.exceptions.ParserException;
janani be18b5342016-07-13 21:06:41 +053042import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053043import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053044import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053045
46import static org.hamcrest.CoreMatchers.nullValue;
47import static org.hamcrest.MatcherAssert.assertThat;
48import static org.hamcrest.core.Is.is;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053049import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
janani be18b5342016-07-13 21:06:41 +053050import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
51import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053052import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
Bharat saraswal96dfef02016-06-16 00:29:12 +053053import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053054import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053055
56/**
57 * Test cases for testing inter file linking.
58 */
59public class InterFileLinkingTest {
60
janani be18b5342016-07-13 21:06:41 +053061 @Rule
62 public ExpectedException thrown = ExpectedException.none();
63
64 private final YangUtilsParserManager manager = new YangUtilsParserManager();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053065 private final YangUtilManager utilManager = new YangUtilManager();
66 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
67
68 /**
69 * Checks inter file type linking.
70 */
71 @Test
72 public void processInterFileTypeLinking()
73 throws IOException, ParserException, MojoExecutionException {
74
75 String searchDir = "src/test/resources/interfiletype";
76 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
77 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053078 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053079
80 YangNode refNode = null;
81 YangNode selfNode = null;
82
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053083 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053084 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053085
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053086 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053087 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053088
89 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053090 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053091
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053092 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053093
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053094 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053095
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053096 if (rootNode.getName().equals("module1")) {
97 selfNode = rootNode;
98 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053099 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530100 refNode = rootNode;
101 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530102 }
103
104 // Check whether the data model tree returned is of type module.
105 assertThat(selfNode instanceof YangModule, is(true));
106
107 // Check whether the node type is set properly to module.
108 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
109
110 // Check whether the module name is set correctly.
111 YangModule yangNode = (YangModule) selfNode;
112 assertThat(yangNode.getName(), is("module1"));
113
114 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
115 YangLeaf leafInfo = leafIterator.next();
116
117 assertThat(leafInfo.getName(), is("invalid-interval"));
118 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
119 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
120
121 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
122 is((YangTypeDef) refNode.getChild()));
123
124 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
125
126 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
127
128 // Check for the effective built-in type.
129 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
130
131 // Check for the restriction.
132 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
133 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
134 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
135 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
136 }
137
138 /**
139 * Checks inter file uses linking.
140 */
141 @Test
142 public void processInterFileUsesLinking()
143 throws IOException, ParserException, MojoExecutionException {
144
145 String searchDir = "src/test/resources/interfileuses";
146 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
147 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530148 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530149
150 YangNode refNode = null;
151 YangNode selfNode = null;
152
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530153 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530154 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530155
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530156 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530157 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530158
159 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530160 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530161
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530162 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530163
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530164 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530165
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530166 if (rootNode.getName().equals("module1")) {
167 selfNode = rootNode;
168 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530169 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530170 refNode = rootNode;
171 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530172 }
173
174 // Check whether the data model tree returned is of type module.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530175 assertThat(selfNode instanceof YangModule, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530176
177 // Check whether the node type is set properly to module.
178 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
179
180 // Check whether the module name is set correctly.
181 YangModule yangNode = (YangModule) selfNode;
182 assertThat(yangNode.getName(), is("module1"));
183
184 ListIterator<YangLeaf> leafIterator;
185 YangLeaf leafInfo;
186
187 // Check whether grouping is the sibling of module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530188 assertThat(refNode.getChild() instanceof YangGrouping, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530189
190 YangGrouping grouping = (YangGrouping) refNode.getChild();
191 leafIterator = grouping.getListOfLeaf().listIterator();
192 leafInfo = leafIterator.next();
193
194 // Check whether the information in the leaf is correct under grouping.
195 assertThat(leafInfo.getName(), is("hello"));
196 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
197 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
198
199 // Check whether uses is module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530200 assertThat(yangNode.getChild() instanceof YangUses, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530201 YangUses uses = (YangUses) yangNode.getChild();
202
203 // Check whether uses get resolved.
204 assertThat(uses.getResolvableStatus(),
205 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530206 }
207
208 /**
209 * Checks inter file type linking with include list.
210 */
211 @Test
212 public void processInterFileTypeLinkingWithIncludeList()
213 throws IOException, ParserException, MojoExecutionException {
214
215 String searchDir = "src/test/resources/interfiletypewithinclude";
216 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
217 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530218 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530219
220 YangNode refNode = null;
221 YangNode selfNode = null;
222
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530223 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530224 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530225
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530226 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530227 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530228
229 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530230 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530231
232 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530233 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530234
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530235 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530236
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530237 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530238
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530239 if (rootNode.getName().equals("module1")) {
240 selfNode = rootNode;
241 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530242 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530243 refNode = rootNode;
244 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530245 }
246
247 // Check whether the data model tree returned is of type module.
248 assertThat(selfNode instanceof YangModule, is(true));
249
250 // Check whether the node type is set properly to module.
251 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
252
253 // Check whether the module name is set correctly.
254 YangModule yangNode = (YangModule) selfNode;
255 assertThat(yangNode.getName(), is("module1"));
256
257 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
258 YangLeaf leafInfo = leafIterator.next();
259
260 assertThat(leafInfo.getName(), is("invalid-interval"));
261 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
262 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
263
264 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
265 is((YangTypeDef) refNode.getChild()));
266
267 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
268
269 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
270
271 // Check for the effective built-in type.
272 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
273
274 // Check for the restriction.
275 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
276 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
277 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
278 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
279 }
280
281 /**
282 * Checks inter file uses linking with include list.
283 */
284 @Test
285 public void processInterFileUsesLinkingWithInclude()
286 throws IOException, ParserException, MojoExecutionException {
287
288 String searchDir = "src/test/resources/interfileuseswithinclude";
289 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
290 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530291 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530292
293 YangNode refNode = null;
294 YangNode selfNode = null;
295
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530296 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530297 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530298
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530299 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530300 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530301
302 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530303 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530304
305 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530306 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530307
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530308 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530309
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530310 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530311
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530312 if (rootNode.getName().equals("module1")) {
313 selfNode = rootNode;
314 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530315 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530316 refNode = rootNode;
317 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530318 }
319
320 // Check whether the data model tree returned is of type module.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530321 assertThat(selfNode instanceof YangModule, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530322
323 // Check whether the node type is set properly to module.
324 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
325
326 // Check whether the module name is set correctly.
327 YangModule yangNode = (YangModule) selfNode;
328 assertThat(yangNode.getName(), is("module1"));
329
330 ListIterator<YangLeaf> leafIterator;
331 YangLeaf leafInfo;
332
333 // Check whether grouping is the sibling of module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530334 assertThat(refNode.getChild() instanceof YangGrouping, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530335
336 YangGrouping grouping = (YangGrouping) refNode.getChild();
337 leafIterator = grouping.getListOfLeaf().listIterator();
338 leafInfo = leafIterator.next();
339
340 // Check whether the information in the leaf is correct under grouping.
341 assertThat(leafInfo.getName(), is("hello"));
342 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
343 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
344
345 // Check whether uses is module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530346 assertThat(yangNode.getChild() instanceof YangUses, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530347 YangUses uses = (YangUses) yangNode.getChild();
348
349 // Check whether uses get resolved.
350 assertThat(uses.getResolvableStatus(),
351 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530352 }
353
354 /**
355 * Checks inter file type linking with revision.
356 */
357 @Test
358 public void processInterFileTypeLinkingWithRevision()
359 throws IOException, ParserException, MojoExecutionException {
360
361 String searchDir = "src/test/resources/interfiletypewithrevision";
362 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
363 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530364 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530365
366 YangNode refNode = null;
367 YangNode selfNode = null;
368
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530369 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530370 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530371
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530372 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530373 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530374
375 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530376 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530377
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530378 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530379
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530380 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530381
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530382 if (rootNode.getName().equals("module1")) {
383 selfNode = rootNode;
384 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530385 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530386 refNode = rootNode;
387 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530388 }
389
390 // Check whether the data model tree returned is of type module.
391 assertThat(selfNode instanceof YangModule, is(true));
392
393 // Check whether the node type is set properly to module.
394 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
395
396 // Check whether the module name is set correctly.
397 YangModule yangNode = (YangModule) selfNode;
398 assertThat(yangNode.getName(), is("module1"));
399
400 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
401 YangLeaf leafInfo = leafIterator.next();
402
403 assertThat(leafInfo.getName(), is("invalid-interval"));
404 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
405 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
406
407 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
408 is((YangTypeDef) refNode.getChild()));
409
410 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
411
412 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
413
414 // Check for the effective built-in type.
415 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
416
417 // Check for the restriction.
418 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
419 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
420 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
421 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
422 }
423
424 /**
425 * Checks inter file type linking with revision in name.
426 */
427 @Test
428 public void processInterFileTypeLinkingWithRevisionInName()
429 throws IOException, ParserException, MojoExecutionException {
430
431 String searchDir = "src/test/resources/interfiletypewithrevisioninname";
432 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
433 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530434 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530435
436 YangNode refNode = null;
437 YangNode selfNode = null;
438
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530439 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530440 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530441
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530442 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530443 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530444
445 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530446 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530447
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530448 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530449
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530450 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530451
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530452 if (rootNode.getName().equals("module1")) {
453 selfNode = rootNode;
454 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530455 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530456 refNode = rootNode;
457 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530458 }
459
460 // Check whether the data model tree returned is of type module.
461 assertThat(selfNode instanceof YangModule, is(true));
462
463 // Check whether the node type is set properly to module.
464 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
465
466 // Check whether the module name is set correctly.
467 YangModule yangNode = (YangModule) selfNode;
468 assertThat(yangNode.getName(), is("module1"));
469
470 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
471 YangLeaf leafInfo = leafIterator.next();
472
473 assertThat(leafInfo.getName(), is("invalid-interval"));
474 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
475 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
476
477 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
478 is((YangTypeDef) refNode.getChild()));
479
480 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
481
482 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
483
484 // Check for the effective built-in type.
485 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
486
487 // Check for the restriction.
488 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
489 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
490 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
491 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
492 }
493
494 /**
495 * Checks hierarchical inter file type linking.
496 */
497 @Test
498 public void processHierarchicalInterFileTypeLinking()
499 throws IOException, ParserException, MojoExecutionException {
500
501 String searchDir = "src/test/resources/hierarchicalinterfiletype";
502 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
503 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530504 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530505
506 YangNode refNode1 = null;
507 YangNode refNode2 = null;
508 YangNode selfNode = null;
509
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530510 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530511 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530512
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530513 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530514 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530515
516 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530517 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530518
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530519 for (YangNode rootNode : utilManager.getYangNodeSet()) {
520 if (rootNode.getName().equals("ietf-network-topology")) {
521 selfNode = rootNode;
522 } else if (rootNode.getName().equals("ietf-network")) {
523 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530524 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530525 refNode2 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530526 }
527 }
528
529 // Check whether the data model tree returned is of type module.
530 assertThat(selfNode instanceof YangModule, is(true));
531
532 // Check whether the node type is set properly to module.
533 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
534
535 // Check whether the module name is set correctly.
536 YangModule yangNode = (YangModule) selfNode;
537 assertThat(yangNode.getName(), is("ietf-network-topology"));
538
539 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
540 YangLeaf leafInfo = leafIterator.next();
541
542 assertThat(leafInfo.getName(), is("source-node"));
543 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
544 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
545
546 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
547 is((YangTypeDef) refNode1.getChild()));
548
549 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
550
551 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
552
553 // Check for the effective built-in type.
554 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
555
556 // Check for the restriction.
557 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
558 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
559 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
560 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
561 }
562
563 /**
564 * Checks hierarchical intra with inter file type linking.
565 */
566 @Test
567 public void processHierarchicalIntraWithInterFileTypeLinking()
568 throws IOException, ParserException, MojoExecutionException {
569
570 String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
571 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
572 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530573 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530574
575 YangNode refNode1 = null;
576 YangNode selfNode = null;
577
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530578 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530579 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530580
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530581 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530582 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530583
584 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530585 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530586
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530587 for (YangNode rootNode : utilManager.getYangNodeSet()) {
588 if (rootNode.getName().equals("ietf-network")) {
589 selfNode = rootNode;
590 } else if (rootNode.getName().equals("ietf-inet-types")) {
591 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530592 }
593 }
594
595 // Check whether the data model tree returned is of type module.
596 assertThat(selfNode instanceof YangModule, is(true));
597
598 // Check whether the node type is set properly to module.
599 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
600
601 // Check whether the module name is set correctly.
602 YangModule yangNode = (YangModule) selfNode;
603 assertThat(yangNode.getName(), is("ietf-network"));
604
605 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
606 YangLeaf leafInfo = leafIterator.next();
607
608 assertThat(leafInfo.getName(), is("node-ref"));
609 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
610 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
611
612 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
613 is((YangTypeDef) selfNode.getChild()));
614
615 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
616
617 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
618
619 // Check for the effective built-in type.
620 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
621
622 // Check for the restriction.
623 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
624 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
625 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
626 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
627 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530628
629 /**
630 * Checks hierarchical intra with inter file type linking.
631 */
632 @Test
633 public void interFileWithUsesReferringType()
634 throws IOException, ParserException, MojoExecutionException {
635
636 String searchDir = "src/test/resources/interfilewithusesreferringtype";
637 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
638 utilManager.parseYangFileInfoSet();
639 utilManager.resolveDependenciesUsingLinker();
640
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530641 YangPluginConfig yangPluginConfig = new YangPluginConfig();
642 yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530643 yangPluginConfig.setManagerCodeGenDir("target/interfilewithusesreferringtype/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530644
645 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
646
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530647 deleteDirectory("target/interfilewithusesreferringtype/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530648
649 }
650
651 /**
652 * Checks hierarchical intra with inter file type linking.
653 */
654 @Test
655 public void file1UsesFile2TypeDefFile3Type()
656 throws IOException, ParserException, MojoExecutionException {
657
658 String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
659 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
660 utilManager.parseYangFileInfoSet();
661 utilManager.resolveDependenciesUsingLinker();
662
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530663 YangPluginConfig yangPluginConfig = new YangPluginConfig();
664 yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530665 yangPluginConfig.setManagerCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530666
667 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
668
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530669 deleteDirectory("target/file1UsesFile2TypeDefFile3Type/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530670
671 }
672
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530673 /**
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
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530685 YangPluginConfig yangPluginConfig = new YangPluginConfig();
686 yangPluginConfig.setCodeGenDir("target/interfileietf/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530687 yangPluginConfig.setManagerCodeGenDir("target/interfileietf/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530688
689 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
690
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530691 deleteDirectory("target/interfileietf/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530692
693 }
694
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530695 /**
696 * Checks hierarchical intra with inter file type linking.
697 */
698 @Test
699 public void usesInContainer()
700 throws IOException, ParserException, MojoExecutionException {
701
702 String searchDir = "src/test/resources/usesInContainer";
703 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
704 utilManager.parseYangFileInfoSet();
705 utilManager.resolveDependenciesUsingLinker();
706
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530707 YangPluginConfig yangPluginConfig = new YangPluginConfig();
708 yangPluginConfig.setCodeGenDir("target/usesInContainer/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530709 yangPluginConfig.setManagerCodeGenDir("target/usesInContainer/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530710
711 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
712
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530713 deleteDirectory("target/usesInContainer/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530714
715 }
716
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530717 /**
718 * Checks hierarchical intra with inter file type linking.
719 */
720 @Test
721 public void groupingNodeSameAsModule()
722 throws IOException, ParserException, MojoExecutionException {
723
724 String searchDir = "src/test/resources/groupingNodeSameAsModule";
725 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
726 utilManager.parseYangFileInfoSet();
727 utilManager.resolveDependenciesUsingLinker();
728
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530729 YangPluginConfig yangPluginConfig = new YangPluginConfig();
730 yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530731 yangPluginConfig.setManagerCodeGenDir("target/groupingNodeSameAsModule/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530732
733 utilManager.translateToJava(utilManager.getYangFileInfoSet(), yangPluginConfig);
734
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530735 deleteDirectory("target/groupingNodeSameAsModule/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530736
737 }
janani be18b5342016-07-13 21:06:41 +0530738
739 /**
740 * Checks inter file leafref linking.
741 */
742 @Test
743 public void processInterFileLeafrefLinking()
744 throws IOException, ParserException, MojoExecutionException {
745
746 String searchDir = "src/test/resources/interfileleafref";
747 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
748 utilManager.parseYangFileInfoSet();
749 utilManager.createYangNodeSet();
750 YangNode refNode = null;
751 YangNode selfNode = null;
752
753 // Create YANG node set
754 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
755
756 // Add references to import list.
757 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
758
759 // Carry out inter-file linking.
760 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
761
762 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
763
764 YangNode rootNode = yangNodeIterator.next();
765
766 if (rootNode.getName().equals("module1")) {
767 selfNode = rootNode;
768 refNode = yangNodeIterator.next();
769 } else {
770 refNode = rootNode;
771 selfNode = yangNodeIterator.next();
772 }
773
774 // Check whether the data model tree returned is of type module.
775 assertThat(selfNode instanceof YangModule, is(true));
776
777 // Check whether the node type is set properly to module.
778 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
779
780 // Check whether the module name is set correctly.
781 YangModule yangNode = (YangModule) selfNode;
782 assertThat(yangNode.getName(), is("module1"));
783
784 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
785 YangLeaf leafInfo = leafIterator.next();
786
787 assertThat(leafInfo.getName(), is("invalid-interval"));
788 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
789 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
790
791 // Check whether the data model tree returned is of type module.
792 assertThat(refNode instanceof YangModule, is(true));
793
794 // Check whether the node type is set properly to module.
795 assertThat(refNode.getNodeType(), is(MODULE_NODE));
796
797 // Check whether the module name is set correctly.
798 YangModule yangNode1 = (YangModule) refNode;
799 assertThat(yangNode1.getName(), is("module2"));
800 YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
801
802 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
803
804 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
805 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
806
807 assertThat(leafref.getEffectiveDataType().getDataType(),
808 is(YangDataTypes.STRING));
809 }
810
811 /**
812 * Checks error scenerio where the node is invalid.
813 */
814 @Test
815 public void processSelfResolutionWhenLeafrefInModuleReferToInvalidNode()
816 throws IOException, ParserException {
817
818 thrown.expect(LinkerException.class);
819 thrown.expectMessage(
820 "YANG file error: Unable to find base leaf/leaf-list for given leafref");
821 String searchDir = "src/test/resources/interFileInvalidNode";
822 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
823 utilManager.parseYangFileInfoSet();
824 utilManager.createYangNodeSet();
825
826 YangNode selfNode = null;
827
828 // Create YANG node set
829 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
830
831 // Add references to import list.
832 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
833
834 // Carry out inter-file linking.
835 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
836 }
837
838 /**
839 * Checks the error scenerio when there is no referref leaf/leaf-list in any file.
840 */
841 @Test
842 public void processSelfResolutionWhenLeafrefDoesNotReferToLeafOrLeafList()
843 throws IOException, ParserException {
844
845 thrown.expect(LinkerException.class);
846 thrown.expectMessage(
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530847 "YANG file error: Unable to find base leaf/leaf-list for given leafref networks");
janani be18b5342016-07-13 21:06:41 +0530848 String searchDir = "src/test/resources/interfileleafrefwithinvaliddestinationnode";
849 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
850 utilManager.parseYangFileInfoSet();
851 utilManager.createYangNodeSet();
852 YangNode selfNode = null;
853
854 // Create YANG node set
855 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
856
857 // Add references to import list.
858 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
859
860 // Carry out inter-file linking.
861 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
862 }
863
864 /**
865 * Checks inter file resolution when leafref from grouping refers to other file.
866 */
867 @Test
868 public void processInterFileLeafrefFromGroupingRefersToOtherFile()
869 throws IOException, ParserException {
870
871 String searchDir = "src/test/resources/interfileleafreffromgroupingreferstootherfile";
872 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
873 utilManager.parseYangFileInfoSet();
874 utilManager.createYangNodeSet();
875 YangNode selfNode = null;
876 YangNode refNode = null;
877
878 // Create YANG node set
879 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
880
881 // Add references to import list.
882 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
883
884 // Carry out inter-file linking.
885 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
886
887 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
888
889 YangNode rootNode = yangNodeIterator.next();
890
891 if (rootNode.getName().equals("module1")) {
892 selfNode = rootNode;
893 refNode = yangNodeIterator.next();
894 } else {
895 refNode = rootNode;
896 selfNode = yangNodeIterator.next();
897 }
898
899 // Check whether the data model tree returned is of type module.
900 assertThat(selfNode instanceof YangModule, is(true));
901
902 // Check whether the node type is set properly to module.
903 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
904
905 // Check whether the module name is set correctly.
906 YangModule yangNode = (YangModule) selfNode;
907 assertThat(yangNode.getName(), is("module1"));
908
909 YangList list = (YangList) yangNode.getChild().getChild();
910 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
911 YangLeaf leafInfo = leafIterator.next();
912
913 assertThat(leafInfo.getName(), is("link-tp"));
914 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
915 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
916
917 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
918
919 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
920 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
921 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
922
923 assertThat(leafref.getEffectiveDataType().getDataType(),
924 is(YangDataTypes.STRING));
925 }
926
927 /**
928 * Checks inter file resolution when leafref refers to multiple leafrefs through many files.
929 */
930 @Test
931 public void processInterFileLeafrefRefersToMultipleLeafrefInMultipleFiles()
932 throws IOException, ParserException {
933
934 String searchDir = "src/test/resources/interfileleafrefreferstomultipleleafrefinmultiplefiles";
935 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
936 utilManager.parseYangFileInfoSet();
937 utilManager.createYangNodeSet();
938 YangNode refNode1 = null;
939 YangNode refNode2 = null;
940 YangNode selfNode = null;
941
942 // Create YANG node set
943 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
944
945 // Add references to import list.
946 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
947
948 // Carry out inter-file linking.
949 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
950
951 for (YangNode rootNode : utilManager.getYangNodeSet()) {
952 if (rootNode.getName().equals("ietf-network-topology")) {
953 selfNode = rootNode;
954 } else if (rootNode.getName().equals("ietf-network")) {
955 refNode1 = rootNode;
956 } else {
957 refNode2 = rootNode;
958 }
959 }
960 // Check whether the data model tree returned is of type module.
961 assertThat(selfNode instanceof YangModule, is(true));
962
963 // Check whether the node type is set properly to module.
964 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
965
966 // Check whether the module name is set correctly.
967 YangModule yangNode = (YangModule) selfNode;
968 assertThat(yangNode.getName(), is("ietf-network-topology"));
969
970 YangList list = (YangList) yangNode.getChild().getChild();
971 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
972 YangLeaf leafInfo = leafIterator.next();
973
974 assertThat(leafInfo.getName(), is("link-tp"));
975 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
976 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
977
978 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
979
980 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
981 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
982 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
983
984 assertThat(leafref.getEffectiveDataType().getDataType(),
985 is(YangDataTypes.STRING));
986 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530987}