Committed by
Patrick Liu
[ONOS-4938] Defect fix: range interval
Change-Id: I3229d35fb7c80da3bcf150d52ed7e7eba72bb4c8
Showing
8 changed files
with
200 additions
and
33 deletions
| ... | @@ -165,7 +165,7 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> | ... | @@ -165,7 +165,7 @@ public class YangRangeRestriction<T extends YangBuiltInDataTypeInfo<T>> |
| 165 | 165 | ||
| 166 | T curMaxvalue = getMaxRestrictedvalue(); | 166 | T curMaxvalue = getMaxRestrictedvalue(); |
| 167 | 167 | ||
| 168 | - if (newInterval.getStartValue().compareTo(curMaxvalue) != 1) { | 168 | + if (newInterval.getStartValue().compareTo(curMaxvalue) < 1) { |
| 169 | throw new DataModelException( | 169 | throw new DataModelException( |
| 170 | "New added range interval is lesser than the old interval(s)"); | 170 | "New added range interval is lesser than the old interval(s)"); |
| 171 | } | 171 | } | ... | ... |
| ... | @@ -289,7 +289,10 @@ public class YangType<T> | ... | @@ -289,7 +289,10 @@ public class YangType<T> |
| 289 | if (getDataTypeExtendedInfo() == null) { | 289 | if (getDataTypeExtendedInfo() == null) { |
| 290 | getDataObjectFromString(value, getDataType()); | 290 | getDataObjectFromString(value, getDataType()); |
| 291 | } else { | 291 | } else { |
| 292 | - ((YangRangeRestriction) getDataTypeExtendedInfo()).isValidValueString(value); | 292 | + if (!((YangRangeRestriction) getDataTypeExtendedInfo()).isValidValueString(value)) { |
| 293 | + throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | ||
| 294 | + getDataType()); | ||
| 295 | + } | ||
| 293 | } | 296 | } |
| 294 | break; | 297 | break; |
| 295 | } | 298 | } |
| ... | @@ -308,14 +311,14 @@ public class YangType<T> | ... | @@ -308,14 +311,14 @@ public class YangType<T> |
| 308 | && ((YangStringRestriction) getDataTypeExtendedInfo()) | 311 | && ((YangStringRestriction) getDataTypeExtendedInfo()) |
| 309 | .isValidStringOnPatternRestriction(value))) { | 312 | .isValidStringOnPatternRestriction(value))) { |
| 310 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 313 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 311 | - "string"); | 314 | + getDataType()); |
| 312 | } | 315 | } |
| 313 | break; | 316 | break; |
| 314 | } | 317 | } |
| 315 | case BOOLEAN: | 318 | case BOOLEAN: |
| 316 | if (!(value.equals(DataModelUtils.TRUE) || value.equals(DataModelUtils.FALSE))) { | 319 | if (!(value.equals(DataModelUtils.TRUE) || value.equals(DataModelUtils.FALSE))) { |
| 317 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 320 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 318 | - "boolean"); | 321 | + getDataType()); |
| 319 | } | 322 | } |
| 320 | break; | 323 | break; |
| 321 | case ENUMERATION: { | 324 | case ENUMERATION: { |
| ... | @@ -331,7 +334,7 @@ public class YangType<T> | ... | @@ -331,7 +334,7 @@ public class YangType<T> |
| 331 | 334 | ||
| 332 | if (!isValidated) { | 335 | if (!isValidated) { |
| 333 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 336 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 334 | - "union"); | 337 | + getDataType()); |
| 335 | } | 338 | } |
| 336 | break; | 339 | break; |
| 337 | } | 340 | } |
| ... | @@ -339,14 +342,14 @@ public class YangType<T> | ... | @@ -339,14 +342,14 @@ public class YangType<T> |
| 339 | YangBits bits = (YangBits) getDataTypeExtendedInfo(); | 342 | YangBits bits = (YangBits) getDataTypeExtendedInfo(); |
| 340 | if (bits.fromString(value) == null) { | 343 | if (bits.fromString(value) == null) { |
| 341 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 344 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 342 | - "bits"); | 345 | + getDataType()); |
| 343 | } | 346 | } |
| 344 | break; | 347 | break; |
| 345 | } | 348 | } |
| 346 | case BINARY: { | 349 | case BINARY: { |
| 347 | if (!isValidBinary(value, (YangRangeRestriction) getDataTypeExtendedInfo())) { | 350 | if (!isValidBinary(value, (YangRangeRestriction) getDataTypeExtendedInfo())) { |
| 348 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 351 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 349 | - "binary"); | 352 | + getDataType()); |
| 350 | } | 353 | } |
| 351 | break; | 354 | break; |
| 352 | } | 355 | } |
| ... | @@ -360,8 +363,11 @@ public class YangType<T> | ... | @@ -360,8 +363,11 @@ public class YangType<T> |
| 360 | break; | 363 | break; |
| 361 | } | 364 | } |
| 362 | case EMPTY: { | 365 | case EMPTY: { |
| 363 | - throw new DataTypeException("YANG file error : Input value \"" + value | 366 | + if (value.length() > 0) { |
| 364 | - + "\" is not a allowed for a data type " + "empty"); | 367 | + throw new DataTypeException("YANG file error : Input value \"" + value |
| 368 | + + "\" is not allowed for a data type " + getDataType()); | ||
| 369 | + } | ||
| 370 | + break; | ||
| 365 | } | 371 | } |
| 366 | case UNION: { | 372 | case UNION: { |
| 367 | ListIterator<YangType<?>> listIterator = ((YangUnion) getDataTypeExtendedInfo()).getTypeList() | 373 | ListIterator<YangType<?>> listIterator = ((YangUnion) getDataTypeExtendedInfo()).getTypeList() |
| ... | @@ -380,7 +386,7 @@ public class YangType<T> | ... | @@ -380,7 +386,7 @@ public class YangType<T> |
| 380 | 386 | ||
| 381 | if (!isValidated) { | 387 | if (!isValidated) { |
| 382 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 388 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 383 | - "union"); | 389 | + getDataType()); |
| 384 | } | 390 | } |
| 385 | break; | 391 | break; |
| 386 | } | 392 | } |
| ... | @@ -399,7 +405,7 @@ public class YangType<T> | ... | @@ -399,7 +405,7 @@ public class YangType<T> |
| 399 | if (!((YangRangeRestriction) ((YangDerivedInfo) getDataTypeExtendedInfo()) | 405 | if (!((YangRangeRestriction) ((YangDerivedInfo) getDataTypeExtendedInfo()) |
| 400 | .getResolvedExtendedInfo()).isValidValueString(value)) { | 406 | .getResolvedExtendedInfo()).isValidValueString(value)) { |
| 401 | throw new DataTypeException("YANG file error : Input value \"" + value | 407 | throw new DataTypeException("YANG file error : Input value \"" + value |
| 402 | - + "\" is not a valid " + dataType.toString()); | 408 | + + "\" is not a valid " + dataType); |
| 403 | } | 409 | } |
| 404 | } | 410 | } |
| 405 | } else if (dataType == YangDataTypes.STRING) { | 411 | } else if (dataType == YangDataTypes.STRING) { |
| ... | @@ -410,20 +416,20 @@ public class YangType<T> | ... | @@ -410,20 +416,20 @@ public class YangType<T> |
| 410 | if (!(stringRestriction.isValidStringOnLengthRestriction(value) && | 416 | if (!(stringRestriction.isValidStringOnLengthRestriction(value) && |
| 411 | stringRestriction.isValidStringOnPatternRestriction(value))) { | 417 | stringRestriction.isValidStringOnPatternRestriction(value))) { |
| 412 | throw new DataTypeException("YANG file error : Input value \"" + value | 418 | throw new DataTypeException("YANG file error : Input value \"" + value |
| 413 | - + "\" is not a valid " + dataType.toString()); | 419 | + + "\" is not a valid " + dataType); |
| 414 | } | 420 | } |
| 415 | } | 421 | } |
| 416 | } else if (dataType == YangDataTypes.BITS) { | 422 | } else if (dataType == YangDataTypes.BITS) { |
| 417 | YangBits bits = (YangBits) getDataTypeExtendedInfo(); | 423 | YangBits bits = (YangBits) getDataTypeExtendedInfo(); |
| 418 | if (bits.fromString(value) == null) { | 424 | if (bits.fromString(value) == null) { |
| 419 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 425 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 420 | - "bits"); | 426 | + dataType); |
| 421 | } | 427 | } |
| 422 | } else if (dataType == YangDataTypes.BINARY) { | 428 | } else if (dataType == YangDataTypes.BINARY) { |
| 423 | if (!isValidBinary(value, (YangRangeRestriction) ((YangDerivedInfo) | 429 | if (!isValidBinary(value, (YangRangeRestriction) ((YangDerivedInfo) |
| 424 | getDataTypeExtendedInfo()).getResolvedExtendedInfo())) { | 430 | getDataTypeExtendedInfo()).getResolvedExtendedInfo())) { |
| 425 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + | 431 | throw new DataTypeException("YANG file error : Input value \"" + value + "\" is not a valid " + |
| 426 | - dataType.toString()); | 432 | + dataType); |
| 427 | } | 433 | } |
| 428 | } else if (dataType == YangDataTypes.DECIMAL64) { | 434 | } else if (dataType == YangDataTypes.DECIMAL64) { |
| 429 | YangDerivedInfo derivedInfo = (YangDerivedInfo) getDataTypeExtendedInfo(); | 435 | YangDerivedInfo derivedInfo = (YangDerivedInfo) getDataTypeExtendedInfo(); |
| ... | @@ -438,8 +444,8 @@ public class YangType<T> | ... | @@ -438,8 +444,8 @@ public class YangType<T> |
| 438 | break; | 444 | break; |
| 439 | } | 445 | } |
| 440 | default: { | 446 | default: { |
| 441 | - throw new DataTypeException("YANG file error : Input value \"" + value + "\" is for unsupported " + | 447 | + throw new DataTypeException("YANG file error : Input value \"" + value + "\" received for " + |
| 442 | - "data type."); | 448 | + "unsupported data type " + getDataType()); |
| 443 | } | 449 | } |
| 444 | } | 450 | } |
| 445 | } | 451 | } | ... | ... |
| ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.datamodel.utils.builtindatatype; | ... | @@ -18,7 +18,6 @@ package org.onosproject.yangutils.datamodel.utils.builtindatatype; |
| 18 | 18 | ||
| 19 | import java.io.Serializable; | 19 | import java.io.Serializable; |
| 20 | import java.math.BigInteger; | 20 | import java.math.BigInteger; |
| 21 | -import java.util.regex.Pattern; | ||
| 22 | 21 | ||
| 23 | /** | 22 | /** |
| 24 | * Handles the YANG's Uint16 data type processing. | 23 | * Handles the YANG's Uint16 data type processing. |
| ... | @@ -40,11 +39,6 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64>, Serializ | ... | @@ -40,11 +39,6 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64>, Serializ |
| 40 | private static final String MAX_KEYWORD = "max"; | 39 | private static final String MAX_KEYWORD = "max"; |
| 41 | 40 | ||
| 42 | /** | 41 | /** |
| 43 | - * YANG's Integer value pattern. | ||
| 44 | - */ | ||
| 45 | - private static final Pattern NON_NEGATIVE_INTEGER_PATTERN = Pattern.compile("[0-9]+"); | ||
| 46 | - | ||
| 47 | - /** | ||
| 48 | * Valid minimum value of YANG's Uint64. | 42 | * Valid minimum value of YANG's Uint64. |
| 49 | */ | 43 | */ |
| 50 | public static final BigInteger MIN_VALUE = BigInteger.valueOf(0); | 44 | public static final BigInteger MIN_VALUE = BigInteger.valueOf(0); |
| ... | @@ -71,11 +65,13 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64>, Serializ | ... | @@ -71,11 +65,13 @@ public class YangUint64 implements YangBuiltInDataTypeInfo<YangUint64>, Serializ |
| 71 | value = MIN_VALUE; | 65 | value = MIN_VALUE; |
| 72 | } else if (valueInString.matches(MAX_KEYWORD)) { | 66 | } else if (valueInString.matches(MAX_KEYWORD)) { |
| 73 | value = MAX_VALUE; | 67 | value = MAX_VALUE; |
| 74 | - } else if (NON_NEGATIVE_INTEGER_PATTERN.matcher(valueInString).matches()) { | ||
| 75 | - value = new BigInteger(valueInString); | ||
| 76 | } else { | 68 | } else { |
| 77 | - throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + | 69 | + try { |
| 78 | - "uint64."); | 70 | + value = new BigInteger(valueInString); |
| 71 | + } catch (Exception e) { | ||
| 72 | + throw new DataTypeException("YANG file error : Input value \"" + valueInString + "\" is not a valid " + | ||
| 73 | + "uint64."); | ||
| 74 | + } | ||
| 79 | } | 75 | } |
| 80 | 76 | ||
| 81 | if (value.compareTo(MIN_VALUE) < 0) { | 77 | if (value.compareTo(MIN_VALUE) < 0) { | ... | ... |
| ... | @@ -180,6 +180,17 @@ public class DefaultListenerTest { | ... | @@ -180,6 +180,17 @@ public class DefaultListenerTest { |
| 180 | } | 180 | } |
| 181 | 181 | ||
| 182 | /** | 182 | /** |
| 183 | + * Validates default invalid value in typedef. | ||
| 184 | + */ | ||
| 185 | + @Test | ||
| 186 | + public void processDefaultInvalidValueInTypedef() throws IOException, ParserException { | ||
| 187 | + thrown.expect(DataTypeException.class); | ||
| 188 | + thrown.expectMessage("YANG file error : Input value \"0\" is not a valid INT32"); | ||
| 189 | + | ||
| 190 | + manager.getDataModel("src/test/resources/default/DefaultInvalidValueWithRangeInTypedef.yang"); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + /** | ||
| 183 | * Validates default value decimal64 in leaf. | 194 | * Validates default value decimal64 in leaf. |
| 184 | */ | 195 | */ |
| 185 | @Test | 196 | @Test |
| ... | @@ -250,7 +261,7 @@ public class DefaultListenerTest { | ... | @@ -250,7 +261,7 @@ public class DefaultListenerTest { |
| 250 | @Test | 261 | @Test |
| 251 | public void processDefaultInvalidValueStringInLeaf() throws IOException, ParserException { | 262 | public void processDefaultInvalidValueStringInLeaf() throws IOException, ParserException { |
| 252 | thrown.expect(DataTypeException.class); | 263 | thrown.expect(DataTypeException.class); |
| 253 | - thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid string"); | 264 | + thrown.expectMessage("YANG file error : Input value \"2bB2bB\" is not a valid STRING"); |
| 254 | 265 | ||
| 255 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueStringInLeaf.yang"); | 266 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueStringInLeaf.yang"); |
| 256 | } | 267 | } |
| ... | @@ -288,7 +299,7 @@ public class DefaultListenerTest { | ... | @@ -288,7 +299,7 @@ public class DefaultListenerTest { |
| 288 | @Test | 299 | @Test |
| 289 | public void processDefaultInvalidValueBooleanInLeaf() throws IOException, ParserException { | 300 | public void processDefaultInvalidValueBooleanInLeaf() throws IOException, ParserException { |
| 290 | thrown.expect(DataTypeException.class); | 301 | thrown.expect(DataTypeException.class); |
| 291 | - thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid boolean"); | 302 | + thrown.expectMessage("YANG file error : Input value \"yes\" is not a valid BOOLEAN"); |
| 292 | 303 | ||
| 293 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang"); | 304 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBooleanInLeaf.yang"); |
| 294 | } | 305 | } |
| ... | @@ -326,7 +337,7 @@ public class DefaultListenerTest { | ... | @@ -326,7 +337,7 @@ public class DefaultListenerTest { |
| 326 | @Test | 337 | @Test |
| 327 | public void processDefaultInvalidValueEnumberationInLeaf() throws IOException, ParserException { | 338 | public void processDefaultInvalidValueEnumberationInLeaf() throws IOException, ParserException { |
| 328 | thrown.expect(DataTypeException.class); | 339 | thrown.expect(DataTypeException.class); |
| 329 | - thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid union"); | 340 | + thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid ENUMERATION"); |
| 330 | 341 | ||
| 331 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang"); | 342 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueEnumerationInLeaf.yang"); |
| 332 | } | 343 | } |
| ... | @@ -364,7 +375,7 @@ public class DefaultListenerTest { | ... | @@ -364,7 +375,7 @@ public class DefaultListenerTest { |
| 364 | @Test | 375 | @Test |
| 365 | public void processDefaultInvalidValueBitsInLeaf() throws IOException, ParserException { | 376 | public void processDefaultInvalidValueBitsInLeaf() throws IOException, ParserException { |
| 366 | thrown.expect(DataTypeException.class); | 377 | thrown.expect(DataTypeException.class); |
| 367 | - thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid bits"); | 378 | + thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid BITS"); |
| 368 | 379 | ||
| 369 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang"); | 380 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBitsInLeaf.yang"); |
| 370 | } | 381 | } |
| ... | @@ -402,7 +413,7 @@ public class DefaultListenerTest { | ... | @@ -402,7 +413,7 @@ public class DefaultListenerTest { |
| 402 | @Test | 413 | @Test |
| 403 | public void processDefaultInvlaidValueBinaryInLeaf() throws IOException, ParserException { | 414 | public void processDefaultInvlaidValueBinaryInLeaf() throws IOException, ParserException { |
| 404 | thrown.expect(DataTypeException.class); | 415 | thrown.expect(DataTypeException.class); |
| 405 | - thrown.expectMessage("YANG file error : Input value \"000\" is not a valid binary"); | 416 | + thrown.expectMessage("YANG file error : Input value \"000\" is not a valid BINARY"); |
| 406 | 417 | ||
| 407 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang"); | 418 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueBinaryInLeaf.yang"); |
| 408 | } | 419 | } |
| ... | @@ -413,7 +424,7 @@ public class DefaultListenerTest { | ... | @@ -413,7 +424,7 @@ public class DefaultListenerTest { |
| 413 | @Test | 424 | @Test |
| 414 | public void processDefaultValueEmptyInLeaf() throws IOException, ParserException { | 425 | public void processDefaultValueEmptyInLeaf() throws IOException, ParserException { |
| 415 | thrown.expect(DataTypeException.class); | 426 | thrown.expect(DataTypeException.class); |
| 416 | - thrown.expectMessage("YANG file error : Input value \"something\" is not a allowed for a data type empty"); | 427 | + thrown.expectMessage("YANG file error : Input value \"something\" is not allowed for a data type EMPTY"); |
| 417 | 428 | ||
| 418 | manager.getDataModel("src/test/resources/default/DefaultValueEmptyInLeaf.yang"); | 429 | manager.getDataModel("src/test/resources/default/DefaultValueEmptyInLeaf.yang"); |
| 419 | } | 430 | } |
| ... | @@ -451,7 +462,7 @@ public class DefaultListenerTest { | ... | @@ -451,7 +462,7 @@ public class DefaultListenerTest { |
| 451 | @Test | 462 | @Test |
| 452 | public void processDefaultInvalidValueUnionInLeaf() throws IOException, ParserException { | 463 | public void processDefaultInvalidValueUnionInLeaf() throws IOException, ParserException { |
| 453 | thrown.expect(DataTypeException.class); | 464 | thrown.expect(DataTypeException.class); |
| 454 | - thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid union"); | 465 | + thrown.expectMessage("YANG file error : Input value \"xyz\" is not a valid UNION"); |
| 455 | 466 | ||
| 456 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang"); | 467 | manager.getDataModel("src/test/resources/default/DefaultInvalidValueUnionInLeaf.yang"); |
| 457 | } | 468 | } | ... | ... |
| ... | @@ -19,6 +19,7 @@ package org.onosproject.yangutils.plugin.manager; | ... | @@ -19,6 +19,7 @@ package org.onosproject.yangutils.plugin.manager; |
| 19 | import java.io.IOException; | 19 | import java.io.IOException; |
| 20 | import java.math.BigInteger; | 20 | import java.math.BigInteger; |
| 21 | import java.util.ListIterator; | 21 | import java.util.ListIterator; |
| 22 | + | ||
| 22 | import org.junit.Test; | 23 | import org.junit.Test; |
| 23 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; | 24 | import org.onosproject.yangutils.datamodel.YangDerivedInfo; |
| 24 | import org.onosproject.yangutils.datamodel.YangLeaf; | 25 | import org.onosproject.yangutils.datamodel.YangLeaf; |
| ... | @@ -28,8 +29,11 @@ import org.onosproject.yangutils.datamodel.YangPatternRestriction; | ... | @@ -28,8 +29,11 @@ import org.onosproject.yangutils.datamodel.YangPatternRestriction; |
| 28 | import org.onosproject.yangutils.datamodel.YangRangeInterval; | 29 | import org.onosproject.yangutils.datamodel.YangRangeInterval; |
| 29 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; | 30 | import org.onosproject.yangutils.datamodel.YangRangeRestriction; |
| 30 | import org.onosproject.yangutils.datamodel.YangStringRestriction; | 31 | import org.onosproject.yangutils.datamodel.YangStringRestriction; |
| 32 | +import org.onosproject.yangutils.datamodel.YangType; | ||
| 31 | import org.onosproject.yangutils.datamodel.YangTypeDef; | 33 | import org.onosproject.yangutils.datamodel.YangTypeDef; |
| 32 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; | 34 | import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| 35 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes; | ||
| 36 | +import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt16; | ||
| 33 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32; | 37 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangInt32; |
| 34 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64; | 38 | import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64; |
| 35 | import org.onosproject.yangutils.linker.exceptions.LinkerException; | 39 | import org.onosproject.yangutils.linker.exceptions.LinkerException; |
| ... | @@ -292,6 +296,79 @@ public final class RestrictionResolutionTest { | ... | @@ -292,6 +296,79 @@ public final class RestrictionResolutionTest { |
| 292 | } | 296 | } |
| 293 | 297 | ||
| 294 | /** | 298 | /** |
| 299 | + * Checks range restriction in referred typedef. | ||
| 300 | + */ | ||
| 301 | + @Test | ||
| 302 | + public void processRangeRestrictionInRefTypedef() | ||
| 303 | + throws IOException, ParserException, DataModelException { | ||
| 304 | + | ||
| 305 | + YangNode node = manager.getDataModel("src/test/resources/RangeRestrictionInRefTypedef.yang"); | ||
| 306 | + | ||
| 307 | + // Check whether the data model tree returned is of type module. | ||
| 308 | + assertThat(node instanceof YangModule, is(true)); | ||
| 309 | + | ||
| 310 | + // Check whether the node type is set properly to module. | ||
| 311 | + assertThat(node.getNodeType(), is(MODULE_NODE)); | ||
| 312 | + | ||
| 313 | + // Check whether the module name is set correctly. | ||
| 314 | + YangModule yangNode = (YangModule) node; | ||
| 315 | + assertThat(yangNode.getName(), is("Test")); | ||
| 316 | + | ||
| 317 | + // check top typedef | ||
| 318 | + YangTypeDef topTypedef = (YangTypeDef) yangNode.getChild(); | ||
| 319 | + assertThat(topTypedef.getName(), is("Num3")); | ||
| 320 | + YangType type = topTypedef.getTypeList().iterator().next(); | ||
| 321 | + assertThat(type.getDataType(), is(YangDataTypes.INT16)); | ||
| 322 | + assertThat(type.getDataTypeName(), is("int16")); | ||
| 323 | + | ||
| 324 | + // Check for the restriction value. | ||
| 325 | + YangRangeRestriction rangeRestriction = (YangRangeRestriction) type.getDataTypeExtendedInfo(); | ||
| 326 | + ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals() | ||
| 327 | + .listIterator(); | ||
| 328 | + YangRangeInterval rangeInterval1 = rangeListIterator.next(); | ||
| 329 | + assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-32000)); | ||
| 330 | + assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(4)); | ||
| 331 | + | ||
| 332 | + YangRangeInterval rangeInterval2 = rangeListIterator.next(); | ||
| 333 | + assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(32767)); | ||
| 334 | + assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(32767)); | ||
| 335 | + | ||
| 336 | + // check referred typedef | ||
| 337 | + YangTypeDef refTypedef = (YangTypeDef) topTypedef.getNextSibling(); | ||
| 338 | + assertThat(refTypedef.getName(), is("Num6")); | ||
| 339 | + YangType refType = refTypedef.getTypeList().iterator().next(); | ||
| 340 | + assertThat(refType.getDataType(), is(YangDataTypes.DERIVED)); | ||
| 341 | + assertThat(refType.getDataTypeName(), is("Num3")); | ||
| 342 | + YangDerivedInfo<YangRangeRestriction> derivedInfo = | ||
| 343 | + (YangDerivedInfo<YangRangeRestriction>) refType.getDataTypeExtendedInfo(); | ||
| 344 | + | ||
| 345 | + // Check for the restriction value. | ||
| 346 | + rangeRestriction = (YangRangeRestriction) derivedInfo.getResolvedExtendedInfo(); | ||
| 347 | + rangeListIterator = rangeRestriction.getAscendingRangeIntervals().listIterator(); | ||
| 348 | + rangeInterval1 = rangeListIterator.next(); | ||
| 349 | + assertThat((int) ((YangInt16) rangeInterval1.getStartValue()).getValue(), is(-3)); | ||
| 350 | + assertThat((int) ((YangInt16) rangeInterval1.getEndValue()).getValue(), is(-3)); | ||
| 351 | + | ||
| 352 | + rangeInterval2 = rangeListIterator.next(); | ||
| 353 | + assertThat((int) ((YangInt16) rangeInterval2.getStartValue()).getValue(), is(-2)); | ||
| 354 | + assertThat((int) ((YangInt16) rangeInterval2.getEndValue()).getValue(), is(2)); | ||
| 355 | + | ||
| 356 | + YangRangeInterval rangeInterval3 = rangeListIterator.next(); | ||
| 357 | + assertThat((int) ((YangInt16) rangeInterval3.getStartValue()).getValue(), is(3)); | ||
| 358 | + assertThat((int) ((YangInt16) rangeInterval3.getEndValue()).getValue(), is(3)); | ||
| 359 | + } | ||
| 360 | + | ||
| 361 | + /** | ||
| 362 | + * Checks invalid range restriction in referred typedef. | ||
| 363 | + */ | ||
| 364 | + @Test(expected = LinkerException.class) | ||
| 365 | + public void processInvalidRangeRestrictionInRefTypedef() | ||
| 366 | + throws IOException, ParserException, DataModelException { | ||
| 367 | + | ||
| 368 | + manager.getDataModel("src/test/resources/RangeRestrictionInvalidInRefTypedef.yang"); | ||
| 369 | + } | ||
| 370 | + | ||
| 371 | + /** | ||
| 295 | * Checks range restriction in referred type. | 372 | * Checks range restriction in referred type. |
| 296 | */ | 373 | */ |
| 297 | @Test | 374 | @Test | ... | ... |
| 1 | +module Test { | ||
| 2 | + namespace "urn:ietf:params:xml:ns:yang:yt3"; | ||
| 3 | + prefix "yt3"; | ||
| 4 | + | ||
| 5 | + organization | ||
| 6 | + "YANG Language Design Team"; | ||
| 7 | + | ||
| 8 | + contact | ||
| 9 | + "Andy Bierman"; | ||
| 10 | + | ||
| 11 | + description | ||
| 12 | + "YANG test module 3."; | ||
| 13 | + | ||
| 14 | + revision 2007-12-04 { | ||
| 15 | + description "Initial revision."; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + typedef Num3 { | ||
| 19 | + units seconds; | ||
| 20 | + type int16 { | ||
| 21 | + range "-32000 .. 4 | max"; | ||
| 22 | + } | ||
| 23 | + description "test 3"; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + typedef Num6 { | ||
| 27 | + description "test 6"; | ||
| 28 | + type Num3 { | ||
| 29 | + range "-3 | -2 .. +2 | 3"; | ||
| 30 | + } | ||
| 31 | + default 0; | ||
| 32 | + } | ||
| 33 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | +module Test { | ||
| 2 | + namespace "urn:ietf:params:xml:ns:yang:yt3"; | ||
| 3 | + prefix "yt3"; | ||
| 4 | + | ||
| 5 | + organization | ||
| 6 | + "YANG Language Design Team"; | ||
| 7 | + | ||
| 8 | + contact | ||
| 9 | + "Andy Bierman"; | ||
| 10 | + | ||
| 11 | + description | ||
| 12 | + "YANG test module 3."; | ||
| 13 | + | ||
| 14 | + revision 2007-12-04 { | ||
| 15 | + description "Initial revision."; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + typedef Num3 { | ||
| 19 | + units seconds; | ||
| 20 | + type int16 { | ||
| 21 | + range "-3 | -2 .. +2 | 3"; | ||
| 22 | + } | ||
| 23 | + description "test 3"; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + typedef Num6 { | ||
| 27 | + description "test 6"; | ||
| 28 | + type Num3 { | ||
| 29 | + range "-32000 .. 4 | max" ; | ||
| 30 | + } | ||
| 31 | + default 0; | ||
| 32 | + } | ||
| 33 | +} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment