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.yanglibrary.test;
23 import static org.junit.Assert.assertTrue;
26 import java.util.Arrays;
27 import java.util.List;
30 import org.junit.Test;
32 import org.oran.smo.yangtools.parser.data.util.IdentityRefValue;
33 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
34 import org.oran.smo.yangtools.parser.input.FileBasedYangInputResolver;
35 import org.oran.smo.yangtools.parser.model.ModuleIdentity;
36 import org.oran.smo.yangtools.parser.model.util.YangFeature;
37 import org.oran.smo.yangtools.parser.testutils.YangTestCommon;
38 import org.oran.smo.yangtools.parser.yanglibrary.Datastore;
39 import org.oran.smo.yangtools.parser.yanglibrary.IetfYangLibraryParser;
40 import org.oran.smo.yangtools.parser.yanglibrary.Module;
41 import org.oran.smo.yangtools.parser.yanglibrary.YangLibrary;
43 public class IetfYangLibraryParserTest extends YangTestCommon {
46 public void testRFC7895() {
48 final List<File> yangDataFiles = Arrays.asList(new File(
49 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895.xml"));
51 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
52 final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
53 yangDataFiles)).get(0);
55 assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
57 assertTrue(yangLibrary != null);
58 assertTrue(yangLibrary.getContentId().equals("10445"));
59 assertTrue(yangLibrary.containsTopLevelSchema() == true);
61 final Datastore runningDatastore = yangLibrary.getRunningDatastore();
62 assertTrue(runningDatastore != null);
64 assertTrue(runningDatastore.getAllModules().size() == 3);
65 assertTrue(runningDatastore.getImplementingModules().size() == 2);
66 assertTrue(runningDatastore.getImportOnlyModules().size() == 1);
68 final Module testModule1 = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
69 "test-module1")).findFirst().get();
71 assertTrue(testModule1.getName().equals("test-module1"));
72 assertTrue(testModule1.getNamespace().equals("com:foo:test-module1"));
73 assertTrue(testModule1.getRevision().equals("2020-01-01"));
74 assertTrue(testModule1.getSchemaLocations().size() == 1);
75 assertTrue(testModule1.getSchemaLocations().get(0).equals("www.acme.com/test-module1.yang"));
76 assertTrue(testModule1.getFeatures().size() == 3);
77 assertTrue(testModule1.getFeatures().get(0).equals("feature1"));
78 assertTrue(testModule1.getFeatures().get(1).equals("feature2"));
79 assertTrue(testModule1.getFeatures().get(2).equals("feature3"));
80 assertTrue(testModule1.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
81 assertTrue(testModule1.getSubmodules().size() == 1);
82 assertTrue(testModule1.getSubmodules().get(0).getName().equals("test-module1-submodule"));
83 assertTrue(testModule1.getSubmodules().get(0).getRevision().equals("2020-02-02"));
84 assertTrue(testModule1.getSubmodules().get(0).getSchemaLocations().size() == 1);
85 assertTrue(testModule1.getSubmodules().get(0).getSchemaLocations().get(0).equals(
86 "www.acme.com/test-module1-submodule.yang"));
87 assertTrue(testModule1.getDeviatedByModuleNames().size() == 1);
88 assertTrue(testModule1.getDeviatedByModuleNames().get(0).equals("test-module1-ext"));
90 final Module testModule1ext = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
91 "test-module1-ext")).findFirst().get();
93 assertTrue(testModule1ext.getName().equals("test-module1-ext"));
94 assertTrue(testModule1ext.getRevision().equals("2020-05-20"));
95 assertTrue(testModule1ext.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
97 final Module importOnlyModule = runningDatastore.getImportOnlyModules().stream().findFirst().get();
99 assertTrue(importOnlyModule.getName().equals("test-module2"));
100 assertTrue(importOnlyModule.getNamespace().equals("com:foo:test-module2"));
101 assertTrue(importOnlyModule.getRevision() == null);
102 assertTrue(importOnlyModule.getSchemaLocations().size() == 0);
103 assertTrue(importOnlyModule.getFeatures().size() == 1);
104 assertTrue(importOnlyModule.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
106 final Set<YangFeature> supportedFeatures = runningDatastore.getSupportedFeatures();
108 assertTrue(supportedFeatures.size() == 4);
109 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature1")));
110 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature2")));
111 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature3")));
112 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module2", "test-module2", "feature6")));
116 public void testRFC7895_json() {
118 final List<File> yangDataFiles = Arrays.asList(new File(
119 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895.json"));
121 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
122 final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
123 yangDataFiles)).get(0);
125 assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
127 assertTrue(yangLibrary != null);
128 assertTrue(yangLibrary.getContentId().equals("10445"));
129 assertTrue(yangLibrary.containsTopLevelSchema() == true);
131 final Datastore runningDatastore = yangLibrary.getRunningDatastore();
132 assertTrue(runningDatastore != null);
134 assertTrue(runningDatastore.getAllModules().size() == 3);
135 assertTrue(runningDatastore.getImplementingModules().size() == 2);
136 assertTrue(runningDatastore.getImportOnlyModules().size() == 1);
138 final Module testModule1 = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
139 "test-module1")).findFirst().get();
141 assertTrue(testModule1.getName().equals("test-module1"));
142 assertTrue(testModule1.getNamespace().equals("com:foo:test-module1"));
143 assertTrue(testModule1.getRevision().equals("2020-01-01"));
144 assertTrue(testModule1.getSchemaLocations().size() == 1);
145 assertTrue(testModule1.getSchemaLocations().get(0).equals("www.acme.com/test-module1.yang"));
146 assertTrue(testModule1.getFeatures().size() == 3);
147 assertTrue(testModule1.getFeatures().get(0).equals("feature1"));
148 assertTrue(testModule1.getFeatures().get(1).equals("feature2"));
149 assertTrue(testModule1.getFeatures().get(2).equals("feature3"));
150 assertTrue(testModule1.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
151 assertTrue(testModule1.getSubmodules().size() == 1);
152 assertTrue(testModule1.getSubmodules().get(0).getName().equals("test-module1-submodule"));
153 assertTrue(testModule1.getSubmodules().get(0).getRevision().equals("2020-02-02"));
154 assertTrue(testModule1.getSubmodules().get(0).getSchemaLocations().size() == 1);
155 assertTrue(testModule1.getSubmodules().get(0).getSchemaLocations().get(0).equals(
156 "www.acme.com/test-module1-submodule.yang"));
157 assertTrue(testModule1.getDeviatedByModuleNames().size() == 1);
158 assertTrue(testModule1.getDeviatedByModuleNames().get(0).equals("test-module1-ext"));
160 final Module testModule1ext = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
161 "test-module1-ext")).findFirst().get();
163 assertTrue(testModule1ext.getName().equals("test-module1-ext"));
164 assertTrue(testModule1ext.getRevision().equals("2020-05-20"));
165 assertTrue(testModule1ext.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
167 final Module importOnlyModule = runningDatastore.getImportOnlyModules().stream().findFirst().get();
169 assertTrue(importOnlyModule.getName().equals("test-module2"));
170 assertTrue(importOnlyModule.getNamespace().equals("com:foo:test-module2"));
171 assertTrue(importOnlyModule.getRevision() == null);
172 assertTrue(importOnlyModule.getSchemaLocations().size() == 0);
173 assertTrue(importOnlyModule.getFeatures().size() == 1);
174 assertTrue(importOnlyModule.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
176 final Set<YangFeature> supportedFeatures = runningDatastore.getSupportedFeatures();
178 assertTrue(supportedFeatures.size() == 4);
179 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature1")));
180 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature2")));
181 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module1", "test-module1", "feature3")));
182 assertTrue(supportedFeatures.contains(new YangFeature("com:foo:test-module2", "test-module2", "feature6")));
186 public void testRFC7895_json_modulesetid_is_number_instead_of_string() {
188 final List<File> yangDataFiles = Arrays.asList(new File(
189 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-modulesetid_is_number.json"));
191 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
192 ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
194 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
195 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
199 public void testRFC7895_with_issues() {
201 final List<File> yangDataFiles = Arrays.asList(new File(
202 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-with-issues.xml"));
204 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
205 ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
207 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
208 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
212 public void testRFC7895_with_empty_names() {
214 final List<File> yangDataFiles = Arrays.asList(new File(
215 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-empty-names.xml"));
217 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
218 ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
220 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
221 ParserFindingType.P082_YANG_LIBRARY_MANDATORY_VALUE_MISSING.toString());
225 public void testRFC8525() {
227 final List<File> yangDataFiles = Arrays.asList(new File(
228 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525.xml"));
230 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
231 final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
232 yangDataFiles)).get(0);
234 assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
236 assertTrue(yangLibraryInstance != null);
237 assertTrue(yangLibraryInstance.getContentId().equals("9876"));
239 assertTrue(yangLibraryInstance.getRunningDatastore().getSchemaName().equals("schema1"));
240 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 2);
242 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getName().equals("set1"));
243 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().size() == 2);
244 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
245 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
246 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
247 .getName().equals("test-module1"));
248 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
249 .getRevision().equals("2020-01-01"));
250 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
251 .getNamespace().equals("com:foo:test-module1"));
252 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
253 .getSchemaLocations().size() == 2);
254 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
255 .getSchemaLocations().get(0).equals("www.acme.com/test-module1.yang"));
256 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
257 .getSchemaLocations().get(1).equals("www.modules.acme.com/test-module1.yang"));
258 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
259 .getSubmodules().size() == 1);
260 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
261 .getSubmodules().get(0).getName().equals("test-module1-submodule"));
262 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
263 .getSubmodules().get(0).getRevision() == null);
264 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
265 .getSubmodules().get(0).getSchemaLocations().size() == 0);
266 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
267 .getSubmodules().get(0).getModuleIdentity().equals(new ModuleIdentity("test-module1-submodule", null)));
268 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
269 .getFeatures().size() == 3);
270 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
271 .getFeatures().get(0).equals("feature1"));
272 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
273 .getFeatures().get(1).equals("feature2"));
274 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
275 .getFeatures().get(2).equals("feature3"));
276 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
277 .getDeviatedByModuleNames().size() == 1);
278 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
279 .getDeviatedByModuleNames().get(0).equals("test-module1-ext"));
281 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
282 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
283 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
284 .getName().equals("test-module1-ext"));
285 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
286 .getRevision().equals("2020-03-03"));
288 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().size() == 1);
289 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
290 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
291 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0).getName()
292 .equals("test-module2"));
293 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
294 .getRevision() == null);
295 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
296 .getNamespace().equals("com:foo:test-module2"));
297 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
298 .getSchemaLocations().size() == 0);
299 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
300 .getSubmodules().size() == 0);
301 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
302 .getFeatures().size() == 0);
304 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getName().equals("set2"));
305 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImplementingModules().size() == 0);
307 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().size() == 1);
308 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
309 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
310 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0).getName()
311 .equals("test-module6"));
312 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
313 .getRevision().equals("2019-06-06"));
314 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
315 .getNamespace().equals("com:foo:test-module6"));
316 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
317 .getSchemaLocations().size() == 0);
318 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
319 .getSubmodules().size() == 0);
320 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
321 .getFeatures().size() == 0);
323 final Datastore operDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
324 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "operational"));
325 assertTrue(operDatastore != null);
327 assertTrue(operDatastore.getModuleSets().get(0).getName().equals("set2"));
328 assertTrue(operDatastore.getModuleSets().get(1).getName().equals("set3"));
330 final Datastore unknownDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
331 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "unknown"));
332 assertTrue(unknownDatastore == null);
336 public void testRFC8525_json() {
338 final List<File> yangDataFiles = Arrays.asList(new File(
339 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525.json"));
341 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
342 final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
343 yangDataFiles)).get(0);
345 assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
347 assertTrue(yangLibraryInstance != null);
348 assertTrue(yangLibraryInstance.getContentId().equals("9876"));
350 assertTrue(yangLibraryInstance.getRunningDatastore().getSchemaName().equals("schema1"));
351 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 2);
353 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getName().equals("set1"));
354 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().size() == 2);
355 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
356 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
357 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
358 .getName().equals("test-module1"));
359 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
360 .getRevision().equals("2020-01-01"));
361 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
362 .getNamespace().equals("com:foo:test-module1"));
363 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
364 .getSchemaLocations().size() == 2);
365 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
366 .getSchemaLocations().get(0).equals("www.acme.com/test-module1.yang"));
367 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
368 .getSchemaLocations().get(1).equals("www.modules.acme.com/test-module1.yang"));
369 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
370 .getSubmodules().size() == 1);
371 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
372 .getSubmodules().get(0).getName().equals("test-module1-submodule"));
373 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
374 .getSubmodules().get(0).getRevision() == null);
375 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
376 .getSubmodules().get(0).getSchemaLocations().size() == 0);
377 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
378 .getSubmodules().get(0).getModuleIdentity().equals(new ModuleIdentity("test-module1-submodule", null)));
379 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
380 .getFeatures().size() == 3);
381 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
382 .getFeatures().get(0).equals("feature1"));
383 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
384 .getFeatures().get(1).equals("feature2"));
385 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
386 .getFeatures().get(2).equals("feature3"));
387 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
388 .getDeviatedByModuleNames().size() == 1);
389 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0)
390 .getDeviatedByModuleNames().get(0).equals("test-module1-ext"));
392 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
393 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
394 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
395 .getName().equals("test-module1-ext"));
396 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(1)
397 .getRevision().equals("2020-03-03"));
399 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().size() == 1);
400 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
401 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
402 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0).getName()
403 .equals("test-module2"));
404 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
405 .getRevision() == null);
406 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
407 .getNamespace().equals("com:foo:test-module2"));
408 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
409 .getSchemaLocations().size() == 0);
410 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
411 .getSubmodules().size() == 0);
412 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(0).getImportOnlyModules().get(0)
413 .getFeatures().size() == 0);
415 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getName().equals("set2"));
416 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImplementingModules().size() == 0);
418 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().size() == 1);
419 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
420 .getConformanceType() == Module.IetfYangLibraryConformanceType.IMPORT);
421 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0).getName()
422 .equals("test-module6"));
423 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
424 .getRevision().equals("2019-06-06"));
425 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
426 .getNamespace().equals("com:foo:test-module6"));
427 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
428 .getSchemaLocations().size() == 0);
429 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
430 .getSubmodules().size() == 0);
431 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImportOnlyModules().get(0)
432 .getFeatures().size() == 0);
434 final Datastore operDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
435 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "operational"));
436 assertTrue(operDatastore != null);
438 assertTrue(operDatastore.getModuleSets().get(0).getName().equals("set2"));
439 assertTrue(operDatastore.getModuleSets().get(1).getName().equals("set3"));
443 public void testRFC8525_no_schema_no_datastore() {
445 final List<File> yangDataFiles = Arrays.asList(new File(
446 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525-no-schema-no-datastore.xml"));
448 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
449 final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
450 yangDataFiles)).get(0);
452 assertTrue(yangLibraryInstance != null);
453 assertTrue(yangLibraryInstance.getContentId().equals("9876"));
455 assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 3);
459 public void testRFC8525_with_issues() {
461 final List<File> yangDataFiles = Arrays.asList(new File(
462 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525-with-issues.xml"));
464 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
465 ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
467 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
468 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
472 public void testRFC8525_empty_names() {
474 final List<File> yangDataFiles = Arrays.asList(new File(
475 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525-empty-names.xml"));
477 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
478 final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
479 yangDataFiles)).get(0);
481 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
482 ParserFindingType.P082_YANG_LIBRARY_MANDATORY_VALUE_MISSING.toString());
484 assertTrue(yangLibraryInstance != null);
488 public void test_duplicate_modules() {
490 final List<File> yangDataFiles = Arrays.asList(new File(
491 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525_duplicates.xml"));
493 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
494 final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
495 yangDataFiles)).get(0);
497 assertTrue(yangLibrary != null);
501 public void test_empty_data() {
503 final List<File> yangDataFiles = Arrays.asList(new File(
504 "src/test/resources/yanglibrary/root-instance-data-set-empty.xml"));
506 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
507 List<YangLibrary> yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
510 assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(), ParserFindingType.P079_EMPTY_DATA_FILE
513 assertTrue(yangLibrary.isEmpty());
517 public void test_with_other_data() {
519 final List<File> yangDataFiles = Arrays.asList(new File(
520 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895_and_other_data.xml"));
522 final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
523 final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
524 yangDataFiles)).get(0);
526 assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
528 assertTrue(yangLibrary != null);
529 assertTrue(yangLibrary.getContentId().equals("10445"));
530 assertTrue(yangLibrary.getRunningDatastore().getModuleSets().get(0).getImplementingModules().size() == 1);
531 assertTrue(yangLibrary.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0).getName()
532 .equals("test-module1"));
533 assertTrue(yangLibrary.getRunningDatastore().getModuleSets().get(0).getImplementingModules().get(0).getRevision()
534 .equals("2020-01-01"));
538 public void test_multiple_yang_libraries_in_input() {
540 severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
541 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
543 parseAbsoluteImplementsYangModels(Arrays.asList(
544 "src/test/resources/_orig-modules/ietf-yang-library-2019-01-04.yang",
545 "src/test/resources/_orig-modules/ietf-yang-types-2019-11-04.yang",
546 "src/test/resources/_orig-modules/ietf-inet-types-2019-11-04.yang",
547 "src/test/resources/_orig-modules/ietf-datastores-2018-02-14.yang"));
548 parseAbsoluteYangData(Arrays.asList("src/test/resources/yanglibrary/root-instance-data-set-RFC-7895.xml",
549 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525.xml"));
551 assertHasFindingOfType(ParserFindingType.P084_MULTIPLE_YANG_LIBRARIES_IN_INPUT.toString());