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%2FRemoteRpcImplementationTest.java;h=5b3394eebd223dacf65df2616e65b8f98e9b5444;hp=8d6e8e598d201fc859e6cf90cdf3d8f272cf603d;hb=a2b838f96589b502578fa4e15cef2769f886a378;hpb=a58c23b491f665e6d5449e97d430a7e15d1ecda6 diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RemoteRpcImplementationTest.java b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RemoteRpcImplementationTest.java index 8d6e8e598d..5b3394eebd 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RemoteRpcImplementationTest.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/test/java/org/opendaylight/controller/remote/rpc/RemoteRpcImplementationTest.java @@ -11,53 +11,34 @@ package org.opendaylight.controller.remote.rpc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; -import akka.actor.ActorRef; -import akka.actor.Status; -import akka.japi.Pair; -import akka.testkit.JavaTestKit; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; -import java.util.Arrays; -import java.util.Collections; +import com.google.common.util.concurrent.ListenableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.junit.Ignore; import org.junit.Test; import org.mockito.ArgumentCaptor; -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.registry.RpcRegistry; -import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.Messages.FindRouters; -import org.opendaylight.controller.sal.connector.api.RpcRouter.RouteIdentifier; +import org.opendaylight.mdsal.dom.api.DOMRpcException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.yangtools.util.concurrent.FluentFutures; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; -/*** +/** * Unit tests for RemoteRpcImplementation. * * @author Thomas Pantelis */ public class RemoteRpcImplementationTest extends AbstractRpcTest { - - - @Test(expected = DOMRpcImplementationNotAvailableException.class) - public void testInvokeRpcWithNoRemoteActor() throws Exception { - final ContainerNode input = makeRPCInput("foo"); - final CheckedFuture failedFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, input); - rpcRegistry1Probe.expectMsgClass(JavaTestKit.duration("5 seconds"), RpcRegistry.Messages.FindRouters.class); - rpcRegistry1Probe - .reply(new RpcRegistry.Messages.FindRoutersReply(Collections.>emptyList())); - failedFuture.checkedGet(5, TimeUnit.SECONDS); - } - - /** - * This test method invokes and executes the remote rpc + * This test method invokes and executes the remote rpc. */ @Test public void testInvokeRpc() throws Exception { @@ -70,25 +51,17 @@ public class RemoteRpcImplementationTest extends AbstractRpcTest { (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); when(domRpcService2.invokeRpc(eq(TEST_RPC_TYPE), inputCaptor.capture())).thenReturn( - Futures.immediateCheckedFuture(rpcResult)); + FluentFutures.immediateFluentFuture(rpcResult)); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); + final ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - - rpcRegistry1Probe.reply(new RpcRegistry.Messages.FindRoutersReply(Arrays.asList(new Pair<>( - rpcBroker2, 200L)))); - final DOMRpcResult result = frontEndFuture.checkedGet(5, TimeUnit.SECONDS); + final DOMRpcResult result = frontEndFuture.get(5, TimeUnit.SECONDS); assertEquals(rpcOutput, result.getResult()); } /** - * This test method invokes and executes the remote rpc + * This test method invokes and executes the remote rpc. */ @Test public void testInvokeRpcWithNullInput() throws Exception { @@ -100,26 +73,17 @@ public class RemoteRpcImplementationTest extends AbstractRpcTest { (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); when(domRpcService2.invokeRpc(eq(TEST_RPC_TYPE), inputCaptor.capture())).thenReturn( - Futures.immediateCheckedFuture(rpcResult)); + FluentFutures.immediateFluentFuture(rpcResult)); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, null); + ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, null); assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - - rpcRegistry1Probe.reply(new RpcRegistry.Messages.FindRoutersReply(Arrays.asList(new Pair<>( - rpcBroker2, 200L)))); - final DOMRpcResult result = frontEndFuture.checkedGet(5, TimeUnit.SECONDS); + final DOMRpcResult result = frontEndFuture.get(5, TimeUnit.SECONDS); assertEquals(rpcOutput, result.getResult()); } - /** - * This test method invokes and executes the remote rpc + * This test method invokes and executes the remote rpc. */ @Test public void testInvokeRpcWithNoOutput() throws Exception { @@ -132,77 +96,51 @@ public class RemoteRpcImplementationTest extends AbstractRpcTest { (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); when(domRpcService2.invokeRpc(eq(TEST_RPC_TYPE), inputCaptor.capture())).thenReturn( - Futures.immediateCheckedFuture(rpcResult)); + FluentFutures.immediateFluentFuture(rpcResult)); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); + final ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - - rpcRegistry1Probe.reply(new RpcRegistry.Messages.FindRoutersReply(Arrays.asList(new Pair<>( - rpcBroker2, 200L)))); - final DOMRpcResult result = frontEndFuture.checkedGet(5, TimeUnit.SECONDS); + final DOMRpcResult result = frontEndFuture.get(5, TimeUnit.SECONDS); assertNull(result.getResult()); } - /** - * This test method invokes and executes the remote rpc + * This test method invokes and executes the remote rpc. */ + @SuppressWarnings({"checkstyle:AvoidHidingCauseException", "checkstyle:IllegalThrows"}) @Test(expected = DOMRpcException.class) - public void testInvokeRpcWithRemoteFailedFuture() throws Exception { - final ContainerNode rpcOutput = null; - final DOMRpcResult rpcResult = new DefaultDOMRpcResult(rpcOutput); - + public void testInvokeRpcWithRemoteFailedFuture() throws Throwable { final NormalizedNode invokeRpcInput = makeRPCInput("foo"); @SuppressWarnings({"unchecked", "rawtypes"}) final ArgumentCaptor> inputCaptor = (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); when(domRpcService2.invokeRpc(eq(TEST_RPC_TYPE), inputCaptor.capture())).thenReturn( - Futures.immediateFailedCheckedFuture(new DOMRpcException( - "Test Exception") {})); + FluentFutures.immediateFailedFluentFuture(new RemoteDOMRpcException("Test Exception", null))); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); + final ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - - rpcRegistry1Probe.reply(new RpcRegistry.Messages.FindRoutersReply(Arrays.asList(new Pair<>( - rpcBroker2, 200L)))); - frontEndFuture.checkedGet(5, TimeUnit.SECONDS); + + try { + frontEndFuture.get(5, TimeUnit.SECONDS); + } catch (ExecutionException e) { + throw e.getCause(); + } } /** * This test method invokes and tests exceptions when akka timeout occured - * - * Currently ignored since this test with current config takes around 15 seconds - * to complete. - * + * Currently ignored since this test with current config takes around 15 seconds to complete. */ @Ignore @Test(expected = RemoteDOMRpcException.class) public void testInvokeRpcWithAkkaTimeoutException() throws Exception { final NormalizedNode invokeRpcInput = makeRPCInput("foo"); - @SuppressWarnings({"unchecked", "rawtypes"}) - final ArgumentCaptor> inputCaptor = - (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); + final ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - frontEndFuture.checkedGet(20, TimeUnit.SECONDS); + frontEndFuture.get(20, TimeUnit.SECONDS); } /** @@ -210,35 +148,20 @@ public class RemoteRpcImplementationTest extends AbstractRpcTest { * with runtime exception. */ @Test(expected = DOMRpcException.class) - public void testInvokeRpcWithLookupException() throws Exception { + @SuppressWarnings({"checkstyle:AvoidHidingCauseException", "checkstyle:IllegalThrows"}) + public void testInvokeRpcWithLookupException() throws Throwable { final NormalizedNode invokeRpcInput = makeRPCInput("foo"); - @SuppressWarnings({"unchecked", "rawtypes"}) - final ArgumentCaptor> inputCaptor = - (ArgumentCaptor) ArgumentCaptor.forClass(NormalizedNode.class); - final CheckedFuture frontEndFuture = - remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); - assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - final FindRouters findRouters = rpcRegistry1Probe.expectMsgClass(RpcRegistry.Messages.FindRouters.class); - final RouteIdentifier routeIdentifier = findRouters.getRouteIdentifier(); - assertEquals("getType", TEST_RPC, routeIdentifier.getType()); - assertEquals("getRoute", TEST_PATH, routeIdentifier.getRoute()); - rpcRegistry1Probe.reply( new Status.Failure(new RuntimeException("test"))); - frontEndFuture.checkedGet(5, TimeUnit.SECONDS); - } - - /** - * This test method invokes and executes the remote rpc - */ - @Test(expected = DOMRpcImplementationNotAvailableException.class) - public void testInvokeRpcWithLoopException() throws Exception { - final NormalizedNode invokeRpcInput = RemoteRpcInput.from(makeRPCInput("foo")); - final CheckedFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); - frontEndFuture.checkedGet(5, TimeUnit.SECONDS); - } + doThrow(new RuntimeException("test")).when(domRpcService2).invokeRpc(any(SchemaPath.class), + any(NormalizedNode.class)); + final ListenableFuture frontEndFuture = remoteRpcImpl1.invokeRpc(TEST_RPC_ID, invokeRpcInput); + assertTrue(frontEndFuture instanceof RemoteDOMRpcFuture); - private RemoteRpcProviderConfig getConfig() { - return new RemoteRpcProviderConfig.Builder("unit-test").build(); + try { + frontEndFuture.get(5, TimeUnit.SECONDS); + } catch (ExecutionException e) { + throw e.getCause(); + } } }