2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.model.statements.yang.test;
23 import static org.junit.Assert.assertTrue;
25 import java.util.Arrays;
27 import org.junit.Test;
29 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
30 import org.oran.smo.yangtools.parser.model.statements.yang.YContainer;
31 import org.oran.smo.yangtools.parser.model.statements.yang.YModule;
32 import org.oran.smo.yangtools.parser.testutils.YangTestCommon;
34 public class LengthTest extends YangTestCommon {
37 public void testLengthSimple() {
39 parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-simple.yang"));
40 assertTrue(findingsManager.getAllFindings().isEmpty());
42 final YModule module = getModule("length-test-module-simple");
43 assertTrue(module != null);
45 // -------------------------- Simple lengths that are fine --------------------
47 final YContainer cont1 = getContainer(module, "cont1");
48 assertTrue(cont1 != null);
50 assertTrue(getLeaf(cont1, "leaf1").getType().getDataType().equals("string"));
51 assertTrue(getLeaf(cont1, "leaf1").getType().getLength() == null);
53 assertTrue(getLeaf(cont1, "leaf2").getType().getDataType().equals("string"));
54 assertTrue(getLeaf(cont1, "leaf2").getType().getLength() != null);
55 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().size() == 1);
56 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().get(0).lower == 0L);
57 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().get(0).upper == Long.MAX_VALUE);
59 assertTrue(getLeaf(cont1, "leaf3").getType().getDataType().equals("string"));
60 assertTrue(getLeaf(cont1, "leaf3").getType().getLength() != null);
61 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().size() == 1);
62 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().get(0).lower == 0L);
63 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().get(0).upper == Long.MAX_VALUE);
65 assertTrue(getLeaf(cont1, "leaf4").getType().getDataType().equals("string"));
66 assertTrue(getLeaf(cont1, "leaf4").getType().getLength() != null);
67 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().size() == 2);
68 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(0).lower == 0L);
69 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(0).upper == 0L);
70 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(1).lower == Long.MAX_VALUE);
71 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(1).upper == Long.MAX_VALUE);
73 assertTrue(getLeaf(cont1, "leaf5").getType().getDataType().equals("string"));
74 assertTrue(getLeaf(cont1, "leaf5").getType().getLength() != null);
75 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().size() == 2);
76 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(0).lower == 0L);
77 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(0).upper == 0L);
78 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(1).lower == Long.MAX_VALUE);
79 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(1).upper == Long.MAX_VALUE);
81 assertTrue(getLeaf(cont1, "leaf6").getType().getDataType().equals("string"));
82 assertTrue(getLeaf(cont1, "leaf6").getType().getLength() != null);
83 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().size() == 1);
84 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().get(0).lower == 10L);
85 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().get(0).upper == 100L);
87 assertTrue(getLeaf(cont1, "leaf7").getType().getDataType().equals("string"));
88 assertTrue(getLeaf(cont1, "leaf7").getType().getLength() != null);
89 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().size() == 2);
90 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(0).lower == 10L);
91 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(0).upper == 20L);
92 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(1).lower == 30L);
93 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(1).upper == 60L);
95 assertTrue(getLeaf(cont1, "leaf8").getType().getDataType().equals("string"));
96 assertTrue(getLeaf(cont1, "leaf8").getType().getLength() != null);
97 assertTrue(getLeaf(cont1, "leaf8").getType().getLength().getBoundaries().size() == 2);
98 assertTrue(getLeaf(cont1, "leaf8").getType().getLength().getBoundaries().get(0).lower == 0L);
99 assertTrue(getLeaf(cont1, "leaf8").getType().getLength().getBoundaries().get(0).upper == 20L);
100 assertTrue(getLeaf(cont1, "leaf8").getType().getLength().getBoundaries().get(1).lower == 30L);
101 assertTrue(getLeaf(cont1, "leaf8").getType().getLength().getBoundaries().get(1).upper == Long.MAX_VALUE);
103 assertTrue(getLeaf(cont1, "leaf9").getType().getDataType().equals("string"));
104 assertTrue(getLeaf(cont1, "leaf9").getType().getLength() != null);
105 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().size() == 3);
106 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(0).lower == 0L);
107 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(0).upper == 20L);
108 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(1).lower == 30L);
109 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(1).upper == 30L);
110 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(2).lower == 80L);
111 assertTrue(getLeaf(cont1, "leaf9").getType().getLength().getBoundaries().get(2).upper == 80L);
113 assertTrue(getLeaf(cont1, "leaf10").getType().getDataType().equals("string"));
114 assertTrue(getLeaf(cont1, "leaf10").getType().getLength() != null);
115 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().size() == 3);
116 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(0).lower == 0L);
117 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(0).upper == 20L);
118 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(1).lower == 30L);
119 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(1).upper == 30L);
120 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(2).lower == 80L);
121 assertTrue(getLeaf(cont1, "leaf10").getType().getLength().getBoundaries().get(2).upper == 80L);
123 assertTrue(getLeaf(cont1, "leaf11").getType().getDataType().equals("string"));
124 assertTrue(getLeaf(cont1, "leaf11").getType().getLength() != null);
125 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().size() == 3);
126 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(0).lower == 0L);
127 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(0).upper == 0L);
128 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(1).lower == 10L);
129 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(1).upper == 10L);
130 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(2).lower == 40L);
131 assertTrue(getLeaf(cont1, "leaf11").getType().getLength().getBoundaries().get(2).upper == 40L);
133 assertTrue(getLeaf(cont1, "leaf12").getType().getDataType().equals("string"));
134 assertTrue(getLeaf(cont1, "leaf12").getType().getLength() != null);
135 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().size() == 3);
136 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(0).lower == 0L);
137 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(0).upper == 0L);
138 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(1).lower == 10L);
139 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(1).upper == 10L);
140 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(2).lower == 70L);
141 assertTrue(getLeaf(cont1, "leaf12").getType().getLength().getBoundaries().get(2).upper == 70L);
143 assertTrue(getLeaf(cont1, "leaf13").getType().getDataType().equals("string"));
144 assertTrue(getLeaf(cont1, "leaf13").getType().getLength() != null);
145 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().size() == 4);
146 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(0).lower == 0L);
147 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(0).upper == 0L);
148 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(1).lower == 2L);
149 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(1).upper == 2L);
150 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(2).lower == 3L);
151 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(2).upper == 3L);
152 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(3).lower == Long.MAX_VALUE);
153 assertTrue(getLeaf(cont1, "leaf13").getType().getLength().getBoundaries().get(3).upper == Long.MAX_VALUE);
157 public void testLengthTypedefs() {
159 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
160 severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
162 parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-typedefs.yang"));
166 assertTrue(findingsManager.getAllFindings().isEmpty());
168 final YModule module = getModule("length-test-module-typedefs");
169 assertTrue(module != null);
171 // -------------------------- Lengths and typedefs that are fine --------------------
173 assertTrue(getTypedef(module, "typeStringNoLength") != null);
174 assertTrue(getTypedef(module, "typeStringNoLength").getType().getDataType().equals("string"));
175 assertTrue(getTypedef(module, "typeStringNoLength").getType().getLength() == null);
177 assertTrue(getTypedef(module, "typeStringWithLength") != null);
178 assertTrue(getTypedef(module, "typeStringWithLength").getType().getDataType().equals("string"));
179 assertTrue(getTypedef(module, "typeStringWithLength").getType().getLength() != null);
180 assertTrue(getTypedef(module, "typeStringWithLength").getType().getLength().getBoundaries().size() == 1);
181 assertTrue(getTypedef(module, "typeStringWithLength").getType().getLength().getBoundaries().get(0).lower == 10L);
182 assertTrue(getTypedef(module, "typeStringWithLength").getType().getLength().getBoundaries().get(0).upper == 20L);
184 final YContainer cont1 = getContainer(module, "cont1");
185 assertTrue(cont1 != null);
187 assertTrue(getLeaf(cont1, "leaf1").getType().getDataType().equals("string"));
188 assertTrue(getLeaf(cont1, "leaf1").getType().getLength() == null);
190 assertTrue(getLeaf(cont1, "leaf2").getType().getDataType().equals("string"));
191 assertTrue(getLeaf(cont1, "leaf2").getType().getLength() != null);
192 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().size() == 1);
193 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().get(0).lower == 0L);
194 assertTrue(getLeaf(cont1, "leaf2").getType().getLength().getBoundaries().get(0).upper == Long.MAX_VALUE);
196 assertTrue(getLeaf(cont1, "leaf3").getType().getDataType().equals("string"));
197 assertTrue(getLeaf(cont1, "leaf3").getType().getLength() != null);
198 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().size() == 1);
199 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().get(0).lower == 10L);
200 assertTrue(getLeaf(cont1, "leaf3").getType().getLength().getBoundaries().get(0).upper == 20L);
202 assertTrue(getLeaf(cont1, "leaf4").getType().getDataType().equals("string"));
203 assertTrue(getLeaf(cont1, "leaf4").getType().getLength() != null);
204 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().size() == 2);
205 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(0).lower == 10L);
206 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(0).upper == 20L);
207 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(1).lower == 30L);
208 assertTrue(getLeaf(cont1, "leaf4").getType().getLength().getBoundaries().get(1).upper == 60L);
210 assertTrue(getLeaf(cont1, "leaf5").getType().getDataType().equals("string"));
211 assertTrue(getLeaf(cont1, "leaf5").getType().getLength() != null);
212 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().size() == 3);
213 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(0).lower == 10L);
214 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(0).upper == 10L);
215 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(1).lower == 12L);
216 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(1).upper == 12L);
217 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(2).lower == 17L);
218 assertTrue(getLeaf(cont1, "leaf5").getType().getLength().getBoundaries().get(2).upper == 17L);
220 assertTrue(getLeaf(cont1, "leaf6").getType().getDataType().equals("string"));
221 assertTrue(getLeaf(cont1, "leaf6").getType().getLength() != null);
222 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().size() == 1);
223 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().get(0).lower == 10L);
224 assertTrue(getLeaf(cont1, "leaf6").getType().getLength().getBoundaries().get(0).upper == 20L);
226 assertTrue(getLeaf(cont1, "leaf7").getType().getDataType().equals("string"));
227 assertTrue(getLeaf(cont1, "leaf7").getType().getLength() != null);
228 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().size() == 1);
229 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(0).lower == 17L);
230 assertTrue(getLeaf(cont1, "leaf7").getType().getLength().getBoundaries().get(0).upper == 19L);
234 public void testLengthSimpleFaulty() {
236 parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-simple-faulty.yang"));
238 final YModule module = getModule("length-test-module-simple-faulty");
239 assertTrue(module != null);
241 // -------------------------- Simple lengths that are faulty for a variety of reasons --------------------
243 final YContainer cont1 = getContainer(module, "cont1");
244 assertTrue(cont1 != null);
246 assertStatementHasFindingOfType(getLeaf(cont1, "leaf1").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
248 assertStatementHasFindingOfType(getLeaf(cont1, "leaf2").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
250 assertStatementHasFindingOfType(getLeaf(cont1, "leaf3").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
252 assertStatementHasFindingOfType(getLeaf(cont1, "leaf4").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
254 assertStatementHasFindingOfType(getLeaf(cont1, "leaf5").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
256 assertStatementHasFindingOfType(getLeaf(cont1, "leaf6").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
258 assertStatementHasFindingOfType(getLeaf(cont1, "leaf7").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
260 assertStatementHasFindingOfType(getLeaf(cont1, "leaf8").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
262 assertStatementHasFindingOfType(getLeaf(cont1, "leaf9").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
264 assertStatementHasFindingOfType(getLeaf(cont1, "leaf10").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
266 assertStatementHasFindingOfType(getLeaf(cont1, "leaf11").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
268 assertStatementHasFindingOfType(getLeaf(cont1, "leaf12").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
273 public void testLengthTypedefsFaulty() {
275 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
276 severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
278 parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-typedefs-faulty.yang"));
280 final YModule module = getModule("length-test-module-typedefs-faulty");
281 assertTrue(module != null);
283 // -------------------------- Lengths and typedefs that are incorrect --------------------
285 assertNoFindingsOnStatement(getTypedef(module, "typeStringNoLength"));
286 assertStatementHasFindingOfType(getTypedef(module, "typeStringWithLength").getType().getLength(),
287 ParserFindingType.P053_INVALID_VALUE.toString());
288 assertNoFindingsOnStatement(getTypedef(module, "typeUsingTypeStringWithLength"));
290 final YContainer cont1 = getContainer(module, "cont1");
291 assertTrue(cont1 != null);
293 assertStatementHasFindingOfType(getLeaf(cont1, "leaf1").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
295 assertStatementHasFindingOfType(getLeaf(cont1, "leaf2").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
297 assertStatementHasFindingOfType(getLeaf(cont1, "leaf3").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
299 assertStatementHasFindingOfType(getLeaf(cont1, "leaf4").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
301 assertStatementHasFindingOfType(getLeaf(cont1, "leaf5").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
303 assertStatementHasFindingOfType(getLeaf(cont1, "leaf6").getType().getLength(), ParserFindingType.P053_INVALID_VALUE