Merge "RestconfImpl.invokeRpc method test"
authorEd Warnicke <eaw@cisco.com>
Thu, 5 Dec 2013 22:12:13 +0000 (22:12 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 5 Dec 2013 22:12:13 +0000 (22:12 +0000)
opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/invoke-rpc-module.yang [new file with mode: 0644]

diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java
new file mode 100644 (file)
index 0000000..104e52f
--- /dev/null
@@ -0,0 +1,123 @@
+package org.opendaylight.controller.sal.restconf.impl.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.net.*;
+import java.util.*;
+
+import org.junit.*;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.opendaylight.controller.sal.restconf.impl.*;
+import org.opendaylight.yangtools.yang.common.*;
+import org.opendaylight.yangtools.yang.data.api.*;
+import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
+import org.opendaylight.yangtools.yang.model.api.Module;
+
+public class InvokeRpcMethodTest {
+
+    private static Set<Module> modules;
+
+    private class RpcResultImpl<T> implements RpcResult<T> {
+
+        final T result;
+
+        public RpcResultImpl(T compNode) {
+            this.result = compNode;
+        }
+
+        @Override
+        public boolean isSuccessful() {
+            // TODO Auto-generated method stub
+            return false;
+        }
+
+        @Override
+        public T getResult() {
+            return result;
+        }
+
+        @Override
+        public Collection<RpcError> getErrors() {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+    private class AnswerImpl implements Answer<RpcResult<CompositeNode>> {
+        @Override
+        public RpcResult<CompositeNode> answer(InvocationOnMock invocation) throws Throwable {
+            CompositeNode compNode = (CompositeNode) invocation.getArguments()[1];
+            return new RpcResultImpl<CompositeNode>(compNode);
+        }
+    }
+
+    @BeforeClass
+    public static void initialization() {
+        modules = TestUtils.resolveModules("/invoke-rpc");
+        assertEquals(1, modules.size());
+        Module module = TestUtils.resolveModule("invoke-rpc-module", modules);
+        assertNotNull(module);
+    }
+
+    /**
+     * Test method invokeRpc in RestconfImpl class tests if composite node as
+     * input parameter of method invokeRpc (second argument) is wrapped to
+     * parent composite node which has QName equals to QName of rpc (resolved
+     * from string - first argument).
+     */
+    @Test
+    public void invokeRpcMethodTest() {
+        ControllerContext contContext = ControllerContext.getInstance();
+        contContext.onGlobalContextUpdated(TestUtils.loadSchemaContext(modules));
+        try {
+            contContext.findModuleByNamespace(new URI("invoke:rpc:module"));
+        } catch (URISyntaxException e) {
+            assertTrue("Uri wasn't created sucessfuly", false);
+        }
+
+        BrokerFacade mockedBrokerFacade = mock(BrokerFacade.class);
+
+        RestconfImpl restconf = RestconfImpl.getInstance();
+        restconf.setBroker(mockedBrokerFacade);
+        restconf.setControllerContext(contContext);
+
+        when(mockedBrokerFacade.invokeRpc(any(QName.class), any(CompositeNode.class))).thenAnswer(new AnswerImpl());
+
+        StructuredData structData = restconf.invokeRpc("invoke-rpc-module:rpc-test", preparePayload());
+
+        CompositeNode rpcCompNode = structData.getData();
+        CompositeNode cont = null;
+        assertEquals("invoke:rpc:module", rpcCompNode.getNodeType().getNamespace().toString());
+        assertEquals("rpc-test", rpcCompNode.getNodeType().getLocalName());
+
+        for (Node<?> node : rpcCompNode.getChildren()) {
+            if (node.getNodeType().getLocalName().equals("cont")
+                    && node.getNodeType().getNamespace().toString().equals("nmspc")) {
+                if (node instanceof CompositeNode) {
+                    cont = (CompositeNode) node;
+                }
+            }
+        }
+        assertNotNull(cont);
+
+    }
+
+    private CompositeNode preparePayload() {
+        MutableCompositeNode cont = NodeFactory.createMutableCompositeNode(
+                TestUtils.buildQName("cont", "nmspc", "2013-12-04"), null, null, ModifyAction.CREATE, null);
+        MutableSimpleNode<?> lf = NodeFactory.createMutableSimpleNode(
+                TestUtils.buildQName("lf", "nmspc", "2013-12-04"), cont, "any value", ModifyAction.CREATE, null);
+        cont.getChildren().add(lf);
+        cont.init();
+
+        return cont;
+    }
+
+}
diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/invoke-rpc-module.yang b/opendaylight/md-sal/sal-rest-connector/src/test/resources/invoke-rpc/invoke-rpc-module.yang
new file mode 100644 (file)
index 0000000..ba06645
--- /dev/null
@@ -0,0 +1,20 @@
+module invoke-rpc-module {
+  namespace "invoke:rpc:module";  
+
+  prefix "inrpcmod";
+         
+  revision 2013-12-3 {
+  
+  }
+
+  rpc rpc-test {
+    input {
+        container cont {
+            leaf lf {
+                type string;
+            }
+        }
+    }
+  }  
+  
+}
\ No newline at end of file