blob: 466bb97768f9c2ff4f062395dde61f4b99a0c25f [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;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053021import org.junit.Rule;
Vidyashree Rama0b920732016-03-29 09:52:22 +053022import org.junit.Test;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053023import org.junit.rules.ExpectedException;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053024import org.onosproject.yangutils.datamodel.YangDataTypes;
Vidyashree Rama0b920732016-03-29 09:52:22 +053025import org.onosproject.yangutils.datamodel.YangLeaf;
26import org.onosproject.yangutils.datamodel.YangLeafList;
Vidyashree Rama0b920732016-03-29 09:52:22 +053027import org.onosproject.yangutils.datamodel.YangModule;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053028import org.onosproject.yangutils.datamodel.YangNode;
Vidyashree Rama0b920732016-03-29 09:52:22 +053029import org.onosproject.yangutils.datamodel.YangNodeType;
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053030import org.onosproject.yangutils.datamodel.YangRangeInterval;
31import org.onosproject.yangutils.datamodel.YangRangeRestriction;
Vidyashree Rama0b920732016-03-29 09:52:22 +053032import org.onosproject.yangutils.parser.exceptions.ParserException;
33import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053034import org.onosproject.yangutils.utils.builtindatatype.YangInt32;
Vidyashree Rama0b920732016-03-29 09:52:22 +053035
36import static org.hamcrest.MatcherAssert.assertThat;
37import static org.hamcrest.core.Is.is;
38
39/**
40 * Test cases for range restriction listener.
41 */
42public class RangeRestrictionListenerTest {
43
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053044 @Rule
45 public ExpectedException thrown = ExpectedException.none();
46
Vidyashree Rama0b920732016-03-29 09:52:22 +053047 private final YangUtilsParserManager manager = new YangUtilsParserManager();
48
49 /**
50 * Checks valid range statement as sub-statement of leaf statement.
51 */
52 @Test
53 public void processValidRangeStatement() throws IOException, ParserException {
54
55 YangNode node = manager.getDataModel("src/test/resources/ValidRangeStatement.yang");
56
57 assertThat((node instanceof YangModule), is(true));
58 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
59 YangModule yangNode = (YangModule) node;
60 assertThat(yangNode.getName(), is("Test"));
61
62 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
63 YangLeaf leafInfo = leafIterator.next();
64
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053065 assertThat(leafInfo.getName(), is("invalid-interval"));
Vidyashree Rama0b920732016-03-29 09:52:22 +053066 assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
67 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
68 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
69 .getDataType().getDataTypeExtendedInfo();
70
71 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +053072 .listIterator();
Vidyashree Rama0b920732016-03-29 09:52:22 +053073 YangRangeInterval rangeInterval = rangeListIterator.next();
Vidyashree Ramaa2f73982016-04-12 23:33:33 +053074 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
75 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
Vidyashree Rama0b920732016-03-29 09:52:22 +053076 }
77
78 /**
79 * Checks valid range statement as sub-statement of leaf-list.
80 */
81 @Test
82 public void processRangeStatementInsideLeafList() throws IOException, ParserException {
83
84 YangNode node = manager.getDataModel("src/test/resources/RangeStatementInsideLeafList.yang");
85
86 assertThat((node instanceof YangModule), is(true));
87 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
88 YangModule yangNode = (YangModule) node;
89 assertThat(yangNode.getName(), is("Test"));
90
91 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
92 YangLeafList leafListInfo = leafListIterator.next();
93
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +053094 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Rama0b920732016-03-29 09:52:22 +053095 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
96 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
97 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
98 .getDataType().getDataTypeExtendedInfo();
99
100 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
101 .listIterator();
102 YangRangeInterval rangeInterval = rangeListIterator.next();
103
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530104 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
105 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
106 }
107
108 /**
109 * Checks valid range statement with one interval.
110 */
111 @Test
112 public void processRangeWithOneInterval() throws IOException, ParserException {
113
114 YangNode node = manager.getDataModel("src/test/resources/RangeWithOneInterval.yang");
115
116 assertThat((node instanceof YangModule), is(true));
117 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
118 YangModule yangNode = (YangModule) node;
119 assertThat(yangNode.getName(), is("Test"));
120
121 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
122 YangLeafList leafListInfo = leafListIterator.next();
123
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530124 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530125 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
126 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
127 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
128 .getDataType().getDataTypeExtendedInfo();
129
130 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
131 .listIterator();
132 YangRangeInterval rangeInterval = rangeListIterator.next();
133
134 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
135 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(1));
136 }
137
138 /**
139 * Checks valid range statement with min and max.
140 */
141 @Test
142 public void processRangeWithMinMax() throws IOException, ParserException {
143
144 YangNode node = manager.getDataModel("src/test/resources/RangeWithMinMax.yang");
145
146 assertThat((node instanceof YangModule), is(true));
147 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
148 YangModule yangNode = (YangModule) node;
149 assertThat(yangNode.getName(), is("Test"));
150
151 ListIterator<YangLeafList> leafListIterator = yangNode.getListOfLeafList().listIterator();
152 YangLeafList leafListInfo = leafListIterator.next();
153
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530154 assertThat(leafListInfo.getName(), is("invalid-interval"));
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530155 assertThat(leafListInfo.getDataType().getDataTypeName(), is("int32"));
156 assertThat(leafListInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
157 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafListInfo
158 .getDataType().getDataTypeExtendedInfo();
159
160 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
161 .listIterator();
162 YangRangeInterval rangeInterval = rangeListIterator.next();
163
164 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(-2147483648));
165 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(2147483647));
166 }
167
168 /**
169 * Checks valid range statement with invalid integer pattern.
170 */
171 @Test
172 public void processRangeWithInvalidIntegerPattern() throws IOException, ParserException {
173 thrown.expect(ParserException.class);
Gaurav Agrawalcfa1c412016-05-03 00:41:48 +0530174 thrown.expectMessage("YANG file error : Input value \"a\" is not a valid int32.");
Vidyashree Ramaa2f73982016-04-12 23:33:33 +0530175 YangNode node = manager.getDataModel("src/test/resources/RangeWithInvalidIntegerPattern.yang");
Vidyashree Rama0b920732016-03-29 09:52:22 +0530176 }
Vidyashree Rama1db15562016-05-17 16:16:15 +0530177
178 /**
179 * Checks valid range statement with description.
180 */
181 @Test
182 public void processRangeSubStatements() throws IOException, ParserException {
183
184 YangNode node = manager.getDataModel("src/test/resources/RangeSubStatements.yang");
185
186 assertThat((node instanceof YangModule), is(true));
187 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
188 YangModule yangNode = (YangModule) node;
189 assertThat(yangNode.getName(), is("Test"));
190
191 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
192 YangLeaf leafInfo = leafIterator.next();
193
194 assertThat(leafInfo.getName(), is("invalid-interval"));
195 assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
196 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
197 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
198 .getDataType().getDataTypeExtendedInfo();
199
200 assertThat(rangeRestriction.getDescription(), is("\"range description\""));
201 assertThat(rangeRestriction.getReference(), is("\"range reference\""));
202
203 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
204 .listIterator();
205 YangRangeInterval rangeInterval = rangeListIterator.next();
206 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
207 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
208 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
209 }
janani bdd1314f2016-05-19 17:39:50 +0530210
211 /**
212 * Checks whether space can be allowed when range statement is present.
213 */
214 @Test
215 public void processRangeStatementWithSpace() throws IOException, ParserException {
216
217 YangNode node = manager.getDataModel("src/test/resources/RangeStatementWithSpace.yang");
218
219 assertThat((node instanceof YangModule), is(true));
220 assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
221 YangModule yangNode = (YangModule) node;
222 assertThat(yangNode.getName(), is("Test"));
223
224 ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
225 YangLeaf leafInfo = leafIterator.next();
226
227 assertThat(leafInfo.getName(), is("invalid-interval"));
228 assertThat(leafInfo.getDataType().getDataTypeName(), is("int32"));
229 assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.INT32));
230 YangRangeRestriction rangeRestriction = (YangRangeRestriction) leafInfo
231 .getDataType().getDataTypeExtendedInfo();
232
233 ListIterator<YangRangeInterval> rangeListIterator = rangeRestriction.getAscendingRangeIntervals()
234 .listIterator();
235 YangRangeInterval rangeInterval = rangeListIterator.next();
236 assertThat(((YangInt32) rangeInterval.getStartValue()).getValue(), is(1));
237 assertThat(((YangInt32) rangeInterval.getEndValue()).getValue(), is(4));
238 }
Vinod Kumar Se4b9b0c2016-04-30 21:09:15 +0530239}