blob: 3ae527b038b3587233348b0793d97203c643b141 [file] [log] [blame]
Vidyashree Rama0b920732016-03-29 09:52:22 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Vidyashree Rama0b920732016-03-29 09:52:22 +05303 *
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.parser.impl.listeners;
18
Vidyashree Rama0b920732016-03-29 09:52:22 +053019import java.io.IOException;
20import java.util.ListIterator;
21
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053022import org.junit.Rule;
Vidyashree Rama0b920732016-03-29 09:52:22 +053023import org.junit.Test;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053024import org.junit.rules.ExpectedException;
Vidyashree Rama0b920732016-03-29 09:52:22 +053025import org.onosproject.yangutils.datamodel.YangNode;
26import org.onosproject.yangutils.datamodel.YangLeaf;
27import org.onosproject.yangutils.datamodel.YangLeafList;
28import org.onosproject.yangutils.datamodel.YangRangeRestriction;
29import org.onosproject.yangutils.datamodel.YangRangeInterval;
30import org.onosproject.yangutils.datamodel.YangModule;
31import org.onosproject.yangutils.datamodel.YangNodeType;
32import org.onosproject.yangutils.datamodel.YangDataTypes;
33import org.onosproject.yangutils.parser.exceptions.ParserException;
34import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053035import org.onosproject.yangutils.utils.builtindatatype.YangInt32;
Vidyashree Rama0b920732016-03-29 09:52:22 +053036
37import static org.hamcrest.MatcherAssert.assertThat;
38import static org.hamcrest.core.Is.is;
39
40/**
41 * Test cases for range restriction listener.
42 */
43public class RangeRestrictionListenerTest {
44
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053045 @Rule
46 public ExpectedException thrown = ExpectedException.none();
47
Vidyashree Rama0b920732016-03-29 09:52:22 +053048 private final YangUtilsParserManager manager = new YangUtilsParserManager();
49
50 /**
51 * Checks valid range statement as sub-statement of leaf statement.
52 */
53 @Test
54 public void processValidRangeStatement() throws IOException, ParserException {
55
56 YangNode node = manager.getDataModel("src/test/resources/ValidRangeStatement.yang");
57
58 assertThat((node instanceof YangModule), is(true));
59 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
60 YangModule yangNode = (YangModule) node;
61 assertThat(yangNode.getName(), is("Test"));
62
63 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
64 YangLeaf leafInfo = leafIterator.next();
65
66 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
67 assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
68 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
69 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
70 .getDataType().getDataTypeExtendedInfo();
71
72 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
73 .listIterator();
74 YangRangeInterval rangeInterval = rangeListIterator.next();
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053075 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
76 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
Vidyashree Rama0b920732016-03-29 09:52:22 +053077 }
78
79 /**
80 * Checks valid range statement as sub-statement of leaf-list.
81 */
82 @Test
83 public void processRangeStatementInsideLeafList() throws IOException, ParserException {
84
85 YangNode node = manager.getDataModel("src/test/resources/RangeStatementInsideLeafList.yang");
86
87 assertThat((node instanceof YangModule), is(true));
88 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
89 YangModule yangNode = (YangModule) node;
90 assertThat(yangNode.getName(), is("Test"));
91
92 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
93 YangLeafList leafListInfo = leafListIterator.next();
94
95 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
96 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
97 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
98 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
99 .getDataType().getDataTypeExtendedInfo();
100
101 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
102 .listIterator();
103 YangRangeInterval rangeInterval = rangeListIterator.next();
104
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530105 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
106 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
107 }
108
109 /**
110 * Checks valid range statement with one interval.
111 */
112 @Test
113 public void processRangeWithOneInterval() throws IOException, ParserException {
114
115 YangNode node = manager.getDataModel("src/test/resources/RangeWithOneInterval.yang");
116
117 assertThat((node instanceof YangModule), is(true));
118 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
119 YangModule yangNode = (YangModule) node;
120 assertThat(yangNode.getName(), is("Test"));
121
122 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
123 YangLeafList leafListInfo = leafListIterator.next();
124
125 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
126 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
127 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
128 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
129 .getDataType().getDataTypeExtendedInfo();
130
131 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
132 .listIterator();
133 YangRangeInterval rangeInterval = rangeListIterator.next();
134
135 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
136 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(1));
137 }
138
139 /**
140 * Checks valid range statement with min and max.
141 */
142 @Test
143 public void processRangeWithMinMax() throws IOException, ParserException {
144
145 YangNode node = manager.getDataModel("src/test/resources/RangeWithMinMax.yang");
146
147 assertThat((node instanceof YangModule), is(true));
148 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
149 YangModule yangNode = (YangModule) node;
150 assertThat(yangNode.getName(), is("Test"));
151
152 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
153 YangLeafList leafListInfo = leafListIterator.next();
154
155 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
156 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
157 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
158 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
159 .getDataType().getDataTypeExtendedInfo();
160
161 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
162 .listIterator();
163 YangRangeInterval rangeInterval = rangeListIterator.next();
164
165 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(-2147483648));
166 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(2147483647));
167 }
168
169 /**
170 * Checks valid range statement with invalid integer pattern.
171 */
172 @Test
173 public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException {
174 thrown.expect(ParserException.class);
175 thrown.expectMessage("YANG file error : a is not valid.");
176 YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
Vidyashree Rama0b920732016-03-29 09:52:22 +0530177 }
178}