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.data.dom.test;
23 import static org.junit.Assert.assertTrue;
26 import java.io.FileInputStream;
27 import java.io.InputStream;
29 import org.junit.Test;
30 import org.w3c.dom.Document;
32 import org.oran.smo.yangtools.parser.ParserExecutionContext;
33 import org.oran.smo.yangtools.parser.data.YangData;
34 import org.oran.smo.yangtools.parser.data.dom.YangDataDomDocumentRoot;
35 import org.oran.smo.yangtools.parser.data.dom.YangDataDomDocumentRoot.SourceDataType;
36 import org.oran.smo.yangtools.parser.data.dom.YangDataDomNode;
37 import org.oran.smo.yangtools.parser.data.parser.XmlParser;
38 import org.oran.smo.yangtools.parser.findings.FindingsManager;
39 import org.oran.smo.yangtools.parser.findings.ModifyableFindingSeverityCalculator;
40 import org.oran.smo.yangtools.parser.findings.ParserFindingType;
41 import org.oran.smo.yangtools.parser.input.FileBasedYangInput;
42 import org.oran.smo.yangtools.parser.model.schema.ModuleAndNamespaceResolver;
44 import junit.framework.Assert;
46 public class XmlPrefixesTest {
49 public void test_MultipleNamespaces() {
51 final File instanceFile = new File("src/test/resources/data-dom/xml-test/multiple_namespaces.xml");
52 final YangData yangDataFile = new YangData(new FileBasedYangInput(instanceFile));
54 try (final InputStream inputStream = new FileInputStream(instanceFile)) {
56 final FindingsManager findingsManager = new FindingsManager(new ModifyableFindingSeverityCalculator());
57 final ParserExecutionContext context = new ParserExecutionContext(findingsManager);
59 final Document document = XmlParser.createDocument(inputStream);
60 document.getDocumentElement().normalize();
62 final YangDataDomDocumentRoot root = new YangDataDomDocumentRoot(yangDataFile, SourceDataType.XML);
63 root.buildFromXmlDocument(context, document);
65 final ModuleAndNamespaceResolver resolver = new ModuleAndNamespaceResolver();
66 resolver.recordNamespaceMapping("namespace0", "module0");
67 resolver.recordNamespaceMapping("namespace1", "module1");
68 resolver.recordNamespaceMapping("namespace2", "module2");
69 resolver.recordNamespaceMapping("namespace4", "module4");
70 resolver.recordNamespaceMapping("namespace9", "module9");
71 resolver.recordNamespaceMapping("www.foo.com", "foo");
73 root.resolveModuleOrNamespace(resolver);
75 assertTrue(root.getChildren().size() == 1);
77 final YangDataDomNode cont1 = root.getChildren().get(0);
78 assertTrue(cont1.getName().equals("cont1"));
79 assertTrue(cont1.getNamespace().equals("namespace0"));
80 assertTrue(cont1.getModuleName().equals("module0"));
81 assertTrue(cont1.getAnnotations().size() == 0);
82 assertTrue(cont1.getChildren().size() == 5);
83 assertTrue(cont1.toString().equals("cont1"));
84 assertTrue(cont1.getPath().equals("/cont1"));
86 final YangDataDomNode leaf1 = cont1.getChildren().get(0);
87 assertTrue(leaf1.getName().equals("leaf1"));
88 assertTrue(leaf1.getNamespace().equals("namespace0"));
89 assertTrue(leaf1.getModuleName().equals("module0"));
90 assertTrue(leaf1.getStringValue().equals("42"));
91 assertTrue(leaf1.getAnnotations().size() == 0);
92 assertTrue(leaf1.getChildren().size() == 0);
94 final YangDataDomNode leaf2 = cont1.getChildren().get(1);
95 assertTrue(leaf2.getName().equals("leaf2"));
96 assertTrue(leaf2.getNamespace().equals("namespace1"));
97 assertTrue(leaf2.getModuleName().equals("module1"));
98 assertTrue(leaf2.getStringValue().equals("43"));
99 assertTrue(leaf2.getAnnotations().size() == 0);
100 assertTrue(leaf2.getChildren().size() == 0);
102 final YangDataDomNode leaf3 = cont1.getChildren().get(2);
103 assertTrue(leaf3.getName().equals("leaf3"));
104 assertTrue(leaf3.getNamespace().equals("namespace2"));
105 assertTrue(leaf3.getModuleName().equals("module2"));
106 assertTrue(leaf3.getStringValue().equals("44"));
107 assertTrue(leaf3.getAnnotations().size() == 0);
108 assertTrue(leaf3.getChildren().size() == 0);
110 final YangDataDomNode cont2 = cont1.getChildren().get(3);
111 assertTrue(cont2.getName().equals("cont2"));
112 assertTrue(cont2.getNamespace().equals("namespace4"));
113 assertTrue(cont2.getModuleName().equals("module4"));
114 assertTrue(cont2.getAnnotations().size() == 0);
115 assertTrue(cont2.getChildren().size() == 6);
117 final YangDataDomNode leaf4 = cont2.getChildren().get(0);
118 assertTrue(leaf4.getName().equals("leaf4"));
119 assertTrue(leaf4.getNamespace().equals("namespace4"));
120 assertTrue(leaf4.getModuleName().equals("module4"));
121 assertTrue(leaf4.getStringValue().equals("40"));
122 assertTrue(leaf4.getAnnotations().size() == 0);
123 assertTrue(leaf4.getChildren().size() == 0);
125 final YangDataDomNode leaf5 = cont2.getChildren().get(1);
126 assertTrue(leaf5.getName().equals("leaf5"));
127 assertTrue(leaf5.getNamespace().equals("namespace1"));
128 assertTrue(leaf5.getStringValue().equals("50"));
129 assertTrue(leaf5.getAnnotations().size() == 0);
130 assertTrue(leaf5.getChildren().size() == 0);
132 final YangDataDomNode leaf6 = cont2.getChildren().get(2);
133 assertTrue(leaf6.getName().equals("leaf6"));
134 assertTrue(leaf6.getNamespace().equals("namespace9"));
135 assertTrue(leaf6.getStringValue().equals("60"));
136 assertTrue(leaf6.getAnnotations().size() == 0);
137 assertTrue(leaf6.getChildren().size() == 0);
139 final YangDataDomNode leaf7 = cont2.getChildren().get(3);
140 assertTrue(leaf7.getName().equals("leaf7"));
141 assertTrue(leaf7.getNamespace().equals("namespace4"));
142 assertTrue(leaf7.getStringValue() == null);
143 assertTrue(leaf7.getAnnotations().size() == 0);
144 assertTrue(leaf7.getChildren().size() == 0);
146 final YangDataDomNode leaf8 = cont2.getChildren().get(4);
147 assertTrue(leaf8.getName().equals("leaf8"));
148 assertTrue(leaf8.getNamespace().equals("namespace4"));
149 assertTrue(leaf8.getModuleName().equals("module4"));
150 assertTrue(leaf8.getStringValue().equals(""));
151 assertTrue(leaf8.getAnnotations().size() == 0);
152 assertTrue(leaf8.getChildren().size() == 0);
154 final YangDataDomNode leaf9 = cont2.getChildren().get(5);
155 assertTrue(leaf9.getName().equals("leaf9"));
156 assertTrue(leaf9.getNamespace().equals("namespace4"));
157 assertTrue(leaf9.getStringValue().equals("90"));
158 assertTrue(leaf9.getAnnotations().size() == 1);
159 assertTrue(leaf9.getChildren().size() == 0);
161 final YangDataDomNode cont3 = cont1.getChildren().get(4);
162 assertTrue(cont3.getName().equals("cont3"));
163 assertTrue(cont3.getNamespace().equals("namespace2"));
164 assertTrue(cont3.getAnnotations().size() == 0);
165 assertTrue(cont3.getChildren().size() == 7);
167 final YangDataDomNode leaf10 = cont3.getChildren().get(0);
168 assertTrue(leaf10.getName().equals("leaf10"));
169 assertTrue(leaf10.getNamespace().equals("namespace0"));
170 assertTrue(leaf10.getStringValue().equals("10"));
171 assertTrue(leaf10.getAnnotations().size() == 3);
172 assertTrue(leaf10.getAnnotations().get(0).getName().equals("myanno"));
173 assertTrue(leaf10.getAnnotations().get(0).getNamespace().equals("www.foo.com"));
174 assertTrue(leaf10.getAnnotations().get(0).getModuleName().equals("foo"));
175 assertTrue(leaf10.getAnnotations().get(0).getValue().equals("anno-value1"));
176 assertTrue(leaf10.getAnnotations().get(1).getName().equals("myanno2"));
177 assertTrue(leaf10.getAnnotations().get(1).getNamespace().equals("www.foo.com"));
178 assertTrue(leaf10.getAnnotations().get(1).getValue().equals("anno-value2"));
179 assertTrue(leaf10.getAnnotations().get(2).getName().equals("unknownanno"));
180 assertTrue(leaf10.getAnnotations().get(2).getNamespace().equals("www.foo.com"));
181 assertTrue(leaf10.getAnnotations().get(2).getValue().equals("unknown"));
182 assertTrue(leaf10.getChildren().size() == 0);
184 final YangDataDomNode leaf11 = cont3.getChildren().get(1);
185 assertTrue(leaf11.getName().equals("leaf11"));
186 assertTrue(leaf11.getNamespace() == null);
187 assertTrue(leaf11.getModuleName() == null);
188 assertTrue(leaf11.getStringValue().equals("??"));
189 assertTrue(leaf11.getAnnotations().size() == 0);
190 assertTrue(leaf11.getChildren().size() == 0);
191 assertTrue(leaf11.getFindings().size() == 1);
192 assertTrue(leaf11.getFindings().iterator().next().getFindingType().equals(
193 ParserFindingType.P077_UNRESOLVABLE_PREFIX.toString()));
195 final YangDataDomNode leaf12 = cont3.getChildren().get(2);
196 assertTrue(leaf12.getName().equals("leaf12"));
197 assertTrue(leaf12.getNamespace().equals("namespace0"));
198 assertTrue(leaf12.getStringValue().equals("12"));
199 assertTrue(leaf12.getAnnotations().size() == 0);
200 assertTrue(leaf12.getChildren().size() == 0);
201 assertTrue(leaf12.getFindings().size() == 1);
202 assertTrue(leaf12.getFindings().iterator().next().getFindingType().equals(
203 ParserFindingType.P077_UNRESOLVABLE_PREFIX.toString()));
205 final YangDataDomNode leaf13 = cont3.getChildren().get(3);
206 assertTrue(leaf13.getName().equals("leaf13"));
207 assertTrue(leaf13.getNamespace().equals("namespace1"));
208 assertTrue(leaf13.getStringValue().equals("13"));
209 assertTrue(leaf13.getAnnotations().size() == 0);
210 assertTrue(leaf13.getChildren().size() == 0);
211 assertTrue(leaf13.getFindings().size() == 0);
213 final YangDataDomNode leaf14 = cont3.getChildren().get(4);
214 assertTrue(leaf14.getName().equals("leaf14"));
215 assertTrue(leaf14.getNamespace().equals("namespace1"));
216 assertTrue(leaf14.getStringValue().equals("1 4"));
217 assertTrue(leaf14.getAnnotations().size() == 0);
218 assertTrue(leaf14.getChildren().size() == 0);
219 assertTrue(leaf14.getFindings().size() == 0);
221 final YangDataDomNode leaf15 = cont3.getChildren().get(5);
222 assertTrue(leaf15.getName().equals("leaf15"));
223 assertTrue(leaf15.getNamespace().equals("namespace1"));
224 assertTrue(leaf15.getStringValue().equals("First line Second line Third line"));
226 final YangDataDomNode leaf21 = cont3.getChildren().get(6);
227 assertTrue(leaf21.getName().equals("leaf21"));
228 assertTrue(leaf21.getNamespace().equals("namespace0"));
229 assertTrue(leaf21.getStringValue().equals("11\n 22\t\t"));
231 } catch (final Exception ex) {
232 ex.printStackTrace();
233 Assert.fail(ex.getMessage());
238 public void test_prefixes_on_instance_data_set() {
240 final File instanceFile = new File("src/test/resources/data-dom/xml-test/prefixes_on_instance_data_set.xml");
241 final YangData yangDataFile = new YangData(new FileBasedYangInput(instanceFile));
243 try (final InputStream inputStream = new FileInputStream(instanceFile)) {
245 final FindingsManager findingsManager = new FindingsManager(new ModifyableFindingSeverityCalculator());
246 final ParserExecutionContext context = new ParserExecutionContext(findingsManager);
248 final Document document = XmlParser.createDocument(inputStream);
249 document.getDocumentElement().normalize();
251 final YangDataDomDocumentRoot documentRoot = new YangDataDomDocumentRoot(yangDataFile, SourceDataType.XML);
252 documentRoot.buildFromXmlDocument(context, document);
254 assertTrue(documentRoot.getChildren().size() == 1);
256 final YangDataDomNode cont1 = documentRoot.getChildren().get(0);
257 assertTrue(cont1.getName().equals("cont1"));
258 assertTrue(cont1.getNamespace().equals("namespace0"));
260 final YangDataDomNode leaf1 = cont1.getChildren().get(0);
261 assertTrue(leaf1.getName().equals("leaf1"));
262 assertTrue(leaf1.getNamespace().equals("namespace0"));
264 final YangDataDomNode leaf2 = cont1.getChildren().get(1);
265 assertTrue(leaf2.getName().equals("leaf2"));
266 assertTrue(leaf2.getNamespace().equals("namespace1"));
268 final YangDataDomNode leaf3 = cont1.getChildren().get(2);
269 assertTrue(leaf3.getName().equals("leaf3"));
270 assertTrue(leaf3.getNamespace().equals("namespace2"));
272 } catch (final Exception ex) {
273 ex.printStackTrace();
274 Assert.fail(ex.getMessage());