blob: 4f914abec65fc765d45fe470160e79ab6e1aa22b [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;
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053039import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
Vidyashree Ramadeac28b2016-06-20 15:12:43 +053040
41/**
42 * Test cases for testing inter file linking.
43 */
44public class InterFileIfFeatureLinkingTest {
45
46 private final YangUtilManager utilManager = new YangUtilManager();
47 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
48
49 /**
50 * Checks inter file feature linking with imported file.
51 */
52 @Test
53 public void processFeatureInImportedFile()
54 throws IOException, ParserException, MojoExecutionException {
55
56 String searchDir = "src/test/resources/interfilefeatureimport";
57 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
58 utilManager.parseYangFileInfoSet();
59 utilManager.createYangNodeSet();
60
61 YangNode selfNode = null;
62 YangNode refNode1 = null;
63 YangNode refNode2 = null;
64
65 // Create YANG node set
66 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
67
68 // Add references to import list.
69 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
70
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053071 updateFilePriority(utilManager.getYangNodeSet());
72
Vidyashree Ramadeac28b2016-06-20 15:12:43 +053073 // Carry out inter-file linking.
74 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
75
76 for (YangNode rootNode : utilManager.getYangNodeSet()) {
77 if (rootNode.getName().equals("syslog1")) {
78 selfNode = rootNode;
79 } else if (rootNode.getName().equals("syslog2")) {
80 refNode1 = rootNode;
81 } else {
82 refNode2 = rootNode;
83 }
84 }
85 // Check whether the data model tree returned is of type module.
86 assertThat(selfNode instanceof YangModule, is(true));
87
88 // Check whether the node type is set properly to module.
89 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
90
91 // Check whether the module name is set correctly.
92 YangModule yangNode = (YangModule) selfNode;
93 assertThat(yangNode.getName(), is("syslog1"));
94
95 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
96 YangFeature feature = featureIterator.next();
97 assertThat(feature.getName(), is("frr-te"));
98
99 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
100 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
101 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
102 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
103
104 YangContainer container = (YangContainer) selfNode.getChild();
105 assertThat(container.getName(), is("speed"));
106 YangLeaf leaf = container.getListOfLeaf().iterator().next();
107 assertThat(leaf.getName(), is("local-storage-limit"));
108
109 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
110 ifFeature = ifFeatureList.iterator().next();
111 assertThat(ifFeature.getName().getName(), is("frr-te"));
112 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
113 }
114
115 /**
116 * Checks inter file feature linking with included file.
117 */
118 @Test
119 public void processFeatureInIncludedFile()
120 throws IOException, ParserException, MojoExecutionException {
121
122 String searchDir = "src/test/resources/interfilefeatureinclude";
123 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
124 utilManager.parseYangFileInfoSet();
125 utilManager.createYangNodeSet();
126
127 YangNode selfNode = null;
128 YangNode refNode1 = null;
129 YangNode refNode2 = null;
130
131 // Create YANG node set
132 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
133
134 // Carry out linking of sub module with module.
135 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
136
137 // Add references to import list.
138 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
139
140 // Add references to include list.
141 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
142
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530143 updateFilePriority(utilManager.getYangNodeSet());
144
Vidyashree Ramadeac28b2016-06-20 15:12:43 +0530145 // Carry out inter-file linking.
146 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
147
148 for (YangNode rootNode : utilManager.getYangNodeSet()) {
149 if (rootNode.getName().equals("syslog3")) {
150 selfNode = rootNode;
151 } else if (rootNode.getName().equals("syslog4")) {
152 refNode1 = rootNode;
153 } else {
154 refNode2 = rootNode;
155 }
156 }
157
158 // Check whether the data model tree returned is of type module.
159 assertThat(selfNode instanceof YangModule, is(true));
160
161 // Check whether the node type is set properly to module.
162 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
163
164 // Check whether the module name is set correctly.
165 YangModule yangNode = (YangModule) selfNode;
166 assertThat(yangNode.getName(), is("syslog3"));
167
168 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
169 YangFeature feature = featureIterator.next();
170 assertThat(feature.getName(), is("frr-te"));
171
172 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
173 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
174 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
175
176 YangContainer container = (YangContainer) selfNode.getChild();
177 assertThat(container.getName(), is("speed"));
178 YangLeaf leaf = container.getListOfLeaf().iterator().next();
179 assertThat(leaf.getName(), is("local-storage-limit"));
180
181 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
182 ifFeature = ifFeatureList.iterator().next();
183 assertThat(ifFeature.getName().getName(), is("frr-te"));
184 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
185 }
186
187 /**
188 * Checks inter file feature linking with imported file with dependency.
189 */
190 @Test
191 public void processFeatureInImportedFileWithDependency()
192 throws IOException, ParserException, MojoExecutionException {
193
194 String searchDir = "src/test/resources/interfilefeatureimportdependency";
195 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
196 utilManager.parseYangFileInfoSet();
197 utilManager.createYangNodeSet();
198
199 YangNode selfNode = null;
200 YangNode refNode1 = null;
201 YangNode refNode2 = null;
202
203 // Create YANG node set
204 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
205
206 // Add references to import list.
207 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
208
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530209 // Update the priority for all the files.
210 updateFilePriority(utilManager.getYangNodeSet());
211
Vidyashree Ramadeac28b2016-06-20 15:12:43 +0530212 // Carry out inter-file linking.
213 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
214
215 for (YangNode rootNode : utilManager.getYangNodeSet()) {
216 if (rootNode.getName().equals("syslog1")) {
217 selfNode = rootNode;
218 } else if (rootNode.getName().equals("syslog2")) {
219 refNode1 = rootNode;
220 } else {
221 refNode2 = rootNode;
222 }
223 }
224
225 // Check whether the data model tree returned is of type module.
226 assertThat(selfNode instanceof YangModule, is(true));
227
228 // Check whether the node type is set properly to module.
229 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
230
231 // Check whether the module name is set correctly.
232 YangModule yangNode = (YangModule) selfNode;
233 assertThat(yangNode.getName(), is("syslog1"));
234
235 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
236 YangFeature feature = featureIterator.next();
237 assertThat(feature.getName(), is("frr-te"));
238
239 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
240 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
241 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
242 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
243
244 YangContainer container = (YangContainer) selfNode.getChild();
245 assertThat(container.getName(), is("speed"));
246 YangLeaf leaf = container.getListOfLeaf().iterator().next();
247 assertThat(leaf.getName(), is("local-storage-limit"));
248
249 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
250 ifFeature = ifFeatureList.iterator().next();
251 assertThat(ifFeature.getName().getName(), is("frr-te"));
252 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
253 }
254
255 /**
256 * Checks inter file feature linking with included file with dependency.
257 */
258 @Test
259 public void processFeatureInIncludedFileWithDependency()
260 throws IOException, ParserException, MojoExecutionException {
261
262 String searchDir = "src/test/resources/interfilefeatureincludedependency";
263 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
264 utilManager.parseYangFileInfoSet();
265 utilManager.createYangNodeSet();
266
267 YangNode selfNode = null;
268 YangNode refNode1 = null;
269 YangNode refNode2 = null;
270
271 // Create YANG node set
272 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
273
274 // Carry out linking of sub module with module.
275 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
276
277 // Add references to include list.
278 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
279
280 // Add references to import list.
281 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
282
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530283 updateFilePriority(utilManager.getYangNodeSet());
284
Vidyashree Ramadeac28b2016-06-20 15:12:43 +0530285 // Carry out inter-file linking.
286 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
287
288 for (YangNode rootNode : utilManager.getYangNodeSet()) {
289 if (rootNode.getName().equals("syslog1")) {
290 selfNode = rootNode;
291 } else if (rootNode.getName().equals("syslog2")) {
292 refNode1 = rootNode;
293 } else {
294 refNode2 = rootNode;
295 }
296 }
297
298 // Check whether the data model tree returned is of type module.
299 assertThat(selfNode instanceof YangModule, is(true));
300
301 // Check whether the node type is set properly to module.
302 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
303
304 // Check whether the module name is set correctly.
305 YangModule yangNode = (YangModule) selfNode;
306 assertThat(yangNode.getName(), is("syslog1"));
307
308 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
309 YangFeature feature = featureIterator.next();
310 assertThat(feature.getName(), is("frr-te"));
311
312 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
313 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
314 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
315
316 YangContainer container = (YangContainer) selfNode.getChild();
317 assertThat(container.getName(), is("speed"));
318 YangLeaf leaf = container.getListOfLeaf().iterator().next();
319 assertThat(leaf.getName(), is("local-storage-limit"));
320
321 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
322 ifFeature = ifFeatureList.iterator().next();
323 assertThat(ifFeature.getName().getName(), is("frr-te"));
324 assertThat(ifFeature.getResolvableStatus(), is(RESOLVED));
325 }
326
327 /**
328 * Checks inter file feature linking with imported file with dependency
329 * feature undefined.
330 */
331 @Test
332 public void processFeatureInImportedFileWithDependencyUndefined()
333 throws IOException, ParserException, MojoExecutionException {
334
335 String searchDir = "src/test/resources/interfilefeatureimportdependencyUndefined";
336 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
337 utilManager.parseYangFileInfoSet();
338 utilManager.createYangNodeSet();
339
340 YangNode selfNode = null;
341 YangNode refNode1 = null;
342 YangNode refNode2 = null;
343
344 // Create YANG node set
345 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
346
347 // Add references to import list.
348 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
349
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530350 updateFilePriority(utilManager.getYangNodeSet());
351
Vidyashree Ramadeac28b2016-06-20 15:12:43 +0530352 // Carry out inter-file linking.
353 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
354
355 for (YangNode rootNode : utilManager.getYangNodeSet()) {
356 if (rootNode.getName().equals("syslog1")) {
357 selfNode = rootNode;
358 } else if (rootNode.getName().equals("syslog2")) {
359 refNode1 = rootNode;
360 } else {
361 refNode2 = rootNode;
362 }
363 }
364
365 // Check whether the data model tree returned is of type module.
366 assertThat(selfNode instanceof YangModule, is(true));
367
368 // Check whether the node type is set properly to module.
369 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
370
371 // Check whether the module name is set correctly.
372 YangModule yangNode = (YangModule) selfNode;
373 assertThat(yangNode.getName(), is("syslog1"));
374
375 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
376 YangFeature feature = featureIterator.next();
377 assertThat(feature.getName(), is("frr-te"));
378
379 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
380 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
381 assertThat(ifFeature.getName().getPrefix(), is("sys2"));
382 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
383
384 YangContainer container = (YangContainer) selfNode.getChild();
385 assertThat(container.getName(), is("speed"));
386 YangLeaf leaf = container.getListOfLeaf().iterator().next();
387 assertThat(leaf.getName(), is("local-storage-limit"));
388
389 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
390 ifFeature = ifFeatureList.iterator().next();
391 assertThat(ifFeature.getName().getName(), is("frr-te"));
392 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
393 }
394
395 /**
396 * Checks inter file feature linking with included file with dependency
397 * feature undefined.
398 */
399 @Test
400 public void processFeatureInIncludedFileWithDependencyUndefined()
401 throws IOException, ParserException, MojoExecutionException {
402
403 String searchDir = "src/test/resources/interfilefeatureincludedependencyUndefined";
404 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
405 utilManager.parseYangFileInfoSet();
406 utilManager.createYangNodeSet();
407
408 YangNode selfNode = null;
409 YangNode refNode1 = null;
410 YangNode refNode2 = null;
411
412 // Create YANG node set
413 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
414
415 // Carry out linking of sub module with module.
416 yangLinkerManager.linkSubModulesToParentModule(utilManager.getYangNodeSet());
417
418 // Add references to import list.
419 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
420
421 // Add references to include list.
422 yangLinkerManager.addRefToYangFilesIncludeList(utilManager.getYangNodeSet());
423
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530424 updateFilePriority(utilManager.getYangNodeSet());
425
Vidyashree Ramadeac28b2016-06-20 15:12:43 +0530426 // Carry out inter-file linking.
427 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
428
429 for (YangNode rootNode : utilManager.getYangNodeSet()) {
430 if (rootNode.getName().equals("syslog1")) {
431 selfNode = rootNode;
432 } else if (rootNode.getName().equals("syslog2")) {
433 refNode1 = rootNode;
434 } else {
435 refNode2 = rootNode;
436 }
437 }
438
439 // Check whether the data model tree returned is of type module.
440 assertThat(selfNode instanceof YangModule, is(true));
441
442 // Check whether the node type is set properly to module.
443 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
444
445 // Check whether the module name is set correctly.
446 YangModule yangNode = (YangModule) selfNode;
447 assertThat(yangNode.getName(), is("syslog1"));
448
449 ListIterator<YangFeature> featureIterator = yangNode.getFeatureList().listIterator();
450 YangFeature feature = featureIterator.next();
451 assertThat(feature.getName(), is("frr-te"));
452
453 YangIfFeature ifFeature = feature.getIfFeatureList().iterator().next();
454 assertThat(ifFeature.getName().getName(), is("p2mp-te"));
455 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
456
457 YangContainer container = (YangContainer) selfNode.getChild();
458 assertThat(container.getName(), is("speed"));
459 YangLeaf leaf = container.getListOfLeaf().iterator().next();
460 assertThat(leaf.getName(), is("local-storage-limit"));
461
462 List<YangIfFeature> ifFeatureList = leaf.getIfFeatureList();
463 ifFeature = ifFeatureList.iterator().next();
464 assertThat(ifFeature.getName().getName(), is("frr-te"));
465 assertThat(ifFeature.getResolvableStatus(), is(INTRA_FILE_RESOLVED));
466 }
467}
468