X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fimpl%2Fcodec%2Fxml%2FXmlDocumentUtilsTest.java;h=99a32465a19f7a8eb64f58f2526d6bb3f96bd50a;hb=55ce5d9463add9c9c6d8ecde62f4d323d07bdcc1;hp=308fac960152d095ee06d08cd7294c90c185fd60;hpb=052bd27d118a2addb3eae2253515890369a60182;p=yangtools.git diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java index 308fac9601..99a32465a1 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/XmlDocumentUtilsTest.java @@ -8,39 +8,51 @@ package org.opendaylight.yangtools.yang.data.impl.codec.xml; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import com.google.common.base.Charsets; import com.google.common.base.Optional; import com.google.common.collect.Lists; -import com.google.common.io.ByteSource; import java.io.ByteArrayInputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; -import javax.activation.UnsupportedDataTypeException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import org.custommonkey.xmlunit.XMLUnit; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.Node; -import org.opendaylight.yangtools.yang.data.api.SimpleNode; +import org.opendaylight.yangtools.yang.data.api.ModifyAction; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.impl.RetestUtils; +import org.opendaylight.yangtools.yang.data.impl.codec.TypeDefinitionAwareCodec; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; +import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; -import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; +import org.opendaylight.yangtools.yang.model.api.TypeDefinition; +import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; +@RunWith(MockitoJUnitRunner.class) public class XmlDocumentUtilsTest { - + private static final String NS = "urn:opendaylight:controller:xml:doc:test"; + private static final String NS2 = "urn:opendaylight:controller:xml:doc:test2"; + private static final String NS3 = "urn:opendaylight:controller:xml:doc:test3"; + private static final String REVISION = "2014-07-28"; private static final DocumentBuilderFactory BUILDERFACTORY; static { @@ -52,57 +64,23 @@ public class XmlDocumentUtilsTest { BUILDERFACTORY = factory; } - public static final String XML_CONTENT = "\n" + + private static final String XML_CONTENT = "\n" + + "value\n" + - ""+ + "" + + "/ltha:cont/ltha:l[ ltha:id='id/foo/bar' ]"+ "\n" + ""; - public static final String RPC_REPLY = "\n" + - " \n" + - ""; - private SchemaContext schema; - private RpcDefinition testRpc; @Before public void setUp() throws Exception { - final ByteSource byteSource = new ByteSource() { - @Override - public InputStream openStream() throws IOException { - return XmlDocumentUtilsTest.this.getClass().getResourceAsStream("rpc-test.yang"); - } - }; - schema = new YangParserImpl().parseSources(Lists.newArrayList(byteSource)); - final Module rpcTestModule = schema.getModules().iterator().next(); - testRpc = rpcTestModule.getRpcs().iterator().next(); - } - - @Test - public void testRpcInputTransform() throws Exception { - - final Document inputDocument = readXmlToDocument(XML_CONTENT); - final Element input = inputDocument.getDocumentElement(); - - final CompositeNode node = inputXmlToCompositeNode(input); - final SimpleNode refParsed = node.getSimpleNodesByName("ref").iterator().next(); - assertEquals(YangInstanceIdentifier.class, refParsed.getValue().getClass()); - final Document serializedDocument = inputCompositeNodeToXml(node); - - XMLUnit.compareXML(inputDocument, serializedDocument); - } + final File rpcTestYang1 = new File(getClass().getResource("xml-doc-test.yang").toURI()); + final File rpcTestYang2 = new File(getClass().getResource("xml-doc-test2.yang").toURI()); - @Test - public void testRpcReplyToDom() throws Exception { - final Document reply = readXmlToDocument(RPC_REPLY); - final CompositeNode domNodes = XmlDocumentUtils.rpcReplyToDomNodes(reply, QName.create("urn:opendaylight:controller:rpc:test", "2014-07-28", "test"), schema); - assertEquals(1, domNodes.getValue().size()); - final Node outputNode = domNodes.getValue().get(0); - assertTrue(outputNode instanceof CompositeNode); - assertEquals(1, ((CompositeNode) outputNode).getValue().size()); - final Node okNode = ((CompositeNode) outputNode).getValue().get(0); - assertEquals("ok", okNode.getNodeType().getLocalName()); + this.schema = RetestUtils.parseYangSources(rpcTestYang1, rpcTestYang2); } public static Document readXmlToDocument(final String xmlContent) throws SAXException, IOException { @@ -122,13 +100,123 @@ public class XmlDocumentUtilsTest { return doc; } - public Document inputCompositeNodeToXml(final CompositeNode cNode) - throws UnsupportedDataTypeException { - return XmlDocumentUtils.toDocument(cNode, testRpc.getInput(), XmlDocumentUtils.defaultValueCodecProvider()); + @Test + public void xmlDocCreateElementForContWithoutAttrTest() throws Exception { + final Document doc = readXmlToDocument(XML_CONTENT); + final YangInstanceIdentifier.NodeIdentifier container = new YangInstanceIdentifier.NodeIdentifier( + QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "cont")); + + final NormalizedNode data = ImmutableNodes.fromInstanceId(this.schema, + YangInstanceIdentifier.create(container)); + Assert.assertNotNull(data); + + final Element element = XmlDocumentUtils.createElementFor(doc, data); + Assert.assertNotNull(element); + Assert.assertEquals(element.getTagName(), "cont"); + } + + @Test + public void xmlDocCreateElementForContiWithAttrTest() throws Exception { + final Document doc = readXmlToDocument(XML_CONTENT); + final YangInstanceIdentifier.NodeIdentifier container = new YangInstanceIdentifier.NodeIdentifier( + QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "cont")); + + final Map attributes = new HashMap<>(); + attributes.put(QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "l"), "list"); + + final ContainerNode node = Builders.containerBuilder().withNodeIdentifier(container).withAttributes(attributes) + .build(); + final NormalizedNode data = node; + Assert.assertNotNull(data); + + final Element element = XmlDocumentUtils.createElementFor(doc, data); + Assert.assertNotNull(element); + Assert.assertEquals("cont", element.getTagName()); + Assert.assertEquals("list", element.getAttribute("l")); + } + + @Test + public void xmlDocgetModifyOperationWithAttributesTest() throws Exception { + final Document doc = readXmlToDocument(XML_CONTENT); + final YangInstanceIdentifier.NodeIdentifier container = new YangInstanceIdentifier.NodeIdentifier( + QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "cont")); + + final Map attributes = new HashMap<>(); + attributes.put(QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "l"), "list"); + + final ContainerNode node = Builders.containerBuilder().withNodeIdentifier(container).withAttributes(attributes) + .build(); + final NormalizedNode data = node; + Assert.assertNotNull(data); + + final Element element = XmlDocumentUtils.createElementFor(doc, data); + final Optional modifyOperationFromAttributes = XmlDocumentUtils + .getModifyOperationFromAttributes(element); + Assert.assertFalse(modifyOperationFromAttributes.isPresent()); } - public CompositeNode inputXmlToCompositeNode(final Element e) { - return (CompositeNode) XmlDocumentUtils.toDomNode(e, Optional.of(testRpc.getInput()), - Optional.of(XmlDocumentUtils.defaultValueCodecProvider()), Optional.of(schema)); + @Test + public void xmlDocgetModifyOperationWithoutAttributesTest() { + final Element element = Mockito.mock(Element.class); + Mockito.when(element.getAttributeNS(Mockito.anyString(), Mockito.anyString())).thenReturn("hello"); + + final Optional modifyOperationFromAttributes = XmlDocumentUtils + .getModifyOperationFromAttributes(element); + Assert.assertFalse(modifyOperationFromAttributes.isPresent()); + } + + @Test + public void xmlDocFindFirstSchemaContTest() { + final QName ID = QName.create(XmlDocumentUtilsTest.NS, XmlDocumentUtilsTest.REVISION, "cont"); + final Optional findFirstSchema = XmlDocumentUtils.findFirstSchema(ID, + this.schema.getChildNodes()); + Assert.assertNotNull(findFirstSchema); + Assert.assertEquals(ID, findFirstSchema.get().getQName()); + } + + @Test + public void xmlDocFindFirstSchemaCont2Test() { + final QName ID = QName.create(XmlDocumentUtilsTest.NS2, XmlDocumentUtilsTest.REVISION, "cont2"); + final Optional findFirstSchema = XmlDocumentUtils.findFirstSchema(ID, + this.schema.getChildNodes()); + final DataSchemaNode dataSchemaNode = findFirstSchema.get(); + Assert.assertNotNull(findFirstSchema); + Assert.assertEquals(ID, dataSchemaNode.getQName()); + } + + @Test + public void xmlDocFindFirstSchemaNullParamsTest() { + Optional findFirstSchema = XmlDocumentUtils.findFirstSchema(null, + this.schema.getChildNodes()); + Assert.assertFalse(findFirstSchema.isPresent()); + + final QName ID = QName.create(XmlDocumentUtilsTest.NS2, XmlDocumentUtilsTest.REVISION, "cont2"); + findFirstSchema = XmlDocumentUtils.findFirstSchema(ID, null); + Assert.assertFalse(findFirstSchema.isPresent()); + } + + @Test + public void xmlDocFindFirstSchemaContChoicTest() { + final QName ID = QName.create(XmlDocumentUtilsTest.NS3, XmlDocumentUtilsTest.REVISION, "cont"); + final DataSchemaNode sch = Mockito.mock(ChoiceSchemaNode.class); + final Set setCases = new HashSet<>(); + final ChoiceCaseNode choice = Mockito.mock(ChoiceCaseNode.class); + setCases.add(choice); + Mockito.when(((ChoiceSchemaNode) sch).getCases()).thenReturn(setCases); + Mockito.when(sch.getQName()).thenReturn(QName.create("badNamespace", "badLocalName")); + final Iterable colls = Lists.newArrayList(sch); + final Optional findFirstSchema = XmlDocumentUtils.findFirstSchema(ID, colls); + Assert.assertNotNull(findFirstSchema); + } + + @Test + public void codecProviderTest() { + final XmlCodecProvider provider = XmlDocumentUtils.defaultValueCodecProvider(); + Assert.assertNotNull(provider); + Assert.assertEquals(XmlUtils.DEFAULT_XML_CODEC_PROVIDER, provider); + + final TypeDefinition baseType = Mockito.mock(BinaryTypeDefinition.class); + final TypeDefinitionAwareCodec> codec = provider.codecFor(baseType); + Assert.assertNotNull(codec); } }