import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThrows;
-import com.google.common.collect.ImmutableSet;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.XMLNamespace;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
-import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.SystemLeafSetNode;
-import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
@Test
public void testComplexXmlParsing() throws IOException, SAXException, URISyntaxException, XMLStreamException,
ParserConfigurationException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/baz.xml");
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/baz.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ try (var xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema)) {
+ xmlParser.parse(reader);
+ }
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
- xmlParser.parse(reader);
-
- xmlParser.flush();
- xmlParser.close();
-
- final NormalizedNode transformedInput = result.getResult();
+ final NormalizedNode transformedInput = result.getResult().data();
assertNotNull(transformedInput);
final NormalizedNode expectedNormalizedNode = buildOuterContainerNode();
@Test
public void testSimpleXmlParsing() throws IOException, URISyntaxException, XMLStreamException,
ParserConfigurationException, SAXException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/foo.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/foo.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
xmlParser.parse(reader);
- final NormalizedNode transformedInput = result.getResult();
+ final var transformedInput = result.getResult().data();
assertNotNull(transformedInput);
}
@Test
public void shouldFailOnDuplicateLeaf() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
- assertThat(ex.getMessage(), containsString("Duplicate element \"decimal64-leaf\" in namespace"
- + " \"foo-namespace\" with parent \"container leaf-container\" in XML input"));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ assertThat(ex.getMessage(), containsString("""
+ Duplicate element "decimal64-leaf" in namespace "foo-namespace" with parent \
+ "EmptyContainerEffectiveStatement{argument=(foo-namespace)leaf-container}" in XML input"""));
}
@Test
public void shouldFailOnDuplicateAnyXml() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-2.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
- assertThat(ex.getMessage(), containsString("Duplicate element \"my-anyxml\" in namespace"
- + " \"foo-namespace\" with parent \"container anyxml-container\" in XML input"));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-2.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ assertThat(ex.getMessage(), containsString("""
+ Duplicate element "my-anyxml" in namespace "foo-namespace" with parent \
+ "EmptyContainerEffectiveStatement{argument=(foo-namespace)anyxml-container}" in XML input"""));
}
@Test
public void shouldFailOnDuplicateContainer() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-3.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
- assertThat(ex.getMessage(), containsString("Duplicate element \"leaf-container\" in namespace"
- + " \"foo-namespace\" with parent \"container parent-container\" in XML input"));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-foo-3.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, parentContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ assertThat(ex.getMessage(), containsString("""
+ Duplicate element "leaf-container" in namespace "foo-namespace" with parent \
+ "EmptyContainerEffectiveStatement{argument=(foo-namespace)parent-container}" in XML input"""));
}
@Test
public void shouldFailOnUnterminatedLeafElement() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
assertThat(ex.getMessage(), containsString(" START_ELEMENT "));
}
@Test
public void shouldFailOnUnterminatedLeafElement2() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-2.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-2.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
assertThat(ex.getMessage(), containsString("</my-leaf-1>"));
}
@Test
public void shouldFailOnUnterminatedContainerElement() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-4.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-4.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
assertThat(ex.getMessage(), containsString("</my-container-1>"));
}
@Test
public void shouldFailOnUnknownChildNode() throws XMLStreamException, IOException,
ParserConfigurationException, SAXException, URISyntaxException {
- final InputStream resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-3.xml");
-
- final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
-
- final NormalizedNodeResult result = new NormalizedNodeResult();
- final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
-
- final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
- final XMLStreamException ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
-
- assertThat(ex.getMessage(), containsString("Schema for node with name my-container-1 and namespace "
- + "baz-namespace does not exist in parent container my-container-1"));
+ final var resourceAsStream = XmlToNormalizedNodesTest.class.getResourceAsStream("/invalid-baz-3.xml");
+ final var reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
+ final var result = new NormalizationResultHolder();
+ final var streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ final var xmlParser = XmlParserStream.create(streamWriter, outerContainerSchema);
+ final var ex = assertThrows(XMLStreamException.class, () -> xmlParser.parse(reader));
+ assertThat(ex.getMessage(), containsString("""
+ Schema for node with name my-container-1 and namespace baz-namespace does not exist in parent \
+ EmptyContainerEffectiveStatement{argument=(baz-namespace)my-container-1}"""));
}
private static NormalizedNode buildOuterContainerNode() {
new NodeIdentifier(MY_LEAF_IN_LIST_3)).withValue("listleafvalue1").build()).build())
.build();
- AugmentationNode myDoublyKeyedListAugNode = Builders.augmentationBuilder().withNodeIdentifier(
- new AugmentationIdentifier(ImmutableSet.of(MY_DOUBLY_KEYED_LIST)))
- .withChild(myDoublyKeyedListNode).build();
-
ContainerNode myContainer3Node = Builders.containerBuilder().withNodeIdentifier(
new NodeIdentifier(MY_CONTAINER_3))
- .withChild(myDoublyKeyedListAugNode).build();
-
- AugmentationNode myContainer3AugNode = Builders.augmentationBuilder().withNodeIdentifier(
- new AugmentationIdentifier(ImmutableSet.of(MY_CONTAINER_3)))
- .withChild(myContainer3Node).build();
+ .withChild(myDoublyKeyedListNode).build();
ContainerNode outerContainerNode = Builders.containerBuilder().withNodeIdentifier(
new NodeIdentifier(OUTER_CONTAINER))
.withChild(myContainer1Node)
.withChild(myContainer2Node)
- .withChild(myContainer3AugNode).build();
+ .withChild(myContainer3Node).build();
return outerContainerNode;
}