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.test;
23 import java.util.Arrays;
25 import org.junit.Test;
27 import org.oran.smo.yangtools.parser.findings.ModuleAndFindingTypeAndSchemaNodePathFilterPredicate;
28 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
29 import org.oran.smo.yangtools.parser.testutils.YangTestCommon;
31 public class YangDeviceModelTest extends YangTestCommon {
34 public void test_correct_modules_supplied() {
36 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
37 severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
39 parseAbsoluteImplementsYangModels(Arrays.asList("src/test/resources/basics/yang-device-model-test/module1.yang",
40 "src/test/resources/basics/yang-device-model-test/module2.yang"));
46 public void test_only_one_correct_module_supplied() {
48 suppressAllExcept(Arrays.asList(ParserFindingType.P033_UNRESOLVEABLE_PREFIX.toString(),
49 ParserFindingType.P131_UNRESOLVABLE_GROUPING.toString(), ParserFindingType.P113_UNRESOLVABLE_DERIVED_TYPE
50 .toString(), ParserFindingType.P034_UNRESOLVABLE_IMPORT.toString()));
52 parseAbsoluteImplementsYangModels(Arrays.asList("src/test/resources/basics/yang-device-model-test/module1.yang"));
54 assertHasFindingOfType(ParserFindingType.P033_UNRESOLVEABLE_PREFIX.toString());
55 assertHasFindingOfType(ParserFindingType.P131_UNRESOLVABLE_GROUPING.toString());
56 assertHasFindingOfType(ParserFindingType.P113_UNRESOLVABLE_DERIVED_TYPE.toString());
57 assertHasFindingOfType(ParserFindingType.P034_UNRESOLVABLE_IMPORT.toString());
61 public void test_empty_module_not_filtered() {
63 severityCalculator.suppressFinding(ParserFindingType.P005_NO_IMPLEMENTS.toString());
66 * The module is empty, but no exception will be thrown.
68 parseAbsoluteImplementsYangModels(Arrays.asList(
69 "src/test/resources/basics/yang-device-model-test/empty-file.yang"));
71 assertHasFindingOfType(ParserFindingType.P013_INVALID_SYNTAX_AT_DOCUMENT_ROOT.toString());
75 public void test_empty_module_filtered() {
78 * Will not be swallowed - a P013 cannot be suppressed.
80 severityCalculator.suppressFinding(ParserFindingType.P013_INVALID_SYNTAX_AT_DOCUMENT_ROOT.toString());
81 findingsManager.addFilterPredicate(ModuleAndFindingTypeAndSchemaNodePathFilterPredicate.fromString(
84 parseAbsoluteImplementsYangModels(Arrays.asList(
85 "src/test/resources/basics/yang-device-model-test/empty-file.yang"));
87 assertHasFindingOfType(ParserFindingType.P013_INVALID_SYNTAX_AT_DOCUMENT_ROOT.toString());
91 public void test_missing_prefix_not_filtered() {
93 severityCalculator.suppressFinding(ParserFindingType.P005_NO_IMPLEMENTS.toString());
96 * This is missing the prefix statement, which is absolutely vital. This will provoke a NPE during
97 * parsing. The NPE should be swallowed, at the same time there should be a finding on the missing prefix.
100 parseAbsoluteImplementsYangModels(Arrays.asList(
101 "src/test/resources/basics/yang-device-model-test/module-missing-prefix.yang"));
103 assertHasFindingOfType(ParserFindingType.P019_MISSING_REQUIRED_CHILD_STATEMENT.toString());
107 public void test_missing_prefix_filtered() {
109 severityCalculator.suppressFinding(ParserFindingType.P005_NO_IMPLEMENTS.toString());
112 * As before, now filtered.
114 findingsManager.addFilterPredicate(ModuleAndFindingTypeAndSchemaNodePathFilterPredicate.fromString(
115 "module-missing-prefix*;*;*"));
117 parseAbsoluteImplementsYangModels(Arrays.asList(
118 "src/test/resources/basics/yang-device-model-test/module-missing-prefix.yang"));
124 public void test_correct_modules_plus_missing_prefix_filtered() {
126 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
127 severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
130 * The two modules are fine, the one with the missing prefix will be filtered.
132 findingsManager.addFilterPredicate(ModuleAndFindingTypeAndSchemaNodePathFilterPredicate.fromString(
133 "module-missing-prefix*;*;*"));
135 parseAbsoluteImplementsYangModels(Arrays.asList("src/test/resources/basics/yang-device-model-test/module1.yang",
136 "src/test/resources/basics/yang-device-model-test/module2.yang",
137 "src/test/resources/basics/yang-device-model-test/module-missing-prefix.yang"));
143 public void test_one_correct_module_plus_missing_prefix_filtered() {
145 severityCalculator.suppressFinding(ParserFindingType.P115_TYPEDEF_USED_ONCE_ONLY.toString());
146 severityCalculator.suppressFinding(ParserFindingType.P133_GROUPING_USED_ONCE_ONLY.toString());
149 * The fine-grained-filter takes care of the issues inside the module-missing-prefix,
150 * the rest is still correctly processed.
152 findingsManager.addFilterPredicate(ModuleAndFindingTypeAndSchemaNodePathFilterPredicate.fromString(
153 "module-missing-prefix*;*;*"));
155 parseAbsoluteImplementsYangModels(Arrays.asList("src/test/resources/basics/yang-device-model-test/module1.yang",
156 "src/test/resources/basics/yang-device-model-test/module-missing-prefix.yang"));
158 assertHasFindingOfType(ParserFindingType.P033_UNRESOLVEABLE_PREFIX.toString());
159 assertHasFindingOfType(ParserFindingType.P131_UNRESOLVABLE_GROUPING.toString());
160 assertHasFindingOfType(ParserFindingType.P113_UNRESOLVABLE_DERIVED_TYPE.toString());
161 assertHasFindingOfType(ParserFindingType.P034_UNRESOLVABLE_IMPORT.toString());