X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fconnection%2Flistener%2FSystemNotificationsListenerImplTest.java;h=2abf175a02beb836ef7c27001739294d09b07012;hb=refs%2Fchanges%2F36%2F76236%2F27;hp=84fbd22b60b9848ffccafa64f7b985805311a36d;hpb=dbabc727a805a8a1a3f61356da015b77dc81599c;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/connection/listener/SystemNotificationsListenerImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/connection/listener/SystemNotificationsListenerImplTest.java index 84fbd22b60..2abf175a02 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/connection/listener/SystemNotificationsListenerImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/connection/listener/SystemNotificationsListenerImplTest.java @@ -8,19 +8,25 @@ package org.opendaylight.openflowplugin.impl.connection.listener; +import static org.mockito.ArgumentMatchers.any; + import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import java.net.InetSocketAddress; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; +import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; import org.opendaylight.openflowplugin.impl.connection.ConnectionContextImpl; +import org.opendaylight.openflowplugin.impl.util.ThreadPoolLoggingExecutor; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.EchoOutput; @@ -34,38 +40,47 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; /** - * Testing basic bahavior of {@link SystemNotificationsListenerImpl} + * Testing basic bahavior of {@link SystemNotificationsListenerImpl}. */ @RunWith(MockitoJUnitRunner.class) public class SystemNotificationsListenerImplTest { - public static final int SAFE_TIMEOUT = 1000; - private final static int ECHO_REPLY_TIMEOUT = 2000; + private static final int SAFE_TIMEOUT = 1000; + private static final int ECHO_REPLY_TIMEOUT = 2000; + @Mock - private org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter connectionAdapter; + private ConnectionAdapter connectionAdapter; @Mock private FeaturesReply features; - private ConnectionContext connectionContext; - private SystemNotificationsListenerImpl systemNotificationsListener; + private ConnectionContext connectionContext; private ConnectionContextImpl connectionContextGolem; - private static final NodeId nodeId = new NodeId("OFP:TEST"); + private SystemNotificationsListenerImpl systemNotificationsListener; + + private static final NodeId NODE_ID = + new NodeId("OFP:TEST"); + + private final ThreadPoolLoggingExecutor threadPool = new ThreadPoolLoggingExecutor( + 0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<>(), "opfpool"); @Before public void setUp() { connectionContextGolem = new ConnectionContextImpl(connectionAdapter); connectionContextGolem.changeStateToWorking(); - connectionContextGolem.setNodeId(nodeId); + connectionContextGolem.setNodeId(NODE_ID); + connectionContext = Mockito.spy(connectionContextGolem); Mockito.when(connectionAdapter.getRemoteAddress()).thenReturn( InetSocketAddress.createUnresolved("unit-odl.example.org", 4242)); - connectionContext = Mockito.spy(connectionContextGolem); + Mockito.when(features.getAuxiliaryId()).thenReturn((short) 0); Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter); Mockito.when(connectionContext.getFeatures()).thenReturn(features); - systemNotificationsListener = new SystemNotificationsListenerImpl(connectionContext, ECHO_REPLY_TIMEOUT); + systemNotificationsListener = + new SystemNotificationsListenerImpl(connectionContext, ECHO_REPLY_TIMEOUT, threadPool); + } @After @@ -74,111 +89,100 @@ public class SystemNotificationsListenerImplTest { } /** - * successful scenario - connection is on and closes without errors - * - * @throws Exception + * Successful scenario - connection is on and closes without errors. */ @Test public void testOnDisconnectEvent1() throws Exception { - Mockito.when(connectionAdapter.isAlive()).thenReturn(true); - Mockito.when(connectionAdapter.disconnect()).thenReturn(Futures.immediateFuture(Boolean.TRUE)); DisconnectEvent disconnectNotification = new DisconnectEventBuilder().setInfo("testing disconnect").build(); systemNotificationsListener.onDisconnectEvent(disconnectNotification); verifyCommonInvocationsSubSet(); Mockito.verify(connectionContext).onConnectionClosed(); + Mockito.verify(connectionContext).getConnectionAdapter(); + Mockito.verify(connectionContext, Mockito.atLeastOnce()).getSafeNodeIdForLOG(); } /** - * broken scenario - connection is on but fails to close - * - * @throws Exception + * Broken scenario - connection is on but fails to close. */ @Test public void testOnDisconnectEvent2() throws Exception { - Mockito.when(connectionAdapter.isAlive()).thenReturn(true); - Mockito.when(connectionAdapter.disconnect()).thenReturn(Futures.immediateFuture(Boolean.FALSE)); DisconnectEvent disconnectNotification = new DisconnectEventBuilder().setInfo("testing disconnect").build(); systemNotificationsListener.onDisconnectEvent(disconnectNotification); verifyCommonInvocationsSubSet(); Mockito.verify(connectionContext).onConnectionClosed(); + Mockito.verify(connectionContext).getConnectionAdapter(); + Mockito.verify(connectionContext, Mockito.atLeastOnce()).getSafeNodeIdForLOG(); } /** - * successful scenario - connection is already down - * - * @throws Exception + * Successful scenario - connection is already down. */ @Test public void testOnDisconnectEvent3() throws Exception { connectionContextGolem.changeStateToTimeouting(); - Mockito.when(connectionAdapter.isAlive()).thenReturn(true); - Mockito.when(connectionAdapter.disconnect()).thenReturn(Futures.immediateFailedFuture(new Exception("unit exception"))); - DisconnectEvent disconnectNotification = new DisconnectEventBuilder().setInfo("testing disconnect").build(); systemNotificationsListener.onDisconnectEvent(disconnectNotification); verifyCommonInvocationsSubSet(); Mockito.verify(connectionContext).onConnectionClosed(); + Mockito.verify(connectionContext).getConnectionAdapter(); + Mockito.verify(connectionContext, Mockito.atLeastOnce()).getSafeNodeIdForLOG(); } /** - * broken scenario - connection is on but throws error on close - * - * @throws Exception + * Broken scenario - connection is on but throws error on close. */ @Test public void testOnDisconnectEvent4() throws Exception { Mockito.when(connectionContext.getConnectionState()).thenReturn(ConnectionContext.CONNECTION_STATE.RIP); - Mockito.when(connectionAdapter.isAlive()).thenReturn(false); DisconnectEvent disconnectNotification = new DisconnectEventBuilder().setInfo("testing disconnect").build(); systemNotificationsListener.onDisconnectEvent(disconnectNotification); verifyCommonInvocationsSubSet(); Mockito.verify(connectionContext).onConnectionClosed(); + Mockito.verify(connectionContext).getConnectionAdapter(); + Mockito.verify(connectionContext, Mockito.atLeastOnce()).getSafeNodeIdForLOG(); } /** - * first encounter of idle event, echo received successfully - * - * @throws Exception + * First encounter of idle event, echo received successfully. */ @Test public void testOnSwitchIdleEvent1() throws Exception { - final SettableFuture> echoReply = SettableFuture.create(); - Mockito.when(connectionAdapter.echo(Matchers.any(EchoInput.class))).thenReturn(echoReply); + final ListenableFuture> echoReply = + Futures.immediateFuture(RpcResultBuilder.success(new EchoOutputBuilder().setXid(0L).build()).build()); + + Mockito.when(connectionAdapter.echo(any(EchoInput.class))).thenReturn(echoReply); SwitchIdleEvent notification = new SwitchIdleEventBuilder().setInfo("wake up, device sleeps").build(); systemNotificationsListener.onSwitchIdleEvent(notification); // make sure that the idle notification processing thread started Thread.sleep(SAFE_TIMEOUT); - EchoOutput echoReplyVal = new EchoOutputBuilder().build(); - echoReply.set(RpcResultBuilder.success(echoReplyVal).build()); verifyCommonInvocations(); - Mockito.verify(connectionAdapter, Mockito.timeout(SAFE_TIMEOUT)).echo(Matchers.any(EchoInput.class)); + Mockito.verify(connectionAdapter, Mockito.timeout(SAFE_TIMEOUT)).echo(any(EchoInput.class)); Mockito.verify(connectionAdapter, Mockito.never()).disconnect(); Mockito.verify(connectionContext).changeStateToTimeouting(); Mockito.verify(connectionContext).changeStateToWorking(); } /** - * first encounter of idle event, echo not receive - * - * @throws Exception + * First encounter of idle event, echo not receive. */ @Test public void testOnSwitchIdleEvent2() throws Exception { final SettableFuture> echoReply = SettableFuture.create(); - Mockito.when(connectionAdapter.echo(Matchers.any(EchoInput.class))).thenReturn(echoReply); + Mockito.when(connectionAdapter.echo(any(EchoInput.class))).thenReturn(echoReply); Mockito.when(connectionAdapter.isAlive()).thenReturn(true); - Mockito.when(connectionAdapter.disconnect()).thenReturn(Futures.immediateFailedFuture(new Exception("unit exception"))); + Mockito.when(connectionAdapter.disconnect()) + .thenReturn(Futures.immediateFailedFuture(new Exception("unit exception"))); SwitchIdleEvent notification = new SwitchIdleEventBuilder().setInfo("wake up, device sleeps").build(); systemNotificationsListener.onSwitchIdleEvent(notification); @@ -186,10 +190,12 @@ public class SystemNotificationsListenerImplTest { Thread.sleep(SystemNotificationsListenerImpl.MAX_ECHO_REPLY_TIMEOUT + SAFE_TIMEOUT); verifyCommonInvocations(); - Mockito.verify(connectionAdapter, Mockito.timeout(SAFE_TIMEOUT)).echo(Matchers.any(EchoInput.class)); + Mockito.verify(connectionAdapter, Mockito.timeout(SAFE_TIMEOUT)).echo(any(EchoInput.class)); Mockito.verify(connectionAdapter).disconnect(); Mockito.verify(connectionContext).changeStateToTimeouting(); Mockito.verify(connectionContext).closeConnection(true); + Mockito.verify(connectionContext, Mockito.atLeastOnce()).getSafeNodeIdForLOG(); + } private void verifyCommonInvocations() { @@ -201,4 +207,4 @@ public class SystemNotificationsListenerImplTest { Mockito.verify(connectionContext, Mockito.timeout(SAFE_TIMEOUT).atLeastOnce()).getConnectionState(); Mockito.verify(connectionContext, Mockito.timeout(SAFE_TIMEOUT).atLeastOnce()).getFeatures(); } -} \ No newline at end of file +}