BUG-2314 Fix (no-input)rpcs serialization in netconf connector 85/16485/1
authorMaros Marsalek <mmarsale@cisco.com>
Fri, 13 Mar 2015 14:12:55 +0000 (15:12 +0100)
committerMaros Marsalek <mmarsale@cisco.com>
Fri, 13 Mar 2015 14:12:55 +0000 (15:12 +0100)
Rpcs with no input were not wrapped in rpc element correctly

Change-Id: I8ad0440681e83dd3a04a8ba38f49b2d7c4976caa
Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfBaseOps.java
opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/util/NetconfRpcFutureCallback.java
opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/sal/tx/NetconfDeviceWriteOnlyTxTest.java
opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/schema/mapping/NetconfMessageTransformerTest.java

index e768b5eb5b62ba66d81c3e0c731ee2364577c145..e06f572cad7d1a02b3f3491241bed93b9bc001b9 100644 (file)
@@ -166,10 +166,7 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
 
         Preconditions.checkNotNull(currentMappedRpcs.get(rpcQName), "Unknown rpc %s, available rpcs: %s", rpcQName, currentMappedRpcs.keySet());
         if(currentMappedRpcs.get(rpcQName).getInput() == null) {
-            final Document document = XmlUtil.newDocument();
-            final Element elementNS = document.createElementNS(rpcQName.getNamespace().toString(), rpcQName.getLocalName());
-            document.appendChild(elementNS);
-            return new NetconfMessage(document);
+            return new NetconfMessage(prepareDomResultForRpcRequest(rpcQName).getNode().getOwnerDocument());
         }
 
         Preconditions.checkNotNull(payload, "Transforming an rpc with input: %s, payload cannot be null", rpcQName);
@@ -190,7 +187,6 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
 
         final Document node = result.getNode().getOwnerDocument();
 
-        node.getDocumentElement().setAttribute(NetconfMessageTransformUtil.MESSAGE_ID_ATTR, counter.getNewMessageId(MESSAGE_ID_PREFIX));
         return new NetconfMessage(node);
     }
 
@@ -201,6 +197,8 @@ public class NetconfMessageTransformer implements MessageTransformer<NetconfMess
     private DOMResult prepareDomResultForRpcRequest(final QName rpcQName) {
         final Document document = XmlUtil.newDocument();
         final Element rpcNS = document.createElementNS(NETCONF_RPC_QNAME.getNamespace().toString(), NETCONF_RPC_QNAME.getLocalName());
+        // set msg id
+        rpcNS.setAttribute(NetconfMessageTransformUtil.MESSAGE_ID_ATTR, counter.getNewMessageId(MESSAGE_ID_PREFIX));
         final Element elementNS = document.createElementNS(rpcQName.getNamespace().toString(), rpcQName.getLocalName());
         rpcNS.appendChild(elementNS);
         document.appendChild(rpcNS);
index 6af08eab4b23290a0c55d1d8c26f0f9a7acd2140..c19bb484082ab391eb18d9bd622e5f8881c11279 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.controller.sal.connect.netconf.util;
 
-import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.DISCARD_CHANGES_RPC_CONTENT;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_CANDIDATE_QNAME;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_COPY_CONFIG_QNAME;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_DEFAULT_OPERATION_QNAME;
@@ -108,7 +107,7 @@ public final class NetconfBaseOps {
     public ListenableFuture<DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
         Preconditions.checkNotNull(callback);
 
-        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(toPath(NETCONF_DISCARD_CHANGES_QNAME), DISCARD_CHANGES_RPC_CONTENT);
+        final ListenableFuture<DOMRpcResult> future = rpc.invokeRpc(toPath(NETCONF_DISCARD_CHANGES_QNAME), null);
         Futures.addCallback(future, callback);
         return future;
     }
index 83c8803ecd31acbf7ed3a3f37ab5644cf19abb52..40ff1291aed1284f33ce3e4ab03ceeb12506c1c7 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.controller.sal.connect.netconf.util;
 
 import com.google.common.util.concurrent.FutureCallback;
 import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult;
-import org.opendaylight.controller.sal.connect.netconf.sal.tx.WriteRunningTx;
 import org.opendaylight.controller.sal.connect.util.RemoteDeviceId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -19,7 +18,7 @@ import org.slf4j.LoggerFactory;
  * Simple Netconf rpc logging callback
  */
 public class NetconfRpcFutureCallback implements FutureCallback<DOMRpcResult> {
-    private static final Logger LOG  = LoggerFactory.getLogger(WriteRunningTx.class);
+    private static final Logger LOG  = LoggerFactory.getLogger(NetconfRpcFutureCallback.class);
 
     private final String type;
     private final RemoteDeviceId id;
index 4f6366ffd77f08cbcd84b5313abea88d5d983abd..952ef07a3fd4282e467435a3517fbc68a68cf55b 100644 (file)
@@ -6,7 +6,6 @@ import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
-import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.DISCARD_CHANGES_RPC_CONTENT;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_CANDIDATE_QNAME;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.NETCONF_RUNNING_QNAME;
 import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath;
@@ -70,7 +69,7 @@ public class NetconfDeviceWriteOnlyTxTest {
             final InOrder inOrder = inOrder(rpc);
             inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_LOCK_QNAME), NetconfBaseOps.getLockContent(NETCONF_CANDIDATE_QNAME));
             inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_COMMIT_QNAME), NetconfMessageTransformUtil.COMMIT_RPC_CONTENT);
-            inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_DISCARD_CHANGES_QNAME), DISCARD_CHANGES_RPC_CONTENT);
+            inOrder.verify(rpc).invokeRpc(eq(toPath(NetconfMessageTransformUtil.NETCONF_DISCARD_CHANGES_QNAME)), any(NormalizedNode.class));
             inOrder.verify(rpc).invokeRpc(toPath(NetconfMessageTransformUtil.NETCONF_UNLOCK_QNAME), NetconfBaseOps.getUnLockContent(NETCONF_CANDIDATE_QNAME));
             return;
         }
index 669479d3d582809470739803dd7d14859402abf9..86385c3e913f62b3a28470fa98568408e73923bd 100644 (file)
@@ -94,6 +94,7 @@ public class NetconfMessageTransformerTest {
                 NetconfBaseOps.getLockContent(NETCONF_CANDIDATE_QNAME));
 
         assertThat(XmlUtil.toString(netconfMessage.getDocument()), CoreMatchers.containsString("<lock"));
+        assertThat(XmlUtil.toString(netconfMessage.getDocument()), CoreMatchers.containsString("<rpc"));
     }
 
     @Test
@@ -109,6 +110,8 @@ public class NetconfMessageTransformerTest {
     public void testDiscardChangesRequest() throws Exception {
         final NetconfMessage netconfMessage = netconfMessageTransformer.toRpcRequest(toPath(NETCONF_DISCARD_CHANGES_QNAME), null);
         assertThat(XmlUtil.toString(netconfMessage.getDocument()), CoreMatchers.containsString("<discard"));
+        assertThat(XmlUtil.toString(netconfMessage.getDocument()), CoreMatchers.containsString("<rpc"));
+        assertThat(XmlUtil.toString(netconfMessage.getDocument()), CoreMatchers.containsString("message-id"));
     }
 
     @Test