X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fremote%2Frpc%2FRpcBrokerTest.java;h=6ecd7dac3adc48630540c64e7f14effa6adc915b;hp=28b1b476cd0ebc4d20585b58a91877c076caf33c;hb=168591eb3dfc298b631e8dc51e25b0331c105cfc;hpb=4ef563c481b83e360e688a59ac346b8328870d58 diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RpcBrokerTest.java b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RpcBrokerTest.java index 28b1b476cd..6ecd7dac3a 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RpcBrokerTest.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RpcBrokerTest.java @@ -9,269 +9,71 @@ package org.opendaylight.controller.remote.rpc; -import akka.actor.ActorRef; -import akka.japi.Pair; -import akka.testkit.JavaTestKit; +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.when; -import com.google.common.collect.Lists; +import akka.actor.Status.Failure; +import akka.testkit.JavaTestKit; import com.google.common.util.concurrent.Futures; -import static org.junit.Assert.assertEquals; +import org.junit.Assert; import org.junit.Test; -import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.opendaylight.controller.cluster.datastore.node.utils.serialization.NormalizedNodeSerializer; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; +import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.controller.remote.rpc.messages.ExecuteRpc; -import org.opendaylight.controller.remote.rpc.messages.InvokeRpc; import org.opendaylight.controller.remote.rpc.messages.RpcResponse; -import org.opendaylight.controller.remote.rpc.registry.RpcRegistry; -import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.Messages.FindRouters; -import org.opendaylight.controller.sal.connector.api.RpcRouter.RouteIdentifier; -import org.opendaylight.controller.xml.codec.XmlUtils; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcError; -import org.opendaylight.yangtools.yang.common.RpcError.ErrorSeverity; -import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; -import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.any; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; public class RpcBrokerTest extends AbstractRpcTest { - @Test - public void testInvokeRpcWithNoRemoteActor() throws Exception { - new JavaTestKit(node1) {{ - CompositeNode input = makeRPCInput("foo"); - - InvokeRpc invokeMsg = new InvokeRpc(TEST_RPC, null, input); - rpcBroker1.tell(invokeMsg, getRef()); - - probeReg1.expectMsgClass(duration("5 seconds"), RpcRegistry.Messages.FindRouters.class); - probeReg1.reply(new RpcRegistry.Messages.FindRoutersReply( - Collections.>emptyList())); - - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); - - assertEquals("failure.cause()", RpcErrorsException.class, failure.cause().getClass()); - }}; - } - - - /** - * This test method invokes and executes the remote rpc - */ - //@Test - public void testInvokeRpc() throws URISyntaxException { - new JavaTestKit(node1) {{ - QName instanceQName = new QName(new URI("ns"), "instance"); - - CompositeNode invokeRpcResult = makeRPCOutput("bar"); - RpcResult rpcResult = - RpcResultBuilder.success(invokeRpcResult).build(); - ArgumentCaptor inputCaptor = new ArgumentCaptor<>(); - when(brokerSession.rpc(eq(TEST_RPC), inputCaptor.capture())) - .thenReturn(Futures.immediateFuture(rpcResult)); - - // invoke rpc - CompositeNode input = makeRPCInput("foo"); - YangInstanceIdentifier instanceID = YangInstanceIdentifier.of(instanceQName); - InvokeRpc invokeMsg = new InvokeRpc(TEST_RPC, instanceID, input); - rpcBroker1.tell(invokeMsg, getRef()); - - FindRouters findRouters = probeReg1.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", instanceID, routeIdentifier.getRoute()); - - probeReg1.reply(new RpcRegistry.Messages.FindRoutersReply( - Arrays.asList(new Pair(rpcBroker2, 200L)))); - - RpcResponse rpcResponse = expectMsgClass(duration("5 seconds"), RpcResponse.class); - assertCompositeNodeEquals((CompositeNode)invokeRpcResult.getValue().get(0), - XmlUtils.xmlToCompositeNode(rpcResponse.getResultCompositeNode())); - assertCompositeNodeEquals(input, inputCaptor.getValue()); - }}; - } - - @Test - public void testInvokeRpcWithNoOutput() { - new JavaTestKit(node1) {{ - - RpcResult rpcResult = RpcResultBuilder.success().build(); - when(brokerSession.rpc(eq(TEST_RPC), any(CompositeNode.class))) - .thenReturn(Futures.immediateFuture(rpcResult)); - - InvokeRpc invokeMsg = new InvokeRpc(TEST_RPC, null, makeRPCInput("foo")); - rpcBroker1.tell(invokeMsg, getRef()); - - probeReg1.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - probeReg1.reply(new RpcRegistry.Messages.FindRoutersReply( - Arrays.asList(new Pair(rpcBroker2, 200L)))); - - RpcResponse rpcResponse = expectMsgClass(duration("5 seconds"), RpcResponse.class); - - assertEquals("getResultCompositeNode", "", rpcResponse.getResultCompositeNode()); - }}; - } - - @Test - public void testInvokeRpcWithExecuteFailure() { - new JavaTestKit(node1) {{ - - RpcResult rpcResult = RpcResultBuilder.failed() - .withError(ErrorType.RPC, "tag", "error", "appTag", "info", - new Exception("mock")) - .build(); - when(brokerSession.rpc(eq(TEST_RPC), any(CompositeNode.class))) - .thenReturn(Futures.immediateFuture(rpcResult)); - - InvokeRpc invokeMsg = new InvokeRpc(TEST_RPC, null, makeRPCInput("foo")); - rpcBroker1.tell(invokeMsg, getRef()); - - probeReg1.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - probeReg1.reply(new RpcRegistry.Messages.FindRoutersReply( - Arrays.asList(new Pair(rpcBroker2, 200L)))); - - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); - - assertEquals("failure.cause()", RpcErrorsException.class, failure.cause().getClass()); - - RpcErrorsException errorsEx = (RpcErrorsException)failure.cause(); - List rpcErrors = Lists.newArrayList(errorsEx.getRpcErrors()); - assertEquals("RpcErrors count", 1, rpcErrors.size()); - assertRpcErrorEquals(rpcErrors.get(0), ErrorSeverity.ERROR, ErrorType.RPC, "tag", - "error", "appTag", "info", "mock"); - }}; - } - - @Test - public void testInvokeRpcWithFindRoutersFailure() { - new JavaTestKit(node1) {{ - - InvokeRpc invokeMsg = new InvokeRpc(TEST_RPC, null, makeRPCInput("foo")); - rpcBroker1.tell(invokeMsg, getRef()); - - probeReg1.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - probeReg1.reply(new akka.actor.Status.Failure(new TestException())); - - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); - - assertEquals("failure.cause()", TestException.class, failure.cause().getClass()); - }}; - } - @Test public void testExecuteRpc() { - new JavaTestKit(node1) {{ - - String xml = "foo"; + new JavaTestKit(node1) { + { - CompositeNode invokeRpcResult = makeRPCOutput("bar"); - RpcResult rpcResult = - RpcResultBuilder.success(invokeRpcResult).build(); - ArgumentCaptor inputCaptor = new ArgumentCaptor<>(); - when(brokerSession.rpc(eq(TEST_RPC), inputCaptor.capture())) - .thenReturn(Futures.immediateFuture(rpcResult)); + final ContainerNode invokeRpcResult = makeRPCOutput("bar"); + final DOMRpcResult rpcResult = new DefaultDOMRpcResult(invokeRpcResult); + when(domRpcService1.invokeRpc(eq(TEST_RPC_TYPE), Mockito.>any())).thenReturn( + Futures.immediateCheckedFuture(rpcResult)); - ExecuteRpc executeMsg = new ExecuteRpc(xml, TEST_RPC); + final ExecuteRpc executeMsg = ExecuteRpc.from(TEST_RPC_ID, null); - rpcBroker1.tell(executeMsg, getRef()); + rpcBroker1.tell(executeMsg, getRef()); - RpcResponse rpcResponse = expectMsgClass(duration("5 seconds"), RpcResponse.class); + final RpcResponse rpcResponse = expectMsgClass(duration("5 seconds"), RpcResponse.class); - assertCompositeNodeEquals((CompositeNode)invokeRpcResult.getValue().get(0), - XmlUtils.xmlToCompositeNode(rpcResponse.getResultCompositeNode())); - }}; + assertEquals(rpcResult.getResult(), + NormalizedNodeSerializer.deSerialize(rpcResponse.getResultNormalizedNode())); + } + }; } @Test - public void testExecuteRpcFailureWithRpcErrors() { - new JavaTestKit(node1) {{ - - String xml = "foo"; - - RpcResult rpcResult = RpcResultBuilder.failed() - .withError(ErrorType.RPC, "tag1", "error", "appTag1", "info1", - new Exception("mock")) - .withWarning(ErrorType.PROTOCOL, "tag2", "warning", "appTag2", "info2", null) - .build(); - when(brokerSession.rpc(eq(TEST_RPC), any(CompositeNode.class))) - .thenReturn(Futures.immediateFuture(rpcResult)); - - ExecuteRpc executeMsg = new ExecuteRpc(xml, TEST_RPC); - - rpcBroker1.tell(executeMsg, getRef()); - - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); - - assertEquals("failure.cause()", RpcErrorsException.class, failure.cause().getClass()); - - RpcErrorsException errorsEx = (RpcErrorsException)failure.cause(); - List rpcErrors = Lists.newArrayList(errorsEx.getRpcErrors()); - assertEquals("RpcErrors count", 2, rpcErrors.size()); - assertRpcErrorEquals(rpcErrors.get(0), ErrorSeverity.ERROR, ErrorType.RPC, "tag1", - "error", "appTag1", "info1", "mock"); - assertRpcErrorEquals(rpcErrors.get(1), ErrorSeverity.WARNING, ErrorType.PROTOCOL, "tag2", - "warning", "appTag2", "info2", null); - }}; - } - - @Test - public void testExecuteRpcFailureWithNoRpcErrors() { - new JavaTestKit(node1) {{ + public void testExecuteRpcFailureWithException() { - String xml = "foo"; + new JavaTestKit(node1) { + { - RpcResult rpcResult = RpcResultBuilder.failed().build(); - when(brokerSession.rpc(eq(TEST_RPC), any(CompositeNode.class))) - .thenReturn(Futures.immediateFuture(rpcResult)); + when(domRpcService1.invokeRpc(eq(TEST_RPC_TYPE), Mockito.>any())) + .thenReturn( + Futures.immediateFailedCheckedFuture(new DOMRpcImplementationNotAvailableException( + "NOT FOUND"))); - ExecuteRpc executeMsg = new ExecuteRpc(xml, TEST_RPC); + final ExecuteRpc executeMsg = ExecuteRpc.from(TEST_RPC_ID, null); - rpcBroker1.tell(executeMsg, getRef()); + rpcBroker1.tell(executeMsg, getRef()); - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); + final Failure rpcResponse = expectMsgClass(duration("5 seconds"), akka.actor.Status.Failure.class); - assertEquals("failure.cause()", RpcErrorsException.class, failure.cause().getClass()); + Assert.assertTrue(rpcResponse.cause() instanceof DOMRpcException); + } + }; - RpcErrorsException errorsEx = (RpcErrorsException)failure.cause(); - List rpcErrors = Lists.newArrayList(errorsEx.getRpcErrors()); - assertEquals("RpcErrors count", 1, rpcErrors.size()); - assertRpcErrorEquals(rpcErrors.get(0), ErrorSeverity.ERROR, ErrorType.RPC, - "operation-failed", "failed", null, null, null); - }}; } - @Test - public void testExecuteRpcFailureWithException() { - new JavaTestKit(node1) {{ - - String xml = "foo"; - - when(brokerSession.rpc(eq(TEST_RPC), any(CompositeNode.class))) - .thenReturn(Futures.>immediateFailedFuture( - new TestException())); - - ExecuteRpc executeMsg = new ExecuteRpc(xml, TEST_RPC); - - rpcBroker1.tell(executeMsg, getRef()); - - akka.actor.Status.Failure failure = expectMsgClass(duration("5 seconds"), - akka.actor.Status.Failure.class); - - assertEquals("failure.cause()", TestException.class, failure.cause().getClass()); - }}; - } }