blob: c4c501db30079bbf80aa0ba7b36f14a1cfd6530b [file] [log] [blame]
Vidyashree Ramadeac28b2016-06-20 15:12:43 +05301/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.yangutils.plugin.manager;
18
19import java.io.IOException;
20import java.util.List;
21import java.util.ListIterator;
22import org.apache.maven.plugin.MojoExecutionException;
23import org.junit.Test;
24import org.onosproject.yangutils.datamodel.YangContainer;
25import org.onosproject.yangutils.datamodel.YangFeature;
26import org.onosproject.yangutils.datamodel.YangIfFeature;
27import org.onosproject.yangutils.datamodel.YangLeaf;
28import org.onosproject.yangutils.datamodel.YangModule;
29import org.onosproject.yangutils.datamodel.YangNode;
30import org.onosproject.yangutils.linker.impl.YangLinkerManager;
31import org.onosproject.yangutils.parser.exceptions.ParserException;
32import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
33
34import static org.hamcrest.MatcherAssert.assertThat;
35import static org.hamcrest.core.Is.is;
36import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
37import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.INTRA_FILE_RESOLVED;
38import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
39
40/**
41 * Test cases for testing inter file linking.
42 */
43public class InterFileIfFeatureLinkingTest {
44
45 private final YangUtilManager utilManager = new YangUtilManager();
46 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
47
48 /**
49 * Checks inter file feature linking with imported file.
50 */
51 @Test
52 public void processFeatureInImportedFile()
53 throws IOException, ParserException, MojoExecutionException {
54
55 String searchDir = "src/test/resources/interfilefeatureimport";
56 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
57 utilManager.parseYangFileInfoSet();
58 utilManager.createYangNodeSet();
59
60 YangNode selfNode = null;
61 YangNode refNode1 = null;
62 YangNode refNode2 = null;
63
64 // Create YANG node set
65 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
66
67 // Add references to import list.
68 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
69
70 // Carry out inter-file linking.
71 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
72
73 for (YangNode rootNode : utilManager.getYangNodeSet()) {
74 if (rootNode.getName().equals("syslog1")) {
75 selfNode = rootNode;
76 } else if (rootNode.getName().equals("syslog2")) {
77 refNode1 = rootNode;
78 } else {
79 refNode2 = rootNode;
80 }
81 }
82 // Check whether the data model tree returned is of type module.
83 assertThat(selfNode instanceof YangModule, is(true));
84
85 // Check whether the node type is set properly to module.
86 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
87
88 // Check whether the module name is set correctly.
89 YangModule yangNode = (YangModule) selfNode;
90 assertThat(yangNode.getName(), is("syslog1"));
91
92 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
93 YangFeature feature = featureIterator.next();
94 assertThat(feature.getName(), is("frr-te"));
95
96 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
97 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
98 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
99 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
100
101 YangContainer container = (YangContainer) selfNode.getChild();
102 assertThat(container.getName(), is("speed"));
103 YangLeaf leaf = container.getListOfLeaf().iterator().next();
104 assertThat(leaf.getName(), is("local-storage-limit"));
105
106 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
107 ifFeature = ifFeatureList.iterator().next();
108 assertThat(ifFeature.getName().getName(), is("frr-te"));
109 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
110 }
111
112 /**
113 * Checks inter file feature linking with included file.
114 */
115 @Test
116 public void processFeatureInIncludedFile()
117 throws IOException, ParserException, MojoExecutionException {
118
119 String searchDir = "src/test/resources/interfilefeatureinclude";
120 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
121 utilManager.parseYangFileInfoSet();
122 utilManager.createYangNodeSet();
123
124 YangNode selfNode = null;
125 YangNode refNode1 = null;
126 YangNode refNode2 = null;
127
128 // Create YANG node set
129 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
130
131 // Carry out linking of sub module with module.
132 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
133
134 // Add references to import list.
135 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
136
137 // Add references to include list.
138 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
139
140 // Carry out inter-file linking.
141 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
142
143 for (YangNode rootNode : utilManager.getYangNodeSet()) {
144 if (rootNode.getName().equals("syslog3")) {
145 selfNode = rootNode;
146 } else if (rootNode.getName().equals("syslog4")) {
147 refNode1 = rootNode;
148 } else {
149 refNode2 = rootNode;
150 }
151 }
152
153 // Check whether the data model tree returned is of type module.
154 assertThat(selfNode instanceof YangModule, is(true));
155
156 // Check whether the node type is set properly to module.
157 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
158
159 // Check whether the module name is set correctly.
160 YangModule yangNode = (YangModule) selfNode;
161 assertThat(yangNode.getName(), is("syslog3"));
162
163 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
164 YangFeature feature = featureIterator.next();
165 assertThat(feature.getName(), is("frr-te"));
166
167 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
168 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
169 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
170
171 YangContainer container = (YangContainer) selfNode.getChild();
172 assertThat(container.getName(), is("speed"));
173 YangLeaf leaf = container.getListOfLeaf().iterator().next();
174 assertThat(leaf.getName(), is("local-storage-limit"));
175
176 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
177 ifFeature = ifFeatureList.iterator().next();
178 assertThat(ifFeature.getName().getName(), is("frr-te"));
179 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
180 }
181
182 /**
183 * Checks inter file feature linking with imported file with dependency.
184 */
185 @Test
186 public void processFeatureInImportedFileWithDependency()
187 throws IOException, ParserException, MojoExecutionException {
188
189 String searchDir = "src/test/resources/interfilefeatureimportdependency";
190 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
191 utilManager.parseYangFileInfoSet();
192 utilManager.createYangNodeSet();
193
194 YangNode selfNode = null;
195 YangNode refNode1 = null;
196 YangNode refNode2 = null;
197
198 // Create YANG node set
199 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
200
201 // Add references to import list.
202 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
203
204 // Carry out inter-file linking.
205 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
206
207 for (YangNode rootNode : utilManager.getYangNodeSet()) {
208 if (rootNode.getName().equals("syslog1")) {
209 selfNode = rootNode;
210 } else if (rootNode.getName().equals("syslog2")) {
211 refNode1 = rootNode;
212 } else {
213 refNode2 = rootNode;
214 }
215 }
216
217 // Check whether the data model tree returned is of type module.
218 assertThat(selfNode instanceof YangModule, is(true));
219
220 // Check whether the node type is set properly to module.
221 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
222
223 // Check whether the module name is set correctly.
224 YangModule yangNode = (YangModule) selfNode;
225 assertThat(yangNode.getName(), is("syslog1"));
226
227 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
228 YangFeature feature = featureIterator.next();
229 assertThat(feature.getName(), is("frr-te"));
230
231 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
232 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
233 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
234 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
235
236 YangContainer container = (YangContainer) selfNode.getChild();
237 assertThat(container.getName(), is("speed"));
238 YangLeaf leaf = container.getListOfLeaf().iterator().next();
239 assertThat(leaf.getName(), is("local-storage-limit"));
240
241 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
242 ifFeature = ifFeatureList.iterator().next();
243 assertThat(ifFeature.getName().getName(), is("frr-te"));
244 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
245 }
246
247 /**
248 * Checks inter file feature linking with included file with dependency.
249 */
250 @Test
251 public void processFeatureInIncludedFileWithDependency()
252 throws IOException, ParserException, MojoExecutionException {
253
254 String searchDir = "src/test/resources/interfilefeatureincludedependency";
255 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
256 utilManager.parseYangFileInfoSet();
257 utilManager.createYangNodeSet();
258
259 YangNode selfNode = null;
260 YangNode refNode1 = null;
261 YangNode refNode2 = null;
262
263 // Create YANG node set
264 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
265
266 // Carry out linking of sub module with module.
267 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
268
269 // Add references to include list.
270 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
271
272 // Add references to import list.
273 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
274
275 // Carry out inter-file linking.
276 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
277
278 for (YangNode rootNode : utilManager.getYangNodeSet()) {
279 if (rootNode.getName().equals("syslog1")) {
280 selfNode = rootNode;
281 } else if (rootNode.getName().equals("syslog2")) {
282 refNode1 = rootNode;
283 } else {
284 refNode2 = rootNode;
285 }
286 }
287
288 // Check whether the data model tree returned is of type module.
289 assertThat(selfNode instanceof YangModule, is(true));
290
291 // Check whether the node type is set properly to module.
292 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
293
294 // Check whether the module name is set correctly.
295 YangModule yangNode = (YangModule) selfNode;
296 assertThat(yangNode.getName(), is("syslog1"));
297
298 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
299 YangFeature feature = featureIterator.next();
300 assertThat(feature.getName(), is("frr-te"));
301
302 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
303 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
304 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
305
306 YangContainer container = (YangContainer) selfNode.getChild();
307 assertThat(container.getName(), is("speed"));
308 YangLeaf leaf = container.getListOfLeaf().iterator().next();
309 assertThat(leaf.getName(), is("local-storage-limit"));
310
311 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
312 ifFeature = ifFeatureList.iterator().next();
313 assertThat(ifFeature.getName().getName(), is("frr-te"));
314 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
315 }
316
317 /**
318 * Checks inter file feature linking with imported file with dependency
319 * feature undefined.
320 */
321 @Test
322 public void processFeatureInImportedFileWithDependencyUndefined()
323 throws IOException, ParserException, MojoExecutionException {
324
325 String searchDir = "src/test/resources/interfilefeatureimportdependencyUndefined";
326 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
327 utilManager.parseYangFileInfoSet();
328 utilManager.createYangNodeSet();
329
330 YangNode selfNode = null;
331 YangNode refNode1 = null;
332 YangNode refNode2 = null;
333
334 // Create YANG node set
335 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
336
337 // Add references to import list.
338 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
339
340 // Carry out inter-file linking.
341 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
342
343 for (YangNode rootNode : utilManager.getYangNodeSet()) {
344 if (rootNode.getName().equals("syslog1")) {
345 selfNode = rootNode;
346 } else if (rootNode.getName().equals("syslog2")) {
347 refNode1 = rootNode;
348 } else {
349 refNode2 = rootNode;
350 }
351 }
352
353 // Check whether the data model tree returned is of type module.
354 assertThat(selfNode instanceof YangModule, is(true));
355
356 // Check whether the node type is set properly to module.
357 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
358
359 // Check whether the module name is set correctly.
360 YangModule yangNode = (YangModule) selfNode;
361 assertThat(yangNode.getName(), is("syslog1"));
362
363 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
364 YangFeature feature = featureIterator.next();
365 assertThat(feature.getName(), is("frr-te"));
366
367 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
368 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
369 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
370 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
371
372 YangContainer container = (YangContainer) selfNode.getChild();
373 assertThat(container.getName(), is("speed"));
374 YangLeaf leaf = container.getListOfLeaf().iterator().next();
375 assertThat(leaf.getName(), is("local-storage-limit"));
376
377 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
378 ifFeature = ifFeatureList.iterator().next();
379 assertThat(ifFeature.getName().getName(), is("frr-te"));
380 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
381 }
382
383 /**
384 * Checks inter file feature linking with included file with dependency
385 * feature undefined.
386 */
387 @Test
388 public void processFeatureInIncludedFileWithDependencyUndefined()
389 throws IOException, ParserException, MojoExecutionException {
390
391 String searchDir = "src/test/resources/interfilefeatureincludedependencyUndefined";
392 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
393 utilManager.parseYangFileInfoSet();
394 utilManager.createYangNodeSet();
395
396 YangNode selfNode = null;
397 YangNode refNode1 = null;
398 YangNode refNode2 = null;
399
400 // Create YANG node set
401 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
402
403 // Carry out linking of sub module with module.
404 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
405
406 // Add references to import list.
407 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
408
409 // Add references to include list.
410 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
411
412 // Carry out inter-file linking.
413 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
414
415 for (YangNode rootNode : utilManager.getYangNodeSet()) {
416 if (rootNode.getName().equals("syslog1")) {
417 selfNode = rootNode;
418 } else if (rootNode.getName().equals("syslog2")) {
419 refNode1 = rootNode;
420 } else {
421 refNode2 = rootNode;
422 }
423 }
424
425 // Check whether the data model tree returned is of type module.
426 assertThat(selfNode instanceof YangModule, is(true));
427
428 // Check whether the node type is set properly to module.
429 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
430
431 // Check whether the module name is set correctly.
432 YangModule yangNode = (YangModule) selfNode;
433 assertThat(yangNode.getName(), is("syslog1"));
434
435 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
436 YangFeature feature = featureIterator.next();
437 assertThat(feature.getName(), is("frr-te"));
438
439 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
440 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
441 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
442
443 YangContainer container = (YangContainer) selfNode.getChild();
444 assertThat(container.getName(), is("speed"));
445 YangLeaf leaf = container.getListOfLeaf().iterator().next();
446 assertThat(leaf.getName(), is("local-storage-limit"));
447
448 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
449 ifFeature = ifFeatureList.iterator().next();
450 assertThat(ifFeature.getName().getName(), is("frr-te"));
451 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
452 }
453}
454