X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=yang%2Fyang-data-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fschema%2Ftransform%2Fdom%2Fserializer%2FNormalizedNodeXmlTranslationTest.java;h=30a9db0fbf55146b7af82b1b8b5f39076a7a5f8b;hb=e1a3876862c946f484edd03c0012575037a32d03;hp=47bc9ea5437f7f4098b51a6b693e081ac705f6fc;hpb=5d50486aed75e0b94a06952add2cc5d9a62ba053;p=yangtools.git diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java index 47bc9ea543..30a9db0fbf 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/schema/transform/dom/serializer/NormalizedNodeXmlTranslationTest.java @@ -13,7 +13,6 @@ import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; - import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; @@ -27,18 +26,20 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; - import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; - import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; import org.junit.Test; @@ -51,6 +52,10 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; 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.stream.NormalizedNodeStreamWriter; +import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter; +import org.opendaylight.yangtools.yang.data.impl.codec.xml.XMLStreamNormalizedNodeStreamWriter; import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedDataBuilderTest; @@ -63,6 +68,7 @@ import org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser.Dom import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,6 +79,7 @@ import org.xml.sax.SAXException; @RunWith(Parameterized.class) public class NormalizedNodeXmlTranslationTest { private static final Logger logger = LoggerFactory.getLogger(NormalizedNodeXmlTranslationTest.class); + private final SchemaContext schema; @Parameterized.Parameters() public static Collection data() { @@ -86,32 +93,31 @@ public class NormalizedNodeXmlTranslationTest { }); } - public static final String NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:test"; private static Date revision; static { try { revision = new SimpleDateFormat("yyyy-MM-dd").parse("2014-03-13"); - } catch (ParseException e) { + } catch (final ParseException e) { throw new RuntimeException(e); } } private static ContainerNode withAttributes() { - DataContainerNodeBuilder b = Builders.containerBuilder(); + final DataContainerNodeBuilder b = Builders.containerBuilder(); b.withNodeIdentifier(getNodeIdentifier("container")); - CollectionNodeBuilder listBuilder = Builders.mapBuilder().withNodeIdentifier( + final CollectionNodeBuilder listBuilder = Builders.mapBuilder().withNodeIdentifier( getNodeIdentifier("list")); - Map predicates = Maps.newHashMap(); + final Map predicates = Maps.newHashMap(); predicates.put(getNodeIdentifier("uint32InList").getNodeType(), 3L); - DataContainerNodeBuilder list1Builder = Builders + final DataContainerNodeBuilder list1Builder = Builders .mapEntryBuilder().withNodeIdentifier( new YangInstanceIdentifier.NodeIdentifierWithPredicates(getNodeIdentifier("list").getNodeType(), predicates)); - NormalizedNodeBuilder> uint32InListBuilder + final NormalizedNodeBuilder> uint32InListBuilder = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("uint32InList")); list1Builder.withChild(uint32InListBuilder.withValue(3L).build()); @@ -119,15 +125,15 @@ public class NormalizedNodeXmlTranslationTest { listBuilder.withChild(list1Builder.build()); b.withChild(listBuilder.build()); - NormalizedNodeBuilder> booleanBuilder + final NormalizedNodeBuilder> booleanBuilder = Builders.leafBuilder().withNodeIdentifier(getNodeIdentifier("boolean")); booleanBuilder.withValue(false); b.withChild(booleanBuilder.build()); - ListNodeBuilder> leafListBuilder + final ListNodeBuilder> leafListBuilder = Builders.leafSetBuilder().withNodeIdentifier(getNodeIdentifier("leafList")); - NormalizedNodeBuilder> leafList1Builder + final NormalizedNodeBuilder> leafList1Builder = Builders.leafSetEntryBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeWithValue(getNodeIdentifier("leafList").getNodeType(), "a")); leafList1Builder.withValue("a"); @@ -140,7 +146,7 @@ public class NormalizedNodeXmlTranslationTest { private static ContainerNode augmentChoiceHell() { - DataContainerNodeBuilder b = Builders.containerBuilder(); + final DataContainerNodeBuilder b = Builders.containerBuilder(); b.withNodeIdentifier(getNodeIdentifier("container")); b.withChild( @@ -190,9 +196,9 @@ public class NormalizedNodeXmlTranslationTest { } public static YangInstanceIdentifier.AugmentationIdentifier getAugmentIdentifier(final String... childNames) { - Set qn = Sets.newHashSet(); + final Set qn = Sets.newHashSet(); - for (String childName : childNames) { + for (final String childName : childNames) { qn.add(getNodeIdentifier(childName).getNodeType()); } @@ -200,7 +206,7 @@ public class NormalizedNodeXmlTranslationTest { } public NormalizedNodeXmlTranslationTest(final String yangPath, final String xmlPath, final ContainerNode expectedNode) { - SchemaContext schema = parseTestSchema(yangPath); + schema = parseTestSchema(yangPath); this.xmlPath = xmlPath; this.containerNode = (ContainerSchemaNode) NormalizedDataBuilderTest.getSchemaNode(schema, "test", "container"); this.expectedNode = expectedNode; @@ -212,8 +218,8 @@ public class NormalizedNodeXmlTranslationTest { SchemaContext parseTestSchema(final String... yangPath) { - YangParserImpl yangParserImpl = new YangParserImpl(); - Set modules = yangParserImpl.parseYangModelsFromStreams(getTestYangs(yangPath)); + final YangParserImpl yangParserImpl = new YangParserImpl(); + final Set modules = yangParserImpl.parseYangModelsFromStreams(getTestYangs(yangPath)); return yangParserImpl.resolveSchemaContext(modules); } @@ -223,7 +229,7 @@ public class NormalizedNodeXmlTranslationTest { new Function() { @Override public InputStream apply(final String input) { - InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(input); + final InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(input); Preconditions.checkNotNull(resourceAsStream, "File %s was null", resourceAsStream); return resourceAsStream; } @@ -232,36 +238,76 @@ public class NormalizedNodeXmlTranslationTest { @Test public void testTranslation() throws Exception { - Document doc = loadDocument(xmlPath); + final Document doc = loadDocument(xmlPath); - ContainerNode built = - DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider()).getContainerNodeParser().parse( + final ContainerNode built = + DomToNormalizedNodeParserFactory.getInstance(DomUtils.defaultValueCodecProvider(), schema).getContainerNodeParser().parse( Collections.singletonList(doc.getDocumentElement()), containerNode); if (expectedNode != null) { - junit.framework.Assert.assertEquals(expectedNode, built); + org.junit.Assert.assertEquals(expectedNode, built); } + System.err.println(built); logger.info("{}", built); - Iterable els = DomFromNormalizedNodeSerializerFactory.getInstance(XmlDocumentUtils.getDocument(), DomUtils.defaultValueCodecProvider()) - .getContainerNodeSerializer().serialize(containerNode, built); - - Element el = els.iterator().next(); + final Element elementNS = XmlDocumentUtils.getDocument().createElementNS(containerNode.getQName().getNamespace().toString(), containerNode.getQName().getLocalName()); + writeNormalizedNode(built, new DOMResult(elementNS), SchemaPath.create(true), schema); XMLUnit.setIgnoreWhitespace(true); XMLUnit.setIgnoreComments(true); + XMLUnit.setIgnoreAttributeOrder(true); + XMLUnit.setNormalize(true); + System.err.println(toString(doc.getDocumentElement())); - System.err.println(toString(el)); + System.err.println(toString(elementNS)); + + final Diff diff = new Diff(XMLUnit.buildControlDocument(toString(doc.getDocumentElement())), XMLUnit.buildTestDocument(toString(elementNS))); + + // FIXME the comparison cannot be performed, since the qualifiers supplied by XMlUnit do not work correctly in this case + // We need to implement custom qualifier so that the element ordering does not mess the DIFF +// dd.overrideElementQualifier(new MultiLevelElementNameAndTextQualifier(100, true)); +// assertTrue(dd.toString(), dd.similar()); + } + - boolean diff = new Diff(XMLUnit.buildControlDocument(toString(doc.getDocumentElement())), XMLUnit.buildTestDocument(toString(el))).similar(); + static final XMLOutputFactory XML_FACTORY; + static { + XML_FACTORY = XMLOutputFactory.newFactory(); + XML_FACTORY.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, false); + } + + private void writeNormalizedNode(final NormalizedNode normalized, final DOMResult result, final SchemaPath schemaPath, final SchemaContext context) + throws IOException, XMLStreamException { + NormalizedNodeWriter normalizedNodeWriter = null; + NormalizedNodeStreamWriter normalizedNodeStreamWriter = null; + XMLStreamWriter writer = null; + try { + writer = XML_FACTORY.createXMLStreamWriter(result); + normalizedNodeStreamWriter = XMLStreamNormalizedNodeStreamWriter.create(writer, context, schemaPath); + normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(normalizedNodeStreamWriter); + + normalizedNodeWriter.write(normalized); + + normalizedNodeWriter.flush(); + } finally { + if(normalizedNodeWriter != null) { + normalizedNodeWriter.close(); + } + if(normalizedNodeStreamWriter != null) { + normalizedNodeStreamWriter.close(); + } + if(writer != null) { + writer.close(); + } + } } private Document loadDocument(final String xmlPath) throws Exception { - InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(xmlPath); + final InputStream resourceAsStream = NormalizedDataBuilderTest.class.getResourceAsStream(xmlPath); - Document currentConfigElement = readXmlToDocument(resourceAsStream); + final Document currentConfigElement = readXmlToDocument(resourceAsStream); Preconditions.checkNotNull(currentConfigElement); return currentConfigElement; } @@ -269,7 +315,7 @@ public class NormalizedNodeXmlTranslationTest { private static final DocumentBuilderFactory BUILDERFACTORY; static { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setCoalescing(true); factory.setIgnoringElementContentWhitespace(true); @@ -278,13 +324,13 @@ public class NormalizedNodeXmlTranslationTest { } private Document readXmlToDocument(final InputStream xmlContent) throws IOException, SAXException { - DocumentBuilder dBuilder; + final DocumentBuilder dBuilder; try { dBuilder = BUILDERFACTORY.newDocumentBuilder(); - } catch (ParserConfigurationException e) { + } catch (final ParserConfigurationException e) { throw new RuntimeException("Failed to parse XML document", e); } - Document doc = dBuilder.parse(xmlContent); + final Document doc = dBuilder.parse(xmlContent); doc.getDocumentElement().normalize(); return doc; @@ -292,11 +338,11 @@ public class NormalizedNodeXmlTranslationTest { public static String toString(final Element xml) { try { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); + final Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - StreamResult result = new StreamResult(new StringWriter()); - DOMSource source = new DOMSource(xml); + final StreamResult result = new StreamResult(new StringWriter()); + final DOMSource source = new DOMSource(xml); transformer.transform(source, result); return result.getWriter().toString();