blob: 1f65023615e903a14b980a199cc9bdce68469b98 [file] [log] [blame]
Vidyashree Ramaa2f73982016-04-12 23:33:33 +05301/*
2 * Copyright 2016 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.parser.impl.listeners;
18
19import java.io.IOException;
20import java.math.BigInteger;
21import java.util.ListIterator;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053022import org.junit.Rule;
23import org.junit.Test;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053024import org.junit.rules.ExpectedException;
Gaurav Agrawal72cd1b72016-06-30 13:28:14 +053025import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangDataTypes;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053026import org.onosproject.yangutils.datamodel.YangLeaf;
27import org.onosproject.yangutils.datamodel.YangLeafList;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053028import org.onosproject.yangutils.datamodel.YangModule;
29import org.onosproject.yangutils.datamodel.YangNode;
30import org.onosproject.yangutils.datamodel.YangNodeType;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053031import org.onosproject.yangutils.datamodel.YangRangeInterval;
32import org.onosproject.yangutils.datamodel.YangRangeRestriction;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053033import org.onosproject.yangutils.datamodel.YangStringRestriction;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053034import org.onosproject.yangutils.datamodel.YangTypeDef;
35import org.onosproject.yangutils.parser.exceptions.ParserException;
36import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Gaurav Agrawal95b416c2016-06-07 14:00:26 +053037import org.onosproject.yangutils.datamodel.utils.builtindatatype.YangUint64;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053038
39import static org.hamcrest.MatcherAssert.assertThat;
40import static org.hamcrest.core.Is.is;
41
42/**
43 * Test cases for length restriction listener.
44 */
45public class LengthRestrictionListenerTest {
46
47 @Rule
48 public ExpectedException thrown = ExpectedException.none();
49
50 private final YangUtilsParserManager manager = new YangUtilsParserManager();
51
52 /**
53 * Checks valid length statement as sub-statement of leaf statement.
54 */
55 @Test
56 public void processValidLengthStatement() throws IOException, ParserException {
57
58 YangNode node = manager.getDataModel("src/test/resources/ValidLengthStatement.yang");
59
60 assertThat((node instanceof YangModule), is(true));
61 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
62 YangModule yangNode = (YangModule) node;
63 assertThat(yangNode.getName(), is("Test"));
64
65 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
66 YangLeaf leafInfo = leafIterator.next();
67
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053068 assertThat(leafInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053069 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
70 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
71 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053072 .getDataType().getDataTypeExtendedInfo();
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053073 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
74
75 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053076 .listIterator();
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053077
78 YangRangeInterval rangeInterval = lengthListIterator.next();
79
80 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
81 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
82 }
83
84 /**
85 * Checks valid length statement as sub-statement of leaf-list.
86 */
87 @Test
88 public void processLengthStatementInsideLeafList() throws IOException, ParserException {
89
90 YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideLeafList.yang");
91
92 assertThat((node instanceof YangModule), is(true));
93 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
94 YangModule yangNode = (YangModule) node;
95 assertThat(yangNode.getName(), is("Test"));
96
97 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
98 YangLeafList leafListInfo = leafListIterator.next();
99
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530100 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530101 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
102 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
103 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
104 .getDataType().getDataTypeExtendedInfo();
105 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
106
107 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
108 .listIterator();
109
110 YangRangeInterval rangeInterval = lengthListIterator.next();
111 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
112 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
113 }
114
115 /**
116 * Checks valid length statement as sub-statement of typedef.
117 */
118 @Test
119 public void processLengthStatementInsideTypeDef() throws IOException, ParserException {
120
121 YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideTypeDef.yang");
122
123 assertThat((node instanceof YangModule), is(true));
124 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
125 YangModule yangNode = (YangModule) node;
126 assertThat(yangNode.getName(), is("Test"));
127
128 YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530129 YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530130 .getDataTypeExtendedInfo();
131
132 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
133 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
134 .listIterator();
135 YangRangeInterval rangeInterval = lengthListIterator.next();
136 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
137 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
138 }
139
140 /**
141 * Checks length statement with invalid type.
142 */
143 @Test
144 public void processLengthWithInvalidType() throws IOException, ParserException {
145 thrown.expect(ParserException.class);
146 thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" +
Gaurav Agrawal0d43bb52016-05-17 18:06:38 +0530147 " string/binary or types derived from string/binary.");
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530148 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang");
149 }
150
151 /**
152 * Checks length statement with only start interval.
153 */
154 @Test
155 public void processLengthWithOneInterval() throws IOException, ParserException {
156
157
158 YangNode node = manager.getDataModel("src/test/resources/LengthWithOneInterval.yang");
159
160 assertThat((node instanceof YangModule), is(true));
161 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
162 YangModule yangNode = (YangModule) node;
163 assertThat(yangNode.getName(), is("Test"));
164
165 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
166 YangLeafList leafListInfo = leafListIterator.next();
167
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530168 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530169 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
170 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
171 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
172 .getDataType().getDataTypeExtendedInfo();
173 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
174
175 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
176 .listIterator();
177
178 YangRangeInterval rangeInterval = lengthListIterator.next();
179 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
180 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(1)));
181 }
182
183 /**
184 * Checks length statement with min and max.
185 */
186 @Test
187 public void processLengthWithMinMax() throws IOException, ParserException {
188
189
190 YangNode node = manager.getDataModel("src/test/resources/LengthWithMinMax.yang");
191
192 assertThat((node instanceof YangModule), is(true));
193 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
194 YangModule yangNode = (YangModule) node;
195 assertThat(yangNode.getName(), is("Test"));
196
197 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
198 YangLeafList leafListInfo = leafListIterator.next();
199
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530200 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530201 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
202 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
203 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
204 .getDataType().getDataTypeExtendedInfo();
205 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
206
207 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
208 .listIterator();
209
210 YangRangeInterval rangeInterval = lengthListIterator.next();
211 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
212 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(new BigInteger("18446744073709551615")));
213 }
214
215 /**
216 * Checks length statement with invalid integer pattern.
217 */
218 @Test
219 public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException {
220 thrown.expect(ParserException.class);
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530221 thrown.expectMessage("YANG file error : Input value \"a\" is not a valid uint64.");
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530222 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang");
223 }
224
225 /**
226 * Checks length statement with invalid interval.
227 */
228 @Test
229 public void processLengthWithInvalidInterval() throws IOException, ParserException {
230 thrown.expect(ParserException.class);
231 thrown.expectMessage("YANG file error : 18446744073709551617 is greater than maximum value" +
232 " 18446744073709551615.");
233 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
234 }
Vidyashree Rama1db15562016-05-17 16:16:15 +0530235
236 /**
237 * Checks valid length substatements.
238 */
239 @Test
240 public void processLengthSubStatements() throws IOException, ParserException {
241
242 YangNode node = manager.getDataModel("src/test/resources/LengthSubStatements.yang");
243
244 assertThat((node instanceof YangModule), is(true));
245 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
246 YangModule yangNode = (YangModule) node;
247 assertThat(yangNode.getName(), is("Test"));
248
249 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
250 YangLeaf leafInfo = leafIterator.next();
251
252 assertThat(leafInfo.getName(), is("invalid-interval"));
253 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
254 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
255 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
256 .getDataType().getDataTypeExtendedInfo();
257 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
258
259 assertThat(lengthRestriction.getDescription(), is("\"length description\""));
260 assertThat(lengthRestriction.getReference(), is("\"length reference\""));
261
262 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
263 .listIterator();
264
265 YangRangeInterval rangeInterval = lengthListIterator.next();
266
267 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
268 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
269 }
janani bdd1314f2016-05-19 17:39:50 +0530270
271 /**
272 * Checks whether space can be allowed when length statement is present.
273 */
274 @Test
275 public void processLengthStatementWithSpace() throws IOException, ParserException {
276
277 YangNode node = manager.getDataModel("src/test/resources/LengthStatementWithSpace.yang");
278
279 assertThat((node instanceof YangModule), is(true));
280 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
281 YangModule yangNode = (YangModule) node;
282 assertThat(yangNode.getName(), is("Test"));
283
284 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
285 YangLeaf leafInfo = leafIterator.next();
286
287 assertThat(leafInfo.getName(), is("invalid-interval"));
288 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
289 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
290 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
291 .getDataType().getDataTypeExtendedInfo();
292 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
293
294 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
295 .listIterator();
296
297 YangRangeInterval rangeInterval = lengthListIterator.next();
298
299 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
300 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
301 }
Vinod Kumar Sd4deb062016-04-15 18:08:57 +0530302}