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