blob: e5e647abeaea78f05d351e74d3cbbbcc5e835354 [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;
22
23import org.junit.Rule;
24import org.junit.Test;
25
26import org.junit.rules.ExpectedException;
27import org.onosproject.yangutils.datamodel.YangNode;
28import org.onosproject.yangutils.datamodel.YangModule;
29import org.onosproject.yangutils.datamodel.YangNodeType;
30import org.onosproject.yangutils.datamodel.YangLeaf;
31import org.onosproject.yangutils.datamodel.YangLeafList;
32import org.onosproject.yangutils.datamodel.YangDataTypes;
33import org.onosproject.yangutils.datamodel.YangStringRestriction;
34import org.onosproject.yangutils.datamodel.YangRangeInterval;
35import org.onosproject.yangutils.datamodel.YangRangeRestriction;
36import org.onosproject.yangutils.datamodel.YangTypeDef;
37import org.onosproject.yangutils.parser.exceptions.ParserException;
38import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
39import org.onosproject.yangutils.utils.builtindatatype.YangUint64;
40
41import static org.hamcrest.MatcherAssert.assertThat;
42import static org.hamcrest.core.Is.is;
43
44/**
45 * Test cases for length restriction listener.
46 */
47public class LengthRestrictionListenerTest {
48
49 @Rule
50 public ExpectedException thrown = ExpectedException.none();
51
52 private final YangUtilsParserManager manager = new YangUtilsParserManager();
53
54 /**
55 * Checks valid length statement as sub-statement of leaf statement.
56 */
57 @Test
58 public void processValidLengthStatement() throws IOException, ParserException {
59
60 YangNode node = manager.getDataModel("src/test/resources/ValidLengthStatement.yang");
61
62 assertThat((node instanceof YangModule), is(true));
63 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
64 YangModule yangNode = (YangModule) node;
65 assertThat(yangNode.getName(), is("Test"));
66
67 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
68 YangLeaf leafInfo = leafIterator.next();
69
70 assertThat(leafInfo.getLeafName(), is("invalid-interval"));
71 assertThat(leafInfo.getDataType().getDataTypeName(), is("string"));
72 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
73 YangStringRestriction stringRestriction = (YangStringRestriction) leafInfo
74 .getDataType().getDataTypeExtendedInfo();
75 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
76
77 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
78 .listIterator();
79
80 YangRangeInterval rangeInterval = lengthListIterator.next();
81
82 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
83 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
84 }
85
86 /**
87 * Checks valid length statement as sub-statement of leaf-list.
88 */
89 @Test
90 public void processLengthStatementInsideLeafList() throws IOException, ParserException {
91
92 YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideLeafList.yang");
93
94 assertThat((node instanceof YangModule), is(true));
95 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
96 YangModule yangNode = (YangModule) node;
97 assertThat(yangNode.getName(), is("Test"));
98
99 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
100 YangLeafList leafListInfo = leafListIterator.next();
101
102 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
103 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
104 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
105 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
106 .getDataType().getDataTypeExtendedInfo();
107 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
108
109 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
110 .listIterator();
111
112 YangRangeInterval rangeInterval = lengthListIterator.next();
113 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
114 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
115 }
116
117 /**
118 * Checks valid length statement as sub-statement of typedef.
119 */
120 @Test
121 public void processLengthStatementInsideTypeDef() throws IOException, ParserException {
122
123 YangNode node = manager.getDataModel("src/test/resources/LengthStatementInsideTypeDef.yang");
124
125 assertThat((node instanceof YangModule), is(true));
126 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
127 YangModule yangNode = (YangModule) node;
128 assertThat(yangNode.getName(), is("Test"));
129
130 YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
131 YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
132 .getDataTypeExtendedInfo();
133
134 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
135 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
136 .listIterator();
137 YangRangeInterval rangeInterval = lengthListIterator.next();
138 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
139 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(100)));
140 }
141
142 /**
143 * Checks length statement with invalid type.
144 */
145 @Test
146 public void processLengthWithInvalidType() throws IOException, ParserException {
147 thrown.expect(ParserException.class);
148 thrown.expectMessage("YANG file error : length name \"1..100\" can be used to restrict the built-in type" +
149 " string or types derived from string.");
150 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidType.yang");
151 }
152
153 /**
154 * Checks length statement with only start interval.
155 */
156 @Test
157 public void processLengthWithOneInterval() throws IOException, ParserException {
158
159
160 YangNode node = manager.getDataModel("src/test/resources/LengthWithOneInterval.yang");
161
162 assertThat((node instanceof YangModule), is(true));
163 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
164 YangModule yangNode = (YangModule) node;
165 assertThat(yangNode.getName(), is("Test"));
166
167 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
168 YangLeafList leafListInfo = leafListIterator.next();
169
170 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
171 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
172 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
173 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
174 .getDataType().getDataTypeExtendedInfo();
175 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
176
177 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
178 .listIterator();
179
180 YangRangeInterval rangeInterval = lengthListIterator.next();
181 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(1)));
182 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(BigInteger.valueOf(1)));
183 }
184
185 /**
186 * Checks length statement with min and max.
187 */
188 @Test
189 public void processLengthWithMinMax() throws IOException, ParserException {
190
191
192 YangNode node = manager.getDataModel("src/test/resources/LengthWithMinMax.yang");
193
194 assertThat((node instanceof YangModule), is(true));
195 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
196 YangModule yangNode = (YangModule) node;
197 assertThat(yangNode.getName(), is("Test"));
198
199 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
200 YangLeafList leafListInfo = leafListIterator.next();
201
202 assertThat(leafListInfo.getLeafName(), is("invalid-interval"));
203 assertThat(leafListInfo.getDataType().getDataTypeName(), is("string"));
204 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.STRING));
205 YangStringRestriction stringRestriction = (YangStringRestriction) leafListInfo
206 .getDataType().getDataTypeExtendedInfo();
207 YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
208
209 ListIterator<YangRangeInterval> lengthListIterator = lengthRestriction.getAscendingRangeIntervals()
210 .listIterator();
211
212 YangRangeInterval rangeInterval = lengthListIterator.next();
213 assertThat(((YangUint64) rangeInterval.getStartValue()).getValue(), is(BigInteger.valueOf(0)));
214 assertThat(((YangUint64) rangeInterval.getEndValue()).getValue(), is(new BigInteger("18446744073709551615")));
215 }
216
217 /**
218 * Checks length statement with invalid integer pattern.
219 */
220 @Test
221 public void processLengthWithInvalidIntegerPattern() throws IOException, ParserException {
222 thrown.expect(ParserException.class);
223 thrown.expectMessage("YANG file error : a is not valid.");
224 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidIntegerPattern.yang");
225 }
226
227 /**
228 * Checks length statement with invalid interval.
229 */
230 @Test
231 public void processLengthWithInvalidInterval() throws IOException, ParserException {
232 thrown.expect(ParserException.class);
233 thrown.expectMessage("YANG file error : 18446744073709551617 is greater than maximum value" +
234 " 18446744073709551615.");
235 YangNode node = manager.getDataModel("src/test/resources/LengthWithInvalidInterval.yang");
236 }
237}