BUG-2314 Migrate netconf-connector to NormalizedNode
[controller.git] / opendaylight / md-sal / sal-netconf-connector / src / test / java / org / opendaylight / controller / sal / connect / netconf / NetconfToRpcRequestTest.java
index 3425739afdb2bdf674c06ebf8c6f46506df4e30d..49f0abafc7360b25b9a4266d7002ca64c5066031 100644 (file)
@@ -3,7 +3,10 @@ package org.opendaylight.controller.sal.connect.netconf;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.toId;
+import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath;
 
+import com.google.common.collect.Sets;
 import java.io.InputStream;
 import java.util.Collections;
 import java.util.List;
@@ -13,13 +16,12 @@ import org.junit.Test;
 import org.opendaylight.controller.netconf.api.NetconfMessage;
 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
 import org.opendaylight.controller.sal.connect.netconf.schema.mapping.NetconfMessageTransformer;
-import org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.RpcResult;
-import org.opendaylight.yangtools.yang.data.api.CompositeNode;
-import org.opendaylight.yangtools.yang.data.api.Node;
-import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
-import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
+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.LeafNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
@@ -48,7 +50,6 @@ public class NetconfToRpcRequestTest {
     private final static QName GET_QNAME = QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "get");
     private final static QName GET_CONFIG_QNAME = QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "get-config");
 
-    static SchemaContext notifCtx;
     static SchemaContext cfgCtx;
     static NetconfMessageTransformer messageTransformer;
 
@@ -61,187 +62,29 @@ public class NetconfToRpcRequestTest {
         final Set<Module> notifModules = parser.parseYangModelsFromStreams(modelsToParse);
         assertTrue(!notifModules.isEmpty());
 
-        notifCtx = parser.resolveSchemaContext(notifModules);
-        assertNotNull(notifCtx);
-
         modelsToParse = Collections
             .singletonList(NetconfToRpcRequestTest.class.getResourceAsStream("/schemas/config-test-rpc.yang"));
         parser = new YangParserImpl();
         final Set<Module> configModules = parser.parseYangModelsFromStreams(modelsToParse);
-        cfgCtx = parser.resolveSchemaContext(configModules);
+        cfgCtx = parser.resolveSchemaContext(Sets.union(configModules, notifModules));
         assertNotNull(cfgCtx);
 
-        messageTransformer = new NetconfMessageTransformer();
-    }
-
-    @Test
-    public void testIsDataEditOperation() throws Exception {
-        messageTransformer.onGlobalContextUpdated(cfgCtx);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> rootBuilder = ImmutableCompositeNode.builder();
-        rootBuilder.setQName(EDIT_CONFIG_QNAME);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> inputBuilder = ImmutableCompositeNode.builder();
-        inputBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "input"));
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> targetBuilder = ImmutableCompositeNode.builder();
-        targetBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "target"));
-        targetBuilder.addLeaf(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "running"), null);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> configBuilder = ImmutableCompositeNode.builder();
-        configBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "config"));
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> anyxmlTopBuilder = ImmutableCompositeNode.builder();
-        anyxmlTopBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "top"));
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> anyxmlInterfBuilder = ImmutableCompositeNode.builder();
-        anyxmlInterfBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "interface"));
-
-        anyxmlInterfBuilder.addLeaf(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "name"), "Ethernet0/0");
-        anyxmlInterfBuilder.addLeaf(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "mtu"), "1500");
-
-        anyxmlTopBuilder.add(anyxmlInterfBuilder.toInstance());
-        configBuilder.add(anyxmlTopBuilder.toInstance());
-
-        inputBuilder.add(targetBuilder.toInstance());
-        inputBuilder.add(configBuilder.toInstance());
-
-        rootBuilder.add(inputBuilder.toInstance());
-        final ImmutableCompositeNode root = rootBuilder.toInstance();
-
-        final NetconfMessage message = messageTransformer.toRpcRequest(EDIT_CONFIG_QNAME, root);
-        assertNotNull(message);
-
-        final Document xmlDoc = message.getDocument();
-        org.w3c.dom.Node rpcChild = xmlDoc.getFirstChild();
-        assertEquals(rpcChild.getLocalName(), "rpc");
-
-        final org.w3c.dom.Node editConfigNode = rpcChild.getFirstChild();
-        assertEquals(editConfigNode.getLocalName(), "edit-config");
-
-        final org.w3c.dom.Node targetNode = editConfigNode.getFirstChild();
-        assertEquals(targetNode.getLocalName(), "target");
-
-        final org.w3c.dom.Node runningNode = targetNode.getFirstChild();
-        assertEquals(runningNode.getLocalName(), "running");
-
-        final org.w3c.dom.Node configNode = targetNode.getNextSibling();
-        assertEquals(configNode.getLocalName(), "config");
-
-        final org.w3c.dom.Node topNode = configNode.getFirstChild();
-        assertEquals(topNode.getLocalName(), "top");
-
-        final org.w3c.dom.Node interfaceNode = topNode.getFirstChild();
-        assertEquals(interfaceNode.getLocalName(), "interface");
-
-        final org.w3c.dom.Node nameNode = interfaceNode.getFirstChild();
-        assertEquals(nameNode.getLocalName(), "name");
-
-        final org.w3c.dom.Node mtuNode = nameNode.getNextSibling();
-        assertEquals(mtuNode.getLocalName(), "mtu");
-    }
-
-    @Test
-    public void testIsGetOperation() throws Exception {
-        messageTransformer.onGlobalContextUpdated(cfgCtx);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> rootBuilder = ImmutableCompositeNode.builder();
-        rootBuilder.setQName(GET_QNAME);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> inputBuilder = ImmutableCompositeNode.builder();
-        inputBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "input"));
-
-        rootBuilder.add(inputBuilder.toInstance());
-        final ImmutableCompositeNode root = rootBuilder.toInstance();
-
-        final NetconfMessage message = messageTransformer.toRpcRequest(GET_QNAME, root);
-        assertNotNull(message);
-
-        final Document xmlDoc = message.getDocument();
-        final org.w3c.dom.Node rpcChild = xmlDoc.getFirstChild();
-        assertEquals(rpcChild.getLocalName(), "rpc");
-
-        final org.w3c.dom.Node get = rpcChild.getFirstChild();
-        assertEquals(get.getLocalName(), "get");
+        messageTransformer = new NetconfMessageTransformer(cfgCtx);
     }
 
-    @Test
-    public void testIsGetConfigOperation() throws Exception {
-        messageTransformer.onGlobalContextUpdated(cfgCtx);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> rootBuilder = ImmutableCompositeNode.builder();
-        rootBuilder.setQName(GET_CONFIG_QNAME);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> inputBuilder = ImmutableCompositeNode.builder();
-        inputBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "input"));
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> sourceBuilder = ImmutableCompositeNode.builder();
-        sourceBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "source"));
-        sourceBuilder.addLeaf(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "running"), null);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> anyxmlFilterBuilder = ImmutableCompositeNode.builder();
-        anyxmlFilterBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "filter"));
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> anyxmlTopBuilder = ImmutableCompositeNode.builder();
-        anyxmlTopBuilder.setQName(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "top"));
-        anyxmlTopBuilder.addLeaf(QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "users"), null);
-
-        anyxmlFilterBuilder.add(anyxmlTopBuilder.toInstance());
-
-        inputBuilder.add(sourceBuilder.toInstance());
-        inputBuilder.add(anyxmlFilterBuilder.toInstance());
-        rootBuilder.add(inputBuilder.toInstance());
-        final ImmutableCompositeNode root = rootBuilder.toInstance();
-
-        final NetconfMessage message = messageTransformer.toRpcRequest(GET_CONFIG_QNAME, root);
-        assertNotNull(message);
-
-        final Document xmlDoc = message.getDocument();
-        final org.w3c.dom.Node rpcChild = xmlDoc.getFirstChild();
-        assertEquals(rpcChild.getLocalName(), "rpc");
-
-        final org.w3c.dom.Node getConfig = rpcChild.getFirstChild();
-        assertEquals(getConfig.getLocalName(), "get-config");
-
-        final org.w3c.dom.Node sourceNode = getConfig.getFirstChild();
-        assertEquals(sourceNode.getLocalName(), "source");
-
-        final org.w3c.dom.Node runningNode = sourceNode.getFirstChild();
-        assertEquals(runningNode.getLocalName(), "running");
-
-        final org.w3c.dom.Node filterNode = sourceNode.getNextSibling();
-        assertEquals(filterNode.getLocalName(), "filter");
-
-        final org.w3c.dom.Node topNode = filterNode.getFirstChild();
-        assertEquals(topNode.getLocalName(), "top");
-
-        final org.w3c.dom.Node usersNode = topNode.getFirstChild();
-        assertEquals(usersNode.getLocalName(), "users");
+    private LeafNode<Object> buildLeaf(final QName running, final Object value) {
+        return Builders.leafBuilder().withNodeIdentifier(toId(running)).withValue(value).build();
     }
 
     @Test
     public void testUserDefinedRpcCall() throws Exception {
-        messageTransformer.onGlobalContextUpdated(notifCtx);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> rootBuilder = ImmutableCompositeNode.builder();
-        rootBuilder.setQName(SUBSCRIBE_RPC_NAME);
-
-        final CompositeNodeBuilder<ImmutableCompositeNode> inputBuilder = ImmutableCompositeNode.builder();
-        inputBuilder.setQName(INPUT_QNAME);
-        inputBuilder.addLeaf(STREAM_NAME, "NETCONF");
+        final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> rootBuilder = Builders.containerBuilder();
+        rootBuilder.withNodeIdentifier(toId(SUBSCRIBE_RPC_NAME));
 
-        rootBuilder.add(inputBuilder.toInstance());
-        final ImmutableCompositeNode root = rootBuilder.toInstance();
+        rootBuilder.withChild(buildLeaf(STREAM_NAME, "NETCONF"));
+        final ContainerNode root = rootBuilder.build();
 
-        final CompositeNode flattenedNode = NetconfMessageTransformUtil.flattenInput(root);
-        assertNotNull(flattenedNode);
-        assertEquals(1, flattenedNode.size());
-
-        final List<CompositeNode> inputNode = flattenedNode.getCompositesByName(INPUT_QNAME);
-        assertNotNull(inputNode);
-        assertTrue(inputNode.isEmpty());
-
-        final NetconfMessage message = messageTransformer.toRpcRequest(SUBSCRIBE_RPC_NAME, root);
+        final NetconfMessage message = messageTransformer.toRpcRequest(toPath(SUBSCRIBE_RPC_NAME), root);
         assertNotNull(message);
 
         final Document xmlDoc = message.getDocument();
@@ -256,7 +99,8 @@ public class NetconfToRpcRequestTest {
 
     }
 
-    @Test
+    // The edit config defined in yang has no output
+    @Test(expected = IllegalArgumentException.class)
     public void testRpcResponse() throws Exception {
         final NetconfMessage response = new NetconfMessage(XmlUtil.readXmlToDocument(
                 "<rpc-reply xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" message-id=\"m-5\">\n" +
@@ -265,9 +109,8 @@ public class NetconfToRpcRequestTest {
                 "</data>\n" +
                 "</rpc-reply>\n"
         ));
-        final RpcResult<CompositeNode> compositeNodeRpcResult = messageTransformer.toRpcResult(response, SUBSCRIBE_RPC_NAME);
-        final Node<?> dataNode = compositeNodeRpcResult.getResult().getValue().get(0);
-        assertEquals("module schema", dataNode.getValue());
+
+        messageTransformer.toRpcResult(response, toPath(EDIT_CONFIG_QNAME));
     }
 
 }