blob: 8052f305f8c45f45fd20c9764313fa43277e3505 [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
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053019import org.apache.maven.plugin.MojoExecutionException;
janani be18b5342016-07-13 21:06:41 +053020import org.junit.Rule;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053021import org.junit.Test;
janani be18b5342016-07-13 21:06:41 +053022import org.junit.rules.ExpectedException;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053023import org.onosproject.yangutils.datamodel.YangDerivedInfo;
24import org.onosproject.yangutils.datamodel.YangGrouping;
25import org.onosproject.yangutils.datamodel.YangLeaf;
26import org.onosproject.yangutils.datamodel.YangModule;
27import org.onosproject.yangutils.datamodel.YangNode;
28import org.onosproject.yangutils.datamodel.YangNodeType;
29import org.onosproject.yangutils.datamodel.YangTypeDef;
30import org.onosproject.yangutils.datamodel.YangUses;
Bharat saraswal96dfef02016-06-16 00:29:12 +053031import org.onosproject.yangutils.datamodel.utils.ResolvableStatus;
janani b23ccc312016-07-14 19:35:22 +053032import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053033import org.onosproject.yangutils.linker.impl.YangLinkerManager;
34import org.onosproject.yangutils.parser.exceptions.ParserException;
janani be18b5342016-07-13 21:06:41 +053035import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053036import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053037import org.onosproject.yangutils.utils.io.impl.YangPluginConfig;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053038
janani b23ccc312016-07-14 19:35:22 +053039import java.io.IOException;
40import java.util.Iterator;
41import java.util.ListIterator;
42
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053043import static org.hamcrest.CoreMatchers.nullValue;
44import static org.hamcrest.MatcherAssert.assertThat;
45import static org.hamcrest.core.Is.is;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053046import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
Bharat saraswal96dfef02016-06-16 00:29:12 +053047import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
janani b23ccc312016-07-14 19:35:22 +053048import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.DERIVED;
49import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.STRING;
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +053050import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053051
52/**
53 * Test cases for testing inter file linking.
54 */
55public class InterFileLinkingTest {
56
janani be18b5342016-07-13 21:06:41 +053057 @Rule
58 public ExpectedException thrown = ExpectedException.none();
59
60 private final YangUtilsParserManager manager = new YangUtilsParserManager();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053061 private final YangUtilManager utilManager = new YangUtilManager();
62 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
63
64 /**
65 * Checks inter file type linking.
66 */
67 @Test
68 public void processInterFileTypeLinking()
69 throws IOException, ParserException, MojoExecutionException {
70
71 String searchDir = "src/test/resources/interfiletype";
72 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
73 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053074 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053075
76 YangNode refNode = null;
77 YangNode selfNode = null;
78
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053079 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053080 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053081
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053082 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053083 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053084
85 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053086 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053087
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053088 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053089
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053090 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053091
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053092 if (rootNode.getName().equals("module1")) {
93 selfNode = rootNode;
94 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053095 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +053096 refNode = rootNode;
97 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053098 }
99
100 // Check whether the data model tree returned is of type module.
101 assertThat(selfNode instanceof YangModule, is(true));
102
103 // Check whether the node type is set properly to module.
104 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
105
106 // Check whether the module name is set correctly.
107 YangModule yangNode = (YangModule) selfNode;
108 assertThat(yangNode.getName(), is("module1"));
109
110 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
111 YangLeaf leafInfo = leafIterator.next();
112
113 assertThat(leafInfo.getName(), is("invalid-interval"));
114 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
115 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
116
117 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
118 is((YangTypeDef) refNode.getChild()));
119
120 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
121
122 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
123
124 // Check for the effective built-in type.
125 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
126
127 // Check for the restriction.
128 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
129 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
130 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
131 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
132 }
133
134 /**
135 * Checks inter file uses linking.
136 */
137 @Test
138 public void processInterFileUsesLinking()
139 throws IOException, ParserException, MojoExecutionException {
140
141 String searchDir = "src/test/resources/interfileuses";
142 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
143 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530144 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530145
146 YangNode refNode = null;
147 YangNode selfNode = null;
148
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530149 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530150 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530151
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530152 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530153 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530154
155 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530156 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530157
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530158 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530159
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530160 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530161
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530162 if (rootNode.getName().equals("module1")) {
163 selfNode = rootNode;
164 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530165 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530166 refNode = rootNode;
167 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530168 }
169
170 // Check whether the data model tree returned is of type module.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530171 assertThat(selfNode instanceof YangModule, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530172
173 // Check whether the node type is set properly to module.
174 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
175
176 // Check whether the module name is set correctly.
177 YangModule yangNode = (YangModule) selfNode;
178 assertThat(yangNode.getName(), is("module1"));
179
180 ListIterator<YangLeaf> leafIterator;
181 YangLeaf leafInfo;
182
183 // Check whether grouping is the sibling of module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530184 assertThat(refNode.getChild() instanceof YangGrouping, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530185
186 YangGrouping grouping = (YangGrouping) refNode.getChild();
187 leafIterator = grouping.getListOfLeaf().listIterator();
188 leafInfo = leafIterator.next();
189
190 // Check whether the information in the leaf is correct under grouping.
191 assertThat(leafInfo.getName(), is("hello"));
192 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
193 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
194
195 // Check whether uses is module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530196 assertThat(yangNode.getChild() instanceof YangUses, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530197 YangUses uses = (YangUses) yangNode.getChild();
198
199 // Check whether uses get resolved.
200 assertThat(uses.getResolvableStatus(),
201 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530202 }
203
204 /**
205 * Checks inter file type linking with include list.
206 */
207 @Test
208 public void processInterFileTypeLinkingWithIncludeList()
209 throws IOException, ParserException, MojoExecutionException {
210
211 String searchDir = "src/test/resources/interfiletypewithinclude";
212 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
213 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530214 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530215
216 YangNode refNode = null;
217 YangNode selfNode = null;
218
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530219 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530220 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530221
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530222 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530223 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530224
225 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530226 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530227
228 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530229 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530230
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530231 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530232
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530233 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530234
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530235 if (rootNode.getName().equals("module1")) {
236 selfNode = rootNode;
237 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530238 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530239 refNode = rootNode;
240 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530241 }
242
243 // Check whether the data model tree returned is of type module.
244 assertThat(selfNode instanceof YangModule, is(true));
245
246 // Check whether the node type is set properly to module.
247 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
248
249 // Check whether the module name is set correctly.
250 YangModule yangNode = (YangModule) selfNode;
251 assertThat(yangNode.getName(), is("module1"));
252
253 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
254 YangLeaf leafInfo = leafIterator.next();
255
256 assertThat(leafInfo.getName(), is("invalid-interval"));
257 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
258 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
259
260 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
261 is((YangTypeDef) refNode.getChild()));
262
263 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
264
265 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
266
267 // Check for the effective built-in type.
268 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
269
270 // Check for the restriction.
271 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
272 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
273 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
274 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
275 }
276
277 /**
278 * Checks inter file uses linking with include list.
279 */
280 @Test
281 public void processInterFileUsesLinkingWithInclude()
282 throws IOException, ParserException, MojoExecutionException {
283
284 String searchDir = "src/test/resources/interfileuseswithinclude";
285 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
286 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530287 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530288
289 YangNode refNode = null;
290 YangNode selfNode = null;
291
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530292 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530293 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530294
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530295 // Carry out linking of sub module with module.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530296 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530297
298 // Add reference to include list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530299 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530300
301 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530302 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530303
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530304 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530305
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530306 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530307
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530308 if (rootNode.getName().equals("module1")) {
309 selfNode = rootNode;
310 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530311 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530312 refNode = rootNode;
313 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530314 }
315
316 // Check whether the data model tree returned is of type module.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530317 assertThat(selfNode instanceof YangModule, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530318
319 // Check whether the node type is set properly to module.
320 assertThat(selfNode.getNodeType(), is(YangNodeType.MODULE_NODE));
321
322 // Check whether the module name is set correctly.
323 YangModule yangNode = (YangModule) selfNode;
324 assertThat(yangNode.getName(), is("module1"));
325
326 ListIterator<YangLeaf> leafIterator;
327 YangLeaf leafInfo;
328
329 // Check whether grouping is the sibling of module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530330 assertThat(refNode.getChild() instanceof YangGrouping, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530331
332 YangGrouping grouping = (YangGrouping) refNode.getChild();
333 leafIterator = grouping.getListOfLeaf().listIterator();
334 leafInfo = leafIterator.next();
335
336 // Check whether the information in the leaf is correct under grouping.
337 assertThat(leafInfo.getName(), is("hello"));
338 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
339 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
340
341 // Check whether uses is module's child.
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530342 assertThat(yangNode.getChild() instanceof YangUses, is(true));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530343 YangUses uses = (YangUses) yangNode.getChild();
344
345 // Check whether uses get resolved.
346 assertThat(uses.getResolvableStatus(),
347 is(ResolvableStatus.RESOLVED));
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530348 }
349
350 /**
351 * Checks inter file type linking with revision.
352 */
353 @Test
354 public void processInterFileTypeLinkingWithRevision()
355 throws IOException, ParserException, MojoExecutionException {
356
357 String searchDir = "src/test/resources/interfiletypewithrevision";
358 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
359 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530360 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530361
362 YangNode refNode = null;
363 YangNode selfNode = null;
364
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530365 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530366 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530367
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530368 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530369 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530370
371 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530372 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530373
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530374 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530375
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530376 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530377
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530378 if (rootNode.getName().equals("module1")) {
379 selfNode = rootNode;
380 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530381 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530382 refNode = rootNode;
383 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530384 }
385
386 // Check whether the data model tree returned is of type module.
387 assertThat(selfNode instanceof YangModule, is(true));
388
389 // Check whether the node type is set properly to module.
390 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
391
392 // Check whether the module name is set correctly.
393 YangModule yangNode = (YangModule) selfNode;
394 assertThat(yangNode.getName(), is("module1"));
395
396 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
397 YangLeaf leafInfo = leafIterator.next();
398
399 assertThat(leafInfo.getName(), is("invalid-interval"));
400 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
401 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
402
403 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
404 is((YangTypeDef) refNode.getChild()));
405
406 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
407
408 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
409
410 // Check for the effective built-in type.
411 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
412
413 // Check for the restriction.
414 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
415 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
416 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
417 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
418 }
419
420 /**
421 * Checks inter file type linking with revision in name.
422 */
423 @Test
424 public void processInterFileTypeLinkingWithRevisionInName()
425 throws IOException, ParserException, MojoExecutionException {
426
427 String searchDir = "src/test/resources/interfiletypewithrevisioninname";
428 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
429 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530430 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530431
432 YangNode refNode = null;
433 YangNode selfNode = null;
434
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530435 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530436 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530437
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530438 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530439 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530440
441 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530442 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530443
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530444 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530445
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530446 YangNode rootNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530447
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530448 if (rootNode.getName().equals("module1")) {
449 selfNode = rootNode;
450 refNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530451 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530452 refNode = rootNode;
453 selfNode = yangNodeIterator.next();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530454 }
455
456 // Check whether the data model tree returned is of type module.
457 assertThat(selfNode instanceof YangModule, is(true));
458
459 // Check whether the node type is set properly to module.
460 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
461
462 // Check whether the module name is set correctly.
463 YangModule yangNode = (YangModule) selfNode;
464 assertThat(yangNode.getName(), is("module1"));
465
466 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
467 YangLeaf leafInfo = leafIterator.next();
468
469 assertThat(leafInfo.getName(), is("invalid-interval"));
470 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
471 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
472
473 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
474 is((YangTypeDef) refNode.getChild()));
475
476 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
477
478 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
479
480 // Check for the effective built-in type.
481 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
482
483 // Check for the restriction.
484 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
485 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
486 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
487 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
488 }
489
490 /**
491 * Checks hierarchical inter file type linking.
492 */
493 @Test
494 public void processHierarchicalInterFileTypeLinking()
495 throws IOException, ParserException, MojoExecutionException {
496
497 String searchDir = "src/test/resources/hierarchicalinterfiletype";
498 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
499 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530500 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530501
502 YangNode refNode1 = null;
503 YangNode refNode2 = null;
504 YangNode selfNode = null;
505
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530506 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530507 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530508
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530509 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530510 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530511
512 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530513 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530514
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530515 for (YangNode rootNode : utilManager.getYangNodeSet()) {
516 if (rootNode.getName().equals("ietf-network-topology")) {
517 selfNode = rootNode;
518 } else if (rootNode.getName().equals("ietf-network")) {
519 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530520 } else {
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530521 refNode2 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530522 }
523 }
524
525 // Check whether the data model tree returned is of type module.
526 assertThat(selfNode instanceof YangModule, is(true));
527
528 // Check whether the node type is set properly to module.
529 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
530
531 // Check whether the module name is set correctly.
532 YangModule yangNode = (YangModule) selfNode;
533 assertThat(yangNode.getName(), is("ietf-network-topology"));
534
535 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
536 YangLeaf leafInfo = leafIterator.next();
537
538 assertThat(leafInfo.getName(), is("source-node"));
539 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
540 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
541
542 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
543 is((YangTypeDef) refNode1.getChild()));
544
545 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
546
547 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
548
549 // Check for the effective built-in type.
550 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
551
552 // Check for the restriction.
553 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
554 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
555 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
556 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
557 }
558
559 /**
560 * Checks hierarchical intra with inter file type linking.
561 */
562 @Test
563 public void processHierarchicalIntraWithInterFileTypeLinking()
564 throws IOException, ParserException, MojoExecutionException {
565
566 String searchDir = "src/test/resources/hierarchicalintrawithinterfiletype";
567 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
568 utilManager.parseYangFileInfoSet();
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530569 utilManager.createYangNodeSet();
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530570
571 YangNode refNode1 = null;
572 YangNode selfNode = null;
573
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530574 // Create YANG node set
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530575 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
Gaurav Agrawal95b416c2016-06-07 14:00:26 +0530576
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530577 // Add references to import list.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530578 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530579
580 // Carry out inter-file linking.
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530581 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530582
Gaurav Agrawal8a5af142016-06-15 13:58:01 +0530583 for (YangNode rootNode : utilManager.getYangNodeSet()) {
584 if (rootNode.getName().equals("ietf-network")) {
585 selfNode = rootNode;
586 } else if (rootNode.getName().equals("ietf-inet-types")) {
587 refNode1 = rootNode;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530588 }
589 }
590
591 // Check whether the data model tree returned is of type module.
592 assertThat(selfNode instanceof YangModule, is(true));
593
594 // Check whether the node type is set properly to module.
595 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
596
597 // Check whether the module name is set correctly.
598 YangModule yangNode = (YangModule) selfNode;
599 assertThat(yangNode.getName(), is("ietf-network"));
600
601 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
602 YangLeaf leafInfo = leafIterator.next();
603
604 assertThat(leafInfo.getName(), is("node-ref"));
605 assertThat(leafInfo.getDataType().getDataTypeName(), is("node-id"));
606 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
607
608 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
609 is((YangTypeDef) selfNode.getChild()));
610
611 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
612
613 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
614
615 // Check for the effective built-in type.
616 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
617
618 // Check for the restriction.
619 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
620 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
621 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
622 assertThat(derivedInfo.getResolvedExtendedInfo(), is(nullValue()));
623 }
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530624
625 /**
626 * Checks hierarchical intra with inter file type linking.
627 */
628 @Test
629 public void interFileWithUsesReferringType()
630 throws IOException, ParserException, MojoExecutionException {
631
632 String searchDir = "src/test/resources/interfilewithusesreferringtype";
633 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
634 utilManager.parseYangFileInfoSet();
635 utilManager.resolveDependenciesUsingLinker();
636
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530637 YangPluginConfig yangPluginConfig = new YangPluginConfig();
638 yangPluginConfig.setCodeGenDir("target/interfilewithusesreferringtype/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530639 yangPluginConfig.setManagerCodeGenDir("target/interfilewithusesreferringtype/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530640
Bharat saraswald50c6382016-07-14 21:57:13 +0530641 utilManager.translateToJava(yangPluginConfig);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530642
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530643 deleteDirectory("target/interfilewithusesreferringtype/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530644
645 }
646
647 /**
648 * Checks hierarchical intra with inter file type linking.
649 */
650 @Test
651 public void file1UsesFile2TypeDefFile3Type()
652 throws IOException, ParserException, MojoExecutionException {
653
654 String searchDir = "src/test/resources/file1UsesFile2TypeDefFile3Type";
655 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
656 utilManager.parseYangFileInfoSet();
657 utilManager.resolveDependenciesUsingLinker();
658
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530659 YangPluginConfig yangPluginConfig = new YangPluginConfig();
660 yangPluginConfig.setCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530661 yangPluginConfig.setManagerCodeGenDir("target/file1UsesFile2TypeDefFile3Type/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530662
Bharat saraswald50c6382016-07-14 21:57:13 +0530663 utilManager.translateToJava(yangPluginConfig);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530664
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530665 deleteDirectory("target/file1UsesFile2TypeDefFile3Type/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530666
667 }
668
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530669 /**
670 * Checks hierarchical intra with inter file type linking.
671 */
672 @Test
673 public void interFileIetf()
674 throws IOException, ParserException, MojoExecutionException {
675
676 String searchDir = "src/test/resources/interfileietf";
677 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
678 utilManager.parseYangFileInfoSet();
679 utilManager.resolveDependenciesUsingLinker();
680
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530681 YangPluginConfig yangPluginConfig = new YangPluginConfig();
682 yangPluginConfig.setCodeGenDir("target/interfileietf/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530683 yangPluginConfig.setManagerCodeGenDir("target/interfileietf/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530684
Bharat saraswald50c6382016-07-14 21:57:13 +0530685 utilManager.translateToJava(yangPluginConfig);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530686
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530687 deleteDirectory("target/interfileietf/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530688
689 }
690
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530691 /**
692 * Checks hierarchical intra with inter file type linking.
693 */
694 @Test
695 public void usesInContainer()
696 throws IOException, ParserException, MojoExecutionException {
697
698 String searchDir = "src/test/resources/usesInContainer";
699 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
700 utilManager.parseYangFileInfoSet();
701 utilManager.resolveDependenciesUsingLinker();
702
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530703 YangPluginConfig yangPluginConfig = new YangPluginConfig();
704 yangPluginConfig.setCodeGenDir("target/usesInContainer/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530705 yangPluginConfig.setManagerCodeGenDir("target/usesInContainer/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530706
Bharat saraswald50c6382016-07-14 21:57:13 +0530707 utilManager.translateToJava(yangPluginConfig);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530708
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530709 deleteDirectory("target/usesInContainer/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530710
711 }
712
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530713 /**
714 * Checks hierarchical intra with inter file type linking.
715 */
716 @Test
717 public void groupingNodeSameAsModule()
718 throws IOException, ParserException, MojoExecutionException {
719
720 String searchDir = "src/test/resources/groupingNodeSameAsModule";
721 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
722 utilManager.parseYangFileInfoSet();
723 utilManager.resolveDependenciesUsingLinker();
724
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530725 YangPluginConfig yangPluginConfig = new YangPluginConfig();
726 yangPluginConfig.setCodeGenDir("target/groupingNodeSameAsModule/");
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530727 yangPluginConfig.setManagerCodeGenDir("target/groupingNodeSameAsModule/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530728
Bharat saraswald50c6382016-07-14 21:57:13 +0530729 utilManager.translateToJava(yangPluginConfig);
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530730
Bharat saraswalb1170bd2016-07-14 13:26:18 +0530731 deleteDirectory("target/groupingNodeSameAsModule/");
VinodKumarS-Huawei2ee9e7e2016-06-01 14:30:22 +0530732
733 }
janani be18b5342016-07-13 21:06:41 +0530734
735 /**
Vidyashree Rama1b499062016-07-12 20:52:48 +0530736 * Checks priority of the file.
737 */
738 @Test
739 public void interFilePriority()
740 throws IOException, ParserException, MojoExecutionException {
741
742 String searchDir = "src/test/resources/interfilepriority";
743 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
744 utilManager.parseYangFileInfoSet();
745 utilManager.resolveDependenciesUsingLinker();
746
747 YangNode selfNode = null;
748 YangNode refNode1 = null;
749 YangNode refNode2 = null;
750
751 for (YangNode rootNode : utilManager.getYangNodeSet()) {
752 if (rootNode.getName().equals("module1")) {
753 selfNode = rootNode;
754 } else if (rootNode.getName().equals("module2")) {
755 refNode1 = rootNode;
756 } else {
757 refNode2 = rootNode;
758 }
759 }
760
761 // Check whether the data model tree returned is of type module.
762 assertThat(selfNode instanceof YangModule, is(true));
763
764 // Check whether the node type is set properly to module.
765 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
766
767 // Check whether the module name is set correctly.
768 YangModule yangNode = (YangModule) selfNode;
769 assertThat(yangNode.getName(), is("module1"));
770 assertThat(yangNode.getPriority(), is(2));
771
772 // Check whether the data model tree returned is of type module.
773 assertThat(refNode1 instanceof YangModule, is(true));
774
775 // Check whether the node type is set properly to module.
776 assertThat(refNode1.getNodeType(), is(MODULE_NODE));
777
778 YangModule referredNode1 = (YangModule) refNode1;
779 assertThat(referredNode1.getName(), is("module2"));
780 assertThat(referredNode1.getPriority(), is(3));
781 }
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530782}