fdd8bbdee4882f0fbe7f5755dbc6fbf79434cf9a
[smo/teiv.git] /
1 /*
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
9  *
10  *        http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21 package org.oran.smo.yangtools.parser.model.statements.yang.test;
22
23 import static org.junit.Assert.assertTrue;
24
25 import java.util.Arrays;
26
27 import org.junit.Test;
28
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;
33
34 public class LengthTest extends YangTestCommon {
35
36     @Test
37     public void testLengthSimple() {
38
39         parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-simple.yang"));
40         assertTrue(findingsManager.getAllFindings().isEmpty());
41
42         final YModule module = getModule("length-test-module-simple");
43         assertTrue(module != null);
44
45         // -------------------------- Simple lengths that are fine --------------------
46
47         final YContainer cont1 = getContainer(module, "cont1");
48         assertTrue(cont1 != null);
49
50         assertTrue(getLeaf(cont1, "leaf1").getType().getDataType().equals("string"));
51         assertTrue(getLeaf(cont1, "leaf1").getType().getLength() == null);
52
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);
58
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);
64
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);
72
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);
80
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);
86
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);
94
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);
102
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);
112
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);
122
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);
132
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);
142
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);
154     }
155
156     @Test
157     public void testLengthTypedefs() {
158
159         severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
160         severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
161
162         parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-typedefs.yang"));
163
164         printFindings();
165
166         assertTrue(findingsManager.getAllFindings().isEmpty());
167
168         final YModule module = getModule("length-test-module-typedefs");
169         assertTrue(module != null);
170
171         // -------------------------- Lengths and typedefs that are fine --------------------
172
173         assertTrue(getTypedef(module, "typeStringNoLength") != null);
174         assertTrue(getTypedef(module, "typeStringNoLength").getType().getDataType().equals("string"));
175         assertTrue(getTypedef(module, "typeStringNoLength").getType().getLength() == null);
176
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);
183
184         final YContainer cont1 = getContainer(module, "cont1");
185         assertTrue(cont1 != null);
186
187         assertTrue(getLeaf(cont1, "leaf1").getType().getDataType().equals("string"));
188         assertTrue(getLeaf(cont1, "leaf1").getType().getLength() == null);
189
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);
195
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);
201
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);
209
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);
219
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);
225
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);
231     }
232
233     @Test
234     public void testLengthSimpleFaulty() {
235
236         parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-simple-faulty.yang"));
237
238         final YModule module = getModule("length-test-module-simple-faulty");
239         assertTrue(module != null);
240
241         // -------------------------- Simple lengths that are faulty for a variety of reasons --------------------
242
243         final YContainer cont1 = getContainer(module, "cont1");
244         assertTrue(cont1 != null);
245
246         assertStatementHasFindingOfType(getLeaf(cont1, "leaf1").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
247                 .toString());
248         assertStatementHasFindingOfType(getLeaf(cont1, "leaf2").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
249                 .toString());
250         assertStatementHasFindingOfType(getLeaf(cont1, "leaf3").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
251                 .toString());
252         assertStatementHasFindingOfType(getLeaf(cont1, "leaf4").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
253                 .toString());
254         assertStatementHasFindingOfType(getLeaf(cont1, "leaf5").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
255                 .toString());
256         assertStatementHasFindingOfType(getLeaf(cont1, "leaf6").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
257                 .toString());
258         assertStatementHasFindingOfType(getLeaf(cont1, "leaf7").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
259                 .toString());
260         assertStatementHasFindingOfType(getLeaf(cont1, "leaf8").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
261                 .toString());
262         assertStatementHasFindingOfType(getLeaf(cont1, "leaf9").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
263                 .toString());
264         assertStatementHasFindingOfType(getLeaf(cont1, "leaf10").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
265                 .toString());
266         assertStatementHasFindingOfType(getLeaf(cont1, "leaf11").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
267                 .toString());
268         assertStatementHasFindingOfType(getLeaf(cont1, "leaf12").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
269                 .toString());
270     }
271
272     @Test
273     public void testLengthTypedefsFaulty() {
274
275         severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
276         severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
277
278         parseRelativeImplementsYangModels(Arrays.asList("length-test/length-test-module-typedefs-faulty.yang"));
279
280         final YModule module = getModule("length-test-module-typedefs-faulty");
281         assertTrue(module != null);
282
283         // -------------------------- Lengths and typedefs that are incorrect --------------------
284
285         assertNoFindingsOnStatement(getTypedef(module, "typeStringNoLength"));
286         assertStatementHasFindingOfType(getTypedef(module, "typeStringWithLength").getType().getLength(),
287                 ParserFindingType.P053_INVALID_VALUE.toString());
288         assertNoFindingsOnStatement(getTypedef(module, "typeUsingTypeStringWithLength"));
289
290         final YContainer cont1 = getContainer(module, "cont1");
291         assertTrue(cont1 != null);
292
293         assertStatementHasFindingOfType(getLeaf(cont1, "leaf1").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
294                 .toString());
295         assertStatementHasFindingOfType(getLeaf(cont1, "leaf2").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
296                 .toString());
297         assertStatementHasFindingOfType(getLeaf(cont1, "leaf3").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
298                 .toString());
299         assertStatementHasFindingOfType(getLeaf(cont1, "leaf4").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
300                 .toString());
301         assertStatementHasFindingOfType(getLeaf(cont1, "leaf5").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
302                 .toString());
303         assertStatementHasFindingOfType(getLeaf(cont1, "leaf6").getType().getLength(), ParserFindingType.P053_INVALID_VALUE
304                 .toString());
305     }
306
307 }