6da4f2439557f603fad6db5dd24de2e4abd47bb9
[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.data.dom.test;
22
23 import static org.junit.Assert.assertTrue;
24
25 import java.io.File;
26 import java.io.FileInputStream;
27 import java.io.InputStream;
28
29 import org.junit.Test;
30 import org.w3c.dom.Document;
31
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;
43
44 import junit.framework.Assert;
45
46 public class XmlPrefixesTest {
47
48     @Test
49     public void test_MultipleNamespaces() {
50
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));
53
54         try (final InputStream inputStream = new FileInputStream(instanceFile)) {
55
56             final FindingsManager findingsManager = new FindingsManager(new ModifyableFindingSeverityCalculator());
57             final ParserExecutionContext context = new ParserExecutionContext(findingsManager);
58
59             final Document document = XmlParser.createDocument(inputStream);
60             document.getDocumentElement().normalize();
61
62             final YangDataDomDocumentRoot root = new YangDataDomDocumentRoot(yangDataFile, SourceDataType.XML);
63             root.buildFromXmlDocument(context, document);
64
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");
72
73             root.resolveModuleOrNamespace(resolver);
74
75             assertTrue(root.getChildren().size() == 1);
76
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"));
85
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);
93
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);
101
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);
109
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);
116
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);
124
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);
131
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);
138
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);
145
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);
153
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);
160
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);
166
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);
183
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()));
194
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()));
204
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);
212
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);
220
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"));
225
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"));
230
231         } catch (final Exception ex) {
232             ex.printStackTrace();
233             Assert.fail(ex.getMessage());
234         }
235     }
236
237     @Test
238     public void test_prefixes_on_instance_data_set() {
239
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));
242
243         try (final InputStream inputStream = new FileInputStream(instanceFile)) {
244
245             final FindingsManager findingsManager = new FindingsManager(new ModifyableFindingSeverityCalculator());
246             final ParserExecutionContext context = new ParserExecutionContext(findingsManager);
247
248             final Document document = XmlParser.createDocument(inputStream);
249             document.getDocumentElement().normalize();
250
251             final YangDataDomDocumentRoot documentRoot = new YangDataDomDocumentRoot(yangDataFile, SourceDataType.XML);
252             documentRoot.buildFromXmlDocument(context, document);
253
254             assertTrue(documentRoot.getChildren().size() == 1);
255
256             final YangDataDomNode cont1 = documentRoot.getChildren().get(0);
257             assertTrue(cont1.getName().equals("cont1"));
258             assertTrue(cont1.getNamespace().equals("namespace0"));
259
260             final YangDataDomNode leaf1 = cont1.getChildren().get(0);
261             assertTrue(leaf1.getName().equals("leaf1"));
262             assertTrue(leaf1.getNamespace().equals("namespace0"));
263
264             final YangDataDomNode leaf2 = cont1.getChildren().get(1);
265             assertTrue(leaf2.getName().equals("leaf2"));
266             assertTrue(leaf2.getNamespace().equals("namespace1"));
267
268             final YangDataDomNode leaf3 = cont1.getChildren().get(2);
269             assertTrue(leaf3.getName().equals("leaf3"));
270             assertTrue(leaf3.getNamespace().equals("namespace2"));
271
272         } catch (final Exception ex) {
273             ex.printStackTrace();
274             Assert.fail(ex.getMessage());
275         }
276     }
277 }