134d380d2e6903e5590c4753ffef92edc24e9ab9
[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.yanglibrary.test;
22
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.File;
26 import java.util.Arrays;
27 import java.util.List;
28 import java.util.Set;
29
30 import org.junit.Test;
31
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;
42
43 public class IetfYangLibraryParserTest extends YangTestCommon {
44
45     @Test
46     public void testRFC7895() {
47
48         final List<File> yangDataFiles = Arrays.asList(new File(
49                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895.xml"));
50
51         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
52         final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
53                 yangDataFiles)).get(0);
54
55         assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
56
57         assertTrue(yangLibrary != null);
58         assertTrue(yangLibrary.getContentId().equals("10445"));
59         assertTrue(yangLibrary.containsTopLevelSchema() == true);
60
61         final Datastore runningDatastore = yangLibrary.getRunningDatastore();
62         assertTrue(runningDatastore != null);
63
64         assertTrue(runningDatastore.getAllModules().size() == 3);
65         assertTrue(runningDatastore.getImplementingModules().size() == 2);
66         assertTrue(runningDatastore.getImportOnlyModules().size() == 1);
67
68         final Module testModule1 = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
69                 "test-module1")).findFirst().get();
70
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"));
89
90         final Module testModule1ext = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
91                 "test-module1-ext")).findFirst().get();
92
93         assertTrue(testModule1ext.getName().equals("test-module1-ext"));
94         assertTrue(testModule1ext.getRevision().equals("2020-05-20"));
95         assertTrue(testModule1ext.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
96
97         final Module importOnlyModule = runningDatastore.getImportOnlyModules().stream().findFirst().get();
98
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);
105
106         final Set<YangFeature> supportedFeatures = runningDatastore.getSupportedFeatures();
107
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")));
113     }
114
115     @Test
116     public void testRFC7895_json() {
117
118         final List<File> yangDataFiles = Arrays.asList(new File(
119                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895.json"));
120
121         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
122         final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
123                 yangDataFiles)).get(0);
124
125         assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
126
127         assertTrue(yangLibrary != null);
128         assertTrue(yangLibrary.getContentId().equals("10445"));
129         assertTrue(yangLibrary.containsTopLevelSchema() == true);
130
131         final Datastore runningDatastore = yangLibrary.getRunningDatastore();
132         assertTrue(runningDatastore != null);
133
134         assertTrue(runningDatastore.getAllModules().size() == 3);
135         assertTrue(runningDatastore.getImplementingModules().size() == 2);
136         assertTrue(runningDatastore.getImportOnlyModules().size() == 1);
137
138         final Module testModule1 = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
139                 "test-module1")).findFirst().get();
140
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"));
159
160         final Module testModule1ext = runningDatastore.getImplementingModules().stream().filter(m -> m.getName().equals(
161                 "test-module1-ext")).findFirst().get();
162
163         assertTrue(testModule1ext.getName().equals("test-module1-ext"));
164         assertTrue(testModule1ext.getRevision().equals("2020-05-20"));
165         assertTrue(testModule1ext.getConformanceType() == Module.IetfYangLibraryConformanceType.IMPLEMENT);
166
167         final Module importOnlyModule = runningDatastore.getImportOnlyModules().stream().findFirst().get();
168
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);
175
176         final Set<YangFeature> supportedFeatures = runningDatastore.getSupportedFeatures();
177
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")));
183     }
184
185     @Test
186     public void testRFC7895_json_modulesetid_is_number_instead_of_string() {
187
188         final List<File> yangDataFiles = Arrays.asList(new File(
189                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-modulesetid_is_number.json"));
190
191         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
192         ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
193
194         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
195                 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
196     }
197
198     @Test
199     public void testRFC7895_with_issues() {
200
201         final List<File> yangDataFiles = Arrays.asList(new File(
202                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-with-issues.xml"));
203
204         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
205         ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
206
207         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
208                 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
209     }
210
211     @Test
212     public void testRFC7895_with_empty_names() {
213
214         final List<File> yangDataFiles = Arrays.asList(new File(
215                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895-empty-names.xml"));
216
217         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
218         ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
219
220         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
221                 ParserFindingType.P082_YANG_LIBRARY_MANDATORY_VALUE_MISSING.toString());
222     }
223
224     @Test
225     public void testRFC8525() {
226
227         final List<File> yangDataFiles = Arrays.asList(new File(
228                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525.xml"));
229
230         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
231         final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
232                 yangDataFiles)).get(0);
233
234         assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
235
236         assertTrue(yangLibraryInstance != null);
237         assertTrue(yangLibraryInstance.getContentId().equals("9876"));
238
239         assertTrue(yangLibraryInstance.getRunningDatastore().getSchemaName().equals("schema1"));
240         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 2);
241
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"));
280
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"));
287
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);
303
304         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getName().equals("set2"));
305         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImplementingModules().size() == 0);
306
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);
322
323         final Datastore operDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
324                 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "operational"));
325         assertTrue(operDatastore != null);
326
327         assertTrue(operDatastore.getModuleSets().get(0).getName().equals("set2"));
328         assertTrue(operDatastore.getModuleSets().get(1).getName().equals("set3"));
329
330         final Datastore unknownDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
331                 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "unknown"));
332         assertTrue(unknownDatastore == null);
333     }
334
335     @Test
336     public void testRFC8525_json() {
337
338         final List<File> yangDataFiles = Arrays.asList(new File(
339                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525.json"));
340
341         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
342         final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
343                 yangDataFiles)).get(0);
344
345         assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
346
347         assertTrue(yangLibraryInstance != null);
348         assertTrue(yangLibraryInstance.getContentId().equals("9876"));
349
350         assertTrue(yangLibraryInstance.getRunningDatastore().getSchemaName().equals("schema1"));
351         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 2);
352
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"));
391
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"));
398
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);
414
415         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getName().equals("set2"));
416         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().get(1).getImplementingModules().size() == 0);
417
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);
433
434         final Datastore operDatastore = yangLibraryInstance.getDatastore(new IdentityRefValue(
435                 "urn:ietf:params:xml:ns:yang:ietf-datastores", "ietf-datastores", "operational"));
436         assertTrue(operDatastore != null);
437
438         assertTrue(operDatastore.getModuleSets().get(0).getName().equals("set2"));
439         assertTrue(operDatastore.getModuleSets().get(1).getName().equals("set3"));
440     }
441
442     @Test
443     public void testRFC8525_no_schema_no_datastore() {
444
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"));
447
448         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
449         final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
450                 yangDataFiles)).get(0);
451
452         assertTrue(yangLibraryInstance != null);
453         assertTrue(yangLibraryInstance.getContentId().equals("9876"));
454
455         assertTrue(yangLibraryInstance.getRunningDatastore().getModuleSets().size() == 3);
456     }
457
458     @Test
459     public void testRFC8525_with_issues() {
460
461         final List<File> yangDataFiles = Arrays.asList(new File(
462                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525-with-issues.xml"));
463
464         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
465         ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(yangDataFiles));
466
467         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
468                 ParserFindingType.P081_INCORRECT_YANG_LIBRARY_DATA.toString());
469     }
470
471     @Test
472     public void testRFC8525_empty_names() {
473
474         final List<File> yangDataFiles = Arrays.asList(new File(
475                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525-empty-names.xml"));
476
477         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
478         final YangLibrary yangLibraryInstance = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
479                 yangDataFiles)).get(0);
480
481         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(),
482                 ParserFindingType.P082_YANG_LIBRARY_MANDATORY_VALUE_MISSING.toString());
483
484         assertTrue(yangLibraryInstance != null);
485     }
486
487     @Test
488     public void test_duplicate_modules() {
489
490         final List<File> yangDataFiles = Arrays.asList(new File(
491                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-8525_duplicates.xml"));
492
493         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
494         final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
495                 yangDataFiles)).get(0);
496
497         assertTrue(yangLibrary != null);
498     }
499
500     @Test
501     public void test_empty_data() {
502
503         final List<File> yangDataFiles = Arrays.asList(new File(
504                 "src/test/resources/yanglibrary/root-instance-data-set-empty.xml"));
505
506         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
507         List<YangLibrary> yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
508                 yangDataFiles));
509
510         assertHasFindingOfType(ietfYangLibrary.getFindingsManager().getAllFindings(), ParserFindingType.P079_EMPTY_DATA_FILE
511                 .toString());
512
513         assertTrue(yangLibrary.isEmpty());
514     }
515
516     @Test
517     public void test_with_other_data() {
518
519         final List<File> yangDataFiles = Arrays.asList(new File(
520                 "src/test/resources/yanglibrary/root-instance-data-set-RFC-7895_and_other_data.xml"));
521
522         final IetfYangLibraryParser ietfYangLibrary = new IetfYangLibraryParser();
523         final YangLibrary yangLibrary = ietfYangLibrary.parseIntoYangLibraries(new FileBasedYangInputResolver(
524                 yangDataFiles)).get(0);
525
526         assertNoFindings(ietfYangLibrary.getFindingsManager().getAllFindings());
527
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"));
535     }
536
537     @Test
538     public void test_multiple_yang_libraries_in_input() {
539
540         severityCalculator.suppressFinding(ParserFindingType.P114_TYPEDEF_NOT_USED.toString());
541         severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
542
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"));
550
551         assertHasFindingOfType(ParserFindingType.P084_MULTIPLE_YANG_LIBRARIES_IN_INPUT.toString());
552     }
553 }