blob: cc39c53792282cc5e8cf4624e21d3c8daf86b60c [file] [log] [blame]
janani b23ccc312016-07-14 19:35:22 +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
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053019import java.io.IOException;
20import java.util.Iterator;
21import java.util.ListIterator;
janani b23ccc312016-07-14 19:35:22 +053022import org.apache.maven.plugin.MojoExecutionException;
23import org.junit.Rule;
24import org.junit.Test;
25import org.junit.rules.ExpectedException;
26import org.onosproject.yangutils.datamodel.YangContainer;
27import org.onosproject.yangutils.datamodel.YangLeaf;
28import org.onosproject.yangutils.datamodel.YangLeafRef;
29import org.onosproject.yangutils.datamodel.YangList;
30import org.onosproject.yangutils.datamodel.YangModule;
31import org.onosproject.yangutils.datamodel.YangNode;
32import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
33import org.onosproject.yangutils.linker.impl.YangLinkerManager;
34import org.onosproject.yangutils.parser.exceptions.ParserException;
35import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
36import org.onosproject.yangutils.utils.io.impl.YangFileScanner;
37
janani b23ccc312016-07-14 19:35:22 +053038import static org.hamcrest.MatcherAssert.assertThat;
39import static org.hamcrest.core.Is.is;
40import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
41import static org.onosproject.yangutils.datamodel.utils.ResolvableStatus.RESOLVED;
42import static org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes.LEAFREF;
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053043import static org.onosproject.yangutils.linker.impl.YangLinkerUtils.updateFilePriority;
janani b23ccc312016-07-14 19:35:22 +053044
45/**
46 * Test cases for testing leafref inter file linking.
47 */
48public class InterFileLeafrefLinkingTest {
49
50 @Rule
51 public ExpectedException thrown = ExpectedException.none();
52
53 private final YangUtilManager utilManager = new YangUtilManager();
54 private final YangLinkerManager yangLinkerManager = new YangLinkerManager();
55 private final YangUtilsParserManager manager = new YangUtilsParserManager();
56
57 /**
58 * Checks inter file leafref linking.
59 */
60 @Test
61 public void processInterFileLeafrefLinking()
62 throws IOException, ParserException, MojoExecutionException {
63
64 String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafrefwithimport";
65 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
66 utilManager.parseYangFileInfoSet();
67 utilManager.createYangNodeSet();
68 YangNode refNode = null;
69 YangNode selfNode = null;
70
71 // Create YANG node set
72 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
73
74 // Add references to import list.
75 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
76
Vidyashree Rama07c26bb2016-07-28 17:33:15 +053077 updateFilePriority(utilManager.getYangNodeSet());
78
janani b23ccc312016-07-14 19:35:22 +053079 // Carry out inter-file linking.
80 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
81
82 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
83
84 YangNode rootNode = yangNodeIterator.next();
85
86 if (rootNode.getName().equals("module1")) {
87 selfNode = rootNode;
88 refNode = yangNodeIterator.next();
89 } else {
90 refNode = rootNode;
91 selfNode = yangNodeIterator.next();
92 }
93
94 // Check whether the data model tree returned is of type module.
95 assertThat(selfNode instanceof YangModule, is(true));
96
97 // Check whether the node type is set properly to module.
98 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
99
100 // Check whether the module name is set correctly.
101 YangModule yangNode = (YangModule) selfNode;
102 assertThat(yangNode.getName(), is("module1"));
103
104 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
105 YangLeaf leafInfo = leafIterator.next();
106
107 assertThat(leafInfo.getName(), is("invalid-interval"));
108 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
109 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
110
111 // Check whether the data model tree returned is of type module.
112 assertThat(refNode instanceof YangModule, is(true));
113
114 // Check whether the node type is set properly to module.
115 assertThat(refNode.getNodeType(), is(MODULE_NODE));
116
117 // Check whether the module name is set correctly.
118 YangModule yangNode1 = (YangModule) refNode;
119 assertThat(yangNode1.getName(), is("module2"));
120 YangLeaf leafInfo1 = yangNode1.getListOfLeaf().listIterator().next();
121
122 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
123
124 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo1));
125 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
126
127 assertThat(leafref.getEffectiveDataType().getDataType(),
128 is(YangDataTypes.STRING));
129 }
130
131 /**
132 * Checks inter file resolution when leafref from grouping refers to other file.
133 */
134 @Test
135 public void processInterFileLeafrefFromGroupingRefersToOtherFile()
136 throws IOException, ParserException {
137
138 String searchDir = "src/test/resources/leafreflinker/interfile/interfileleafreffromgroupingreferstootherfile";
139 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
140 utilManager.parseYangFileInfoSet();
141 utilManager.createYangNodeSet();
142 YangNode selfNode = null;
143 YangNode refNode = null;
144
145 // Create YANG node set
146 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
147
148 // Add references to import list.
149 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
150
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530151 updateFilePriority(utilManager.getYangNodeSet());
152
janani b23ccc312016-07-14 19:35:22 +0530153 // Carry out inter-file linking.
154 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
155
156 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
157
158 YangNode rootNode = yangNodeIterator.next();
159
160 if (rootNode.getName().equals("module1")) {
161 selfNode = rootNode;
162 refNode = yangNodeIterator.next();
163 } else {
164 refNode = rootNode;
165 selfNode = yangNodeIterator.next();
166 }
167
168 // Check whether the data model tree returned is of type module.
169 assertThat(selfNode instanceof YangModule, is(true));
170
171 // Check whether the node type is set properly to module.
172 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
173
174 // Check whether the module name is set correctly.
175 YangModule yangNode = (YangModule) selfNode;
176 assertThat(yangNode.getName(), is("module1"));
177
178 YangList list = (YangList) yangNode.getChild().getChild();
179 ListIterator<YangLeaf> leafIterator = list.getListOfLeaf().listIterator();
180 YangLeaf leafInfo = leafIterator.next();
181
182 assertThat(leafInfo.getName(), is("link-tp"));
183 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
184 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
185
186 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
187
188 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
189 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
190 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
191
192 assertThat(leafref.getEffectiveDataType().getDataType(),
193 is(YangDataTypes.STRING));
194 }
195
196 /**
197 * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning.
198 */
199 @Test
200 public void processInterFileLeafrefFromGroupingWithPrefixIsCloned()
201 throws IOException, ParserException {
202
203 String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefix";
204 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
205 utilManager.parseYangFileInfoSet();
206 utilManager.createYangNodeSet();
207 YangNode selfNode = null;
208 YangNode refNode = null;
209
210 // Create YANG node set
211 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
212
213 // Add references to import list.
214 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
215
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530216 updateFilePriority(utilManager.getYangNodeSet());
217
janani b23ccc312016-07-14 19:35:22 +0530218 // Carry out inter-file linking.
219 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
220
221 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
222
223 YangNode rootNode = yangNodeIterator.next();
224
225 if (rootNode.getName().equals("LeafrefInGroupingOfModule1")) {
226 selfNode = rootNode;
227 refNode = yangNodeIterator.next();
228 } else {
229 refNode = rootNode;
230 selfNode = yangNodeIterator.next();
231 }
232
233 // Check whether the data model tree returned is of type module.
234 assertThat(selfNode instanceof YangModule, is(true));
235
236 // Check whether the node type is set properly to module.
237 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
238
239 // Check whether the module name is set correctly.
240 YangModule yangNode = (YangModule) selfNode;
241 assertThat(yangNode.getName(), is("LeafrefInGroupingOfModule1"));
242
243 // Check whether the module name is set correctly.
244 YangModule yangNode1 = (YangModule) refNode;
245 assertThat(yangNode1.getName(), is("GroupingCopiedInModule2"));
246
247 YangContainer yangContainer = (YangContainer) yangNode1.getChild();
248
249 ListIterator<YangLeaf> leafIterator = yangContainer.getListOfLeaf().listIterator();
250 YangLeaf leafInfo = leafIterator.next();
251
252 assertThat(leafInfo.getName(), is("network-ref"));
253 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
254 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
255
256 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
257
258 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
259 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
260 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
261
262 assertThat(leafref.getEffectiveDataType().getDataType(),
263 is(YangDataTypes.STRING));
264 }
265
266 /**
267 * Checks inter file resolution when leafref from grouping with prefix is changed properly during cloning with
268 * multi reference.
269 */
270 @Test
271 public void processInterFileLeafrefFromGroupingWithPrefixIsClonedMultiReference()
272 throws IOException, ParserException {
273
274 String searchDir = "src/test/resources/leafreflinker/interfile/leafrefInGroupingWithPrefixAndManyReference";
275 utilManager.createYangFileInfoSet(YangFileScanner.getYangFiles(searchDir));
276 utilManager.parseYangFileInfoSet();
277 utilManager.createYangNodeSet();
278 YangNode selfNode = null;
279 YangNode refNode = null;
280
281 // Create YANG node set
282 yangLinkerManager.createYangNodeSet(utilManager.getYangNodeSet());
283
284 // Add references to import list.
285 yangLinkerManager.addRefToYangFilesImportList(utilManager.getYangNodeSet());
286
Vidyashree Rama07c26bb2016-07-28 17:33:15 +0530287 updateFilePriority(utilManager.getYangNodeSet());
288
janani b23ccc312016-07-14 19:35:22 +0530289 // Carry out inter-file linking.
290 yangLinkerManager.processInterFileLinking(utilManager.getYangNodeSet());
291
292 Iterator<YangNode> yangNodeIterator = utilManager.getYangNodeSet().iterator();
293
294 YangNode rootNode = yangNodeIterator.next();
295
296 if (rootNode.getName().equals("ietf-network")) {
297 selfNode = rootNode;
298 refNode = yangNodeIterator.next();
299 } else {
300 refNode = rootNode;
301 selfNode = yangNodeIterator.next();
302 }
303
304 // Check whether the data model tree returned is of type module.
305 assertThat(selfNode instanceof YangModule, is(true));
306
307 // Check whether the node type is set properly to module.
308 assertThat(selfNode.getNodeType(), is(MODULE_NODE));
309
310 // Check whether the module name is set correctly.
311 YangModule yangNode = (YangModule) selfNode;
312 assertThat(yangNode.getName(), is("ietf-network"));
313
314 // Check whether the module name is set correctly.
315 YangModule yangNode1 = (YangModule) refNode;
316 assertThat(yangNode1.getName(), is("ietf-te-topology"));
317
318 YangContainer yangContainer = (YangContainer) yangNode1.getChild().getNextSibling();
319 ListIterator<YangLeaf> leafIterator;
320 YangLeaf leafInfo;
321
322 leafIterator = yangContainer.getListOfLeaf().listIterator();
323 leafInfo = leafIterator.next();
324 leafInfo = leafIterator.next();
325
326 assertThat(leafInfo.getName(), is("node-ref"));
327 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
328 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
329
330 YangLeafRef leafref = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
331
332 YangLeaf leafInfo2 = (YangLeaf) leafref.getReferredLeafOrLeafList();
333 assertThat(leafref.getReferredLeafOrLeafList(), is(leafInfo2));
334 assertThat(leafref.getResolvableStatus(), is(RESOLVED));
335
336 assertThat(leafref.getEffectiveDataType().getDataType(),
337 is(YangDataTypes.DERIVED));
338
339 leafInfo = leafIterator.next();
340
341 assertThat(leafInfo.getName(), is("network-ref"));
342 assertThat(leafInfo.getDataType().getDataTypeName(), is("leafref"));
343 assertThat(leafInfo.getDataType().getDataType(), is(LEAFREF));
344
345 YangLeafRef leafref1 = (YangLeafRef) leafInfo.getDataType().getDataTypeExtendedInfo();
346
347 YangLeaf leafInfo4 = (YangLeaf) leafref1.getReferredLeafOrLeafList();
348 assertThat(leafref1.getReferredLeafOrLeafList(), is(leafInfo4));
349 assertThat(leafref1.getResolvableStatus(), is(RESOLVED));
350
351 assertThat(leafref1.getEffectiveDataType().getDataType(),
352 is(YangDataTypes.DERIVED));
353 }
354}