blob: 7b1eeaf5b98c4614684745917c4e50593ea32a5e [file] [log] [blame]
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +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.linker;
18
19import java.io.IOException;
20import java.math.BigInteger;
21import java.util.ListIterator;
22import org.junit.Test;
23import org.onosproject.yangutils.datamodel.YangDerivedInfo;
24import org.onosproject.yangutils.datamodel.YangLeaf;
25import org.onosproject.yangutils.datamodel.YangModule;
26import org.onosproject.yangutils.datamodel.YangNode;
27import org.onosproject.yangutils.datamodel.YangPatternRestriction;
28import org.onosproject.yangutils.datamodel.YangRangeInterval;
29import org.onosproject.yangutils.datamodel.YangRangeRestriction;
30import org.onosproject.yangutils.datamodel.YangStringRestriction;
31import org.onosproject.yangutils.datamodel.YangTypeDef;
32import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053033import org.onosproject.yangutils.linker.exceptions.LinkerException;
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +053034import org.onosproject.yangutils.parser.exceptions.ParserException;
35import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
36import org.onosproject.yangutils.utils.builtindatatype.YangInt32;
37import org.onosproject.yangutils.utils.builtindatatype.YangUint64;
38
39import static org.hamcrest.CoreMatchers.nullValue;
40import static org.hamcrest.MatcherAssert.assertThat;
41import static org.hamcrest.core.Is.is;
42import static org.hamcrest.core.IsNull.notNullValue;
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +053043import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
44import static org.onosproject.yangutils.datamodel.YangDataTypes.INT32;
45import static org.onosproject.yangutils.datamodel.YangDataTypes.STRING;
46import static org.onosproject.yangutils.datamodel.YangNodeType.MODULE_NODE;
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +053047import static org.onosproject.yangutils.linker.impl.ResolvableStatus.RESOLVED;
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +053048
49/**
50 * Test cases for testing restriction resolution.
51 */
52public final class RestrictionResolutionTest {
53
54 private final YangUtilsParserManager manager = new YangUtilsParserManager();
55
56 /**
57 * Checks length restriction in typedef.
58 */
59 @Test
60 public void processLengthRestrictionInTypedef()
61 throws IOException, ParserException, DataModelException {
62
63 YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedef.yang");
64
65 // Check whether the data model tree returned is of type module.
66 assertThat(node instanceof YangModule, is(true));
67
68 // Check whether the node type is set properly to module.
69 assertThat(node.getNodeType(), is(MODULE_NODE));
70
71 // Check whether the module name is set correctly.
72 YangModule yangNode = (YangModule) node;
73 assertThat(yangNode.getName(), is("Test"));
74
75 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
76 YangLeaf leafInfo = leafIterator.next();
77
78 assertThat(leafInfo.getName(), is("invalid-interval"));
79 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
80 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
81
82 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
83 is((YangTypeDef) node.getChild()));
84
85 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
86
87 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
88
89 // Check for the effective built-in type.
90 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
91
92 // Check for the restriction.
93 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
94 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
95 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
96 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
97
98 // Check for the restriction value.
99 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
100 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
101
102 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
103 .listIterator();
104
105 YangRangeInterval rangeInterval = lengthListIterator.next();
106
107 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
108 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
109 }
110
111 /**
112 * Checks length restriction in referred type.
113 */
114 @Test
115 public void processLengthRestrictionInRefType()
116 throws IOException, ParserException, DataModelException {
117
118 YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInRefType.yang");
119
120 // Check whether the data model tree returned is of type module.
121 assertThat(node instanceof YangModule, is(true));
122
123 // Check whether the node type is set properly to module.
124 assertThat(node.getNodeType(), is(MODULE_NODE));
125
126 // Check whether the module name is set correctly.
127 YangModule yangNode = (YangModule) node;
128 assertThat(yangNode.getName(), is("Test"));
129
130 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
131 YangLeaf leafInfo = leafIterator.next();
132
133 assertThat(leafInfo.getName(), is("invalid-interval"));
134 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
135 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
136
137 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
138 is((YangTypeDef) node.getChild()));
139
140 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
141
142 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
143
144 // Check for the effective built-in type.
145 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
146
147 // Check for the restriction.
148 assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
149 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
150 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
151 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
152
153 // Check for the restriction value.
154 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
155 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
156
157 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
158 .listIterator();
159
160 YangRangeInterval rangeInterval = lengthListIterator.next();
161
162 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
163 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
164 }
165
166 /**
167 * Checks length restriction in typedef and in type with stricter value.
168 */
169 @Test
170 public void processLengthRestrictionInTypedefAndTypeValid()
171 throws IOException, ParserException, DataModelException {
172
173 YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeValid.yang");
174
175 // Check whether the data model tree returned is of type module.
176 assertThat(node instanceof YangModule, is(true));
177
178 // Check whether the node type is set properly to module.
179 assertThat(node.getNodeType(), is(MODULE_NODE));
180
181 // Check whether the module name is set correctly.
182 YangModule yangNode = (YangModule) node;
183 assertThat(yangNode.getName(), is("Test"));
184
185 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
186 YangLeaf leafInfo = leafIterator.next();
187
188 assertThat(leafInfo.getName(), is("invalid-interval"));
189 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
190 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
191
192 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
193 is((YangTypeDef) node.getChild()));
194
195 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
196
197 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
198
199 // Check for the effective built-in type.
200 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
201
202 // Check for the restriction.
203 assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
204 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
205 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
206 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
207
208 // Check for the restriction value.
209 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
210 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
211
212 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
213 .listIterator();
214
215 YangRangeInterval rangeInterval1 = lengthListIterator.next();
216
217 assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
218 assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
219
220 YangRangeInterval rangeInterval2 = lengthListIterator.next();
221
222 assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
223 assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
224 }
225
226 /**
227 * Checks length restriction in typedef and in type with not stricter value.
228 */
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530229 @Test(expected = LinkerException.class)
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530230 public void processLengthRestrictionInTypedefAndTypeInValid()
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530231 throws IOException, DataModelException {
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530232 YangNode node = manager.getDataModel("src/test/resources/LengthRestrictionInTypedefAndTypeInValid.yang");
233 }
234
235 /**
236 * Checks range restriction in typedef.
237 */
238 @Test
239 public void processRangeRestrictionInTypedef()
240 throws IOException, ParserException, DataModelException {
241
242 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInTypedef.yang");
243
244 // Check whether the data model tree returned is of type module.
245 assertThat(node instanceof YangModule, is(true));
246
247 // Check whether the node type is set properly to module.
248 assertThat(node.getNodeType(), is(MODULE_NODE));
249
250 // Check whether the module name is set correctly.
251 YangModule yangNode = (YangModule) node;
252 assertThat(yangNode.getName(), is("Test"));
253
254 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
255 YangLeaf leafInfo = leafIterator.next();
256
257 assertThat(leafInfo.getName(), is("invalid-interval"));
258 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
259 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
260
261 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
262 is((YangTypeDef) node.getChild()));
263
264 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
265
266 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
267
268 // Check for the effective built-in type.
269 assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
270
271 // Check for the restriction.
272 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
273 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
274 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
275 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
276
277 // Check for the restriction value.
278 YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
279
280 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
281 .listIterator();
282
283 YangRangeInterval rangeInterval1 = rangeListIterator.next();
284
285 assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
286 assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
287
288 YangRangeInterval rangeInterval2 = rangeListIterator.next();
289
290 assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
291 assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
292 }
293
294 /**
295 * Checks range restriction in referred type.
296 */
297 @Test
298 public void processRangeRestrictionInRefType()
299 throws IOException, ParserException, DataModelException {
300
301 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefType.yang");
302
303 // Check whether the data model tree returned is of type module.
304 assertThat(node instanceof YangModule, is(true));
305
306 // Check whether the node type is set properly to module.
307 assertThat(node.getNodeType(), is(MODULE_NODE));
308
309 // Check whether the module name is set correctly.
310 YangModule yangNode = (YangModule) node;
311 assertThat(yangNode.getName(), is("Test"));
312
313 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
314 YangLeaf leafInfo = leafIterator.next();
315
316 assertThat(leafInfo.getName(), is("invalid-interval"));
317 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
318 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
319
320 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
321 is((YangTypeDef) node.getChild()));
322
323 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
324
325 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
326
327 // Check for the effective built-in type.
328 assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
329
330 // Check for the restriction.
331 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
332 assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
333 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
334 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
335
336 // Check for the restriction value.
337 YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
338
339 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
340 .listIterator();
341
342 YangRangeInterval rangeInterval1 = rangeListIterator.next();
343
344 assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
345 assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
346
347 YangRangeInterval rangeInterval2 = rangeListIterator.next();
348
349 assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
350 assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
351 }
352
353 /**
354 * Checks range restriction in typedef and stricter in referred type.
355 */
356 @Test
357 public void processRangeRestrictionInRefTypeAndTypedefValid()
358 throws IOException, ParserException, DataModelException {
359
360 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefValid.yang");
361
362 // Check whether the data model tree returned is of type module.
363 assertThat(node instanceof YangModule, is(true));
364
365 // Check whether the node type is set properly to module.
366 assertThat(node.getNodeType(), is(MODULE_NODE));
367
368 // Check whether the module name is set correctly.
369 YangModule yangNode = (YangModule) node;
370 assertThat(yangNode.getName(), is("Test"));
371
372 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
373 YangLeaf leafInfo = leafIterator.next();
374
375 assertThat(leafInfo.getName(), is("invalid-interval"));
376 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
377 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
378
379 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
380 is((YangTypeDef) node.getChild()));
381
382 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
383
384 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
385
386 // Check for the effective built-in type.
387 assertThat(derivedInfo.getEffectiveBuiltInType(), is(INT32));
388
389 // Check for the restriction.
390 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
391 assertThat(derivedInfo.getRangeRestrictionString(), is(notNullValue()));
392 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
393 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
394
395 // Check for the restriction value.
396 YangRangeRestriction rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo();
397
398 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
399 .listIterator();
400
401 YangRangeInterval rangeInterval1 = rangeListIterator.next();
402
403 assertThat(((YangInt32) rangeInterval1.getStartValue()).getValue(), is(1));
404 assertThat(((YangInt32) rangeInterval1.getEndValue()).getValue(), is(4));
405
406 YangRangeInterval rangeInterval2 = rangeListIterator.next();
407
408 assertThat(((YangInt32) rangeInterval2.getStartValue()).getValue(), is(10));
409 assertThat(((YangInt32) rangeInterval2.getEndValue()).getValue(), is(20));
410 }
411
412 /**
413 * Checks range restriction in typedef and not stricter in referred type.
414 */
415 @Test(expected = ParserException.class)
416 public void processRangeRestrictionInRefTypeAndTypedefInValid()
417 throws IOException, ParserException, DataModelException {
418 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypeAndTypedefInValid.yang");
419 }
420
421 /**
422 * Checks range restriction for string.
423 */
424 @Test(expected = ParserException.class)
425 public void processRangeRestrictionInString()
426 throws IOException, ParserException, DataModelException {
427 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInString.yang");
428 }
429
430 /**
431 * Checks range restriction for string in referred type.
432 */
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530433 @Test(expected = LinkerException.class)
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530434 public void processRangeRestrictionInStringInRefType()
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530435 throws IOException, DataModelException {
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530436 YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInStringInRefType.yang");
437 }
438
439 /**
440 * Checks pattern restriction in typedef.
441 */
442 @Test
443 public void processPatternRestrictionInTypedef()
444 throws IOException, ParserException, DataModelException {
445
446 YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInTypedef.yang");
447
448 // Check whether the data model tree returned is of type module.
449 assertThat(node instanceof YangModule, is(true));
450
451 // Check whether the node type is set properly to module.
452 assertThat(node.getNodeType(), is(MODULE_NODE));
453
454 // Check whether the module name is set correctly.
455 YangModule yangNode = (YangModule) node;
456 assertThat(yangNode.getName(), is("Test"));
457
458 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
459 YangLeaf leafInfo = leafIterator.next();
460
461 assertThat(leafInfo.getName(), is("invalid-interval"));
462 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
463 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
464
465 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
466 is((YangTypeDef) node.getChild()));
467
468 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
469
470 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
471
472 // Check for the effective built-in type.
473 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
474
475 // Check for the restriction.
476 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
477 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
478 assertThat(derivedInfo.getPatternRestriction(), is(nullValue()));
479 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
480
481 // Check for the restriction value.
482 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
483 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
484
485 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
486 String pattern1 = patternListIterator.next();
487
488 assertThat(pattern1, is("[a-zA-Z]"));
489 }
490
491 /**
492 * Checks pattern restriction in referred type.
493 */
494 @Test
495 public void processPatternRestrictionInRefType()
496 throws IOException, ParserException, DataModelException {
497
498 YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefType.yang");
499
500 // Check whether the data model tree returned is of type module.
501 assertThat(node instanceof YangModule, is(true));
502
503 // Check whether the node type is set properly to module.
504 assertThat(node.getNodeType(), is(MODULE_NODE));
505
506 // Check whether the module name is set correctly.
507 YangModule yangNode = (YangModule) node;
508 assertThat(yangNode.getName(), is("Test"));
509
510 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
511 YangLeaf leafInfo = leafIterator.next();
512
513 assertThat(leafInfo.getName(), is("invalid-interval"));
514 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
515 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
516
517 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
518 is((YangTypeDef) node.getChild()));
519
520 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
521
522 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
523
524 // Check for the effective built-in type.
525 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
526
527 // Check for the restriction.
528 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
529 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
530 assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
531 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
532
533 // Check for the restriction value.
534 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
535 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
536
537 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
538 String pattern1 = patternListIterator.next();
539
540 assertThat(pattern1, is("[a-zA-Z]"));
541 }
542
543 /**
544 * Checks pattern restriction in referred type and typedef.
545 */
546 @Test
547 public void processPatternRestrictionInRefTypeAndTypedef()
548 throws IOException, ParserException, DataModelException {
549
550 YangNode node = manager.getDataModel("src/test/resources/PatternRestrictionInRefTypeAndTypedef.yang");
551
552 // Check whether the data model tree returned is of type module.
553 assertThat(node instanceof YangModule, is(true));
554
555 // Check whether the node type is set properly to module.
556 assertThat(node.getNodeType(), is(MODULE_NODE));
557
558 // Check whether the module name is set correctly.
559 YangModule yangNode = (YangModule) node;
560 assertThat(yangNode.getName(), is("Test"));
561
562 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
563 YangLeaf leafInfo = leafIterator.next();
564
565 assertThat(leafInfo.getName(), is("invalid-interval"));
566 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
567 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
568
569 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
570 is((YangTypeDef) node.getChild()));
571
572 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
573
574 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
575
576 // Check for the effective built-in type.
577 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
578
579 // Check for the restriction.
580 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
581 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
582 assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
583 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
584
585 // Check for the restriction value.
586 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
587 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
588
589 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
590 String pattern1 = patternListIterator.next();
591
592 assertThat(pattern1, is("[a-zA-Z]"));
593
594 String pattern2 = patternListIterator.next();
595
596 assertThat(pattern2, is("[0-9]"));
597 }
598
599 /**
600 * Checks multiple pattern restriction in referred type and typedef.
601 */
602 @Test
603 public void processMultiplePatternRestriction()
604 throws IOException, ParserException, DataModelException {
605
606 YangNode node = manager.getDataModel("src/test/resources/MultiplePatternRestrictionInRefTypeAndTypedef.yang");
607
608 // Check whether the data model tree returned is of type module.
609 assertThat(node instanceof YangModule, is(true));
610
611 // Check whether the node type is set properly to module.
612 assertThat(node.getNodeType(), is(MODULE_NODE));
613
614 // Check whether the module name is set correctly.
615 YangModule yangNode = (YangModule) node;
616 assertThat(yangNode.getName(), is("Test"));
617
618 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
619 YangLeaf leafInfo = leafIterator.next();
620
621 assertThat(leafInfo.getName(), is("invalid-interval"));
622 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
623 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
624
625 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
626 is((YangTypeDef) node.getChild()));
627
628 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
629
630 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
631
632 // Check for the effective built-in type.
633 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
634
635 // Check for the restriction.
636 assertThat(derivedInfo.getLengthRestrictionString(), is(nullValue()));
637 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
638 assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
639 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
640
641 // Check for the restriction value.
642 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
643 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
644
645 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
646 String pattern1 = patternListIterator.next();
647
648 assertThat(pattern1, is("[a-z]"));
649
650 String pattern2 = patternListIterator.next();
651
652 assertThat(pattern2, is("[A-Z]"));
653
654 String pattern3 = patternListIterator.next();
655
656 assertThat(pattern3, is("[0-9]"));
657
658 String pattern4 = patternListIterator.next();
659
660 assertThat(pattern4, is("[\\n]"));
661 }
662
663 /**
664 * Checks multiple pattern and length restriction in referred type and
665 * typedef.
666 */
667 @Test
668 public void processMultiplePatternAndLengthRestriction()
669 throws IOException, ParserException, DataModelException {
670
671 YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestriction.yang");
672
673 // Check whether the data model tree returned is of type module.
674 assertThat(node instanceof YangModule, is(true));
675
676 // Check whether the node type is set properly to module.
677 assertThat(node.getNodeType(), is(MODULE_NODE));
678
679 // Check whether the module name is set correctly.
680 YangModule yangNode = (YangModule) node;
681 assertThat(yangNode.getName(), is("Test"));
682
683 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
684 YangLeaf leafInfo = leafIterator.next();
685
686 assertThat(leafInfo.getName(), is("invalid-interval"));
687 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
688 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
689
690 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
691 is((YangTypeDef) node.getChild()));
692
693 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
694
695 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
696
697 // Check for the effective built-in type.
698 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
699
700 // Check for the restriction.
701 assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
702 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
703 assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
704 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
705
706 // Check for the restriction value.
707 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
708
709 // Check for pattern restriction.
710 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
711 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
712 String pattern1 = patternListIterator.next();
713
714 assertThat(pattern1, is("[a-z]"));
715
716 String pattern2 = patternListIterator.next();
717
718 assertThat(pattern2, is("[A-Z]"));
719
720 String pattern3 = patternListIterator.next();
721
722 assertThat(pattern3, is("[0-9]"));
723
724 String pattern4 = patternListIterator.next();
725
726 assertThat(pattern4, is("[\\n]"));
727
728 // Check for length restriction.
729 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
730 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
731 .listIterator();
732
733 YangRangeInterval rangeInterval1 = lengthListIterator.next();
734
735 assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
736 assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
737
738 YangRangeInterval rangeInterval2 = lengthListIterator.next();
739
740 assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(201)));
741 assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(), is(BigInteger.valueOf(300)));
742 }
743
744 /**
745 * Checks multiple pattern and length restriction in referred type and
746 * typedef.
747 */
748 @Test
749 public void processMultiplePatternAndLengthRestrictionValid()
750 throws IOException, ParserException, DataModelException {
751
752 YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionValid.yang");
753
754 // Check whether the data model tree returned is of type module.
755 assertThat(node instanceof YangModule, is(true));
756
757 // Check whether the node type is set properly to module.
758 assertThat(node.getNodeType(), is(MODULE_NODE));
759
760 // Check whether the module name is set correctly.
761 YangModule yangNode = (YangModule) node;
762 assertThat(yangNode.getName(), is("Test"));
763
764 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
765 YangLeaf leafInfo = leafIterator.next();
766
767 assertThat(leafInfo.getName(), is("invalid-interval"));
768 assertThat(leafInfo.getDataType().getDataTypeName(), is("hello"));
769 assertThat(leafInfo.getDataType().getDataType(), is(DERIVED));
770
771 assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
772 is((YangTypeDef) node.getChild()));
773
774 assertThat(leafInfo.getDataType().getResolvableStatus(), is(RESOLVED));
775
776 YangDerivedInfo<?> derivedInfo = (YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo();
777
778 // Check for the effective built-in type.
779 assertThat(derivedInfo.getEffectiveBuiltInType(), is(STRING));
780
781 // Check for the restriction.
782 assertThat(derivedInfo.getLengthRestrictionString(), is(notNullValue()));
783 assertThat(derivedInfo.getRangeRestrictionString(), is(nullValue()));
784 assertThat(derivedInfo.getPatternRestriction(), is(notNullValue()));
785 assertThat(derivedInfo.getResolvedExtendedInfo(), is(notNullValue()));
786
787 // Check for the restriction value.
788 YangStringRestriction stringRestriction = (YangStringRestriction) derivedInfo.getResolvedExtendedInfo();
789
790 // Check for pattern restriction.
791 YangPatternRestriction patternRestriction = stringRestriction.getPatternRestriction();
792 ListIterator<String> patternListIterator = patternRestriction.getPatternList().listIterator();
793 String pattern1 = patternListIterator.next();
794
795 assertThat(pattern1, is("[a-z]"));
796
797 String pattern2 = patternListIterator.next();
798
799 assertThat(pattern2, is("[A-Z]"));
800
801 String pattern3 = patternListIterator.next();
802
803 assertThat(pattern3, is("[0-9]"));
804
805 String pattern4 = patternListIterator.next();
806
807 assertThat(pattern4, is("[\\n]"));
808
809 // Check for length restriction.
810 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
811 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
812 .listIterator();
813
814 YangRangeInterval rangeInterval1 = lengthListIterator.next();
815
816 assertThat(((YangUint64) rangeInterval1.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
817 assertThat(((YangUint64) rangeInterval1.getEndValue()).getValue(), is(BigInteger.valueOf(20)));
818
819 YangRangeInterval rangeInterval2 = lengthListIterator.next();
820
821 assertThat(((YangUint64) rangeInterval2.getStartValue()).getValue(), is(BigInteger.valueOf(100)));
822 assertThat(((YangUint64) rangeInterval2.getEndValue()).getValue(),
823 is(new BigInteger("18446744073709551615")));
824 }
825
826 /**
827 * Checks multiple pattern and length restriction in referred type and
828 * typedef invalid scenario.
829 */
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530830 @Test(expected = LinkerException.class)
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530831 public void processMultiplePatternAndLengthRestrictionInValid()
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530832 throws IOException, DataModelException {
Gaurav Agrawal3a6b5562016-05-03 00:47:40 +0530833 YangNode node = manager.getDataModel("src/test/resources/MultiplePatternAndLengthRestrictionInValid.yang");
834 }
835}