X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2FStatisticsManagerImplTest.java;h=ebf9396c3d310e048f6b527038db8a286c2d5208;hb=9b30c2c66759fd397b8e9d65d1405f9d60a8b17f;hp=6c4229e10fa6cfd280560c3a654eb24f2adf7acc;hpb=3c34de49abdc57fe13181e370e61e06a1e0ca658;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImplTest.java index 6c4229e10f..ebf9396c3d 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImplTest.java @@ -11,7 +11,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import io.netty.util.HashedWheelTimer; import io.netty.util.Timeout; @@ -20,7 +19,6 @@ import java.math.BigInteger; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.junit.Assert; @@ -32,9 +30,7 @@ import org.mockito.Captor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; @@ -44,14 +40,9 @@ import org.opendaylight.openflowplugin.api.OFConstants; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; -import org.opendaylight.openflowplugin.api.openflow.device.DeviceManager; import org.opendaylight.openflowplugin.api.openflow.device.DeviceState; import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceTerminationPhaseHandler; import org.opendaylight.openflowplugin.api.openflow.device.handlers.MultiMsgCollector; -import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleConductor; import org.opendaylight.openflowplugin.api.openflow.registry.ItemLifeCycleRegistry; import org.opendaylight.openflowplugin.api.openflow.rpc.ItemLifeCycleSource; import org.opendaylight.openflowplugin.api.openflow.rpc.listener.ItemLifecycleListener; @@ -65,17 +56,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.NonZeroUint32Type; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfigBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsManagerControlService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsWorkMode; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,37 +74,25 @@ public class StatisticsManagerImplTest { private static final Logger LOG = LoggerFactory.getLogger(StatisticsManagerImplTest.class); - private static final BigInteger DUMMY_DATAPATH_ID = new BigInteger("444"); - private static final Short DUMMY_VERSION = OFConstants.OFP_VERSION_1_3; public static final NodeId NODE_ID = new NodeId("ofp-unit-dummy-node-id"); @Mock - RequestContextStack mockedRequestContextStack; + private ConnectionContext mockedPrimConnectionContext; @Mock - ConnectionContext mockedPrimConnectionContext; + private FeaturesReply mockedFeatures; @Mock - FeaturesReply mockedFeatures; + private ConnectionAdapter mockedConnectionAdapter; @Mock - GetFeaturesOutput mockedFeaturesOutput; + private MessageSpy mockedMessagSpy; @Mock - ConnectionAdapter mockedConnectionAdapter; + private DeviceContext mockedDeviceContext; @Mock - MessageSpy mockedMessagSpy; + private DeviceState mockedDeviceState; @Mock - DeviceContext mockedDeviceContext; - @Mock - DeviceState mockedDeviceState; - @Mock - DeviceInfo mockedDeviceInfo; - @Mock - DeviceInitializationPhaseHandler mockedDevicePhaseHandler; - @Mock - DeviceTerminationPhaseHandler mockedTerminationPhaseHandler; + private DeviceInfo mockedDeviceInfo; @Mock private RpcProviderRegistry rpcProviderRegistry; @Mock - private HashedWheelTimer hashedWheelTimer; - @Mock private OutboundQueue outboundQueue; @Mock private MultiMsgCollector multiMagCollector; @@ -126,14 +103,6 @@ public class StatisticsManagerImplTest { @Mock private BindingAwareBroker.RpcRegistration serviceControlRegistration; @Mock - private DeviceManager deviceManager; - @Mock - private LifecycleConductor conductor; - @Mock - private GetFeaturesOutput featuresOutput; - @Mock - private DeviceInitializationPhaseHandler deviceInitializationPhaseHandler; - @Mock private DeviceInfo deviceInfo; @Mock private DataBroker dataBroker; @@ -162,21 +131,18 @@ public class StatisticsManagerImplTest { when(mockedDeviceState.isTableStatisticsAvailable()).thenReturn(Boolean.TRUE); when(mockedDeviceInfo.getNodeInstanceIdentifier()).thenReturn(nodePath); when(mockedDeviceInfo.getDatapathId()).thenReturn(BigInteger.TEN); - when(mockedDeviceInfo.getNodeId()).thenReturn(new NodeId("ofp-unit-dummy-node-id")); + when(mockedDeviceInfo.getNodeId()).thenReturn(NODE_ID); when(mockedDeviceContext.getDeviceInfo()).thenReturn(mockedDeviceInfo); when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedPrimConnectionContext); when(mockedDeviceContext.getMessageSpy()).thenReturn(mockedMessagSpy); - when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl(dataBroker, nodePath)); + when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl(OFConstants.OFP_VERSION_1_3, dataBroker, nodePath)); when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); when(mockedDeviceContext.getMultiMsgCollector( Matchers.>>any())).thenAnswer( - new Answer() { - @Override - public MultiMsgCollector answer(InvocationOnMock invocation) throws Throwable { - currentRequestContext = (RequestContext>) invocation.getArguments()[0]; - return multiMagCollector; - } + invocation -> { + currentRequestContext = (RequestContext>) invocation.getArguments()[0]; + return multiMagCollector; } ); when(mockedDeviceContext.getItemLifeCycleSourceRegistry()).thenReturn(itemLifeCycleRegistry); @@ -185,43 +151,16 @@ public class StatisticsManagerImplTest { Matchers.any())).thenReturn(serviceControlRegistration); final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager(); - statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, false, conductor, convertorManager); - statisticsManager.setDeviceInitializationPhaseHandler(deviceInitializationPhaseHandler); - when(conductor.getDeviceContext(deviceInfo)).thenReturn(mockedDeviceContext); - } - - @Test - public void testOnDeviceContextLevelUp() throws Exception { - Mockito.doAnswer(new Answer() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - final FutureCallback callback = (FutureCallback) invocation.getArguments()[2]; - LOG.debug("committing entry: {}", ((MultipartRequestInput) invocation.getArguments()[1]).getType()); - callback.onSuccess(null); - currentRequestContext.setResult(RpcResultBuilder.>success().build()); - return null; - } - }).when(outboundQueue) - .commitEntry(Matchers.anyLong(), Matchers.any(), Matchers.>any()); - - statisticsManager.setDeviceInitializationPhaseHandler(mockedDevicePhaseHandler); - statisticsManager.onDeviceContextLevelUp(deviceInfo); - verify(mockedDevicePhaseHandler).onDeviceContextLevelUp(deviceInfo); - } - - @Test - public void testOnDeviceContextClosed() throws Exception { - final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - final Map contextsMap = getContextsMap(statisticsManager); - - contextsMap.put(deviceInfo, statisticContext); - Assert.assertEquals(1, contextsMap.size()); - - statisticsManager.setDeviceTerminationPhaseHandler(mockedTerminationPhaseHandler); - statisticsManager.onDeviceContextLevelDown(deviceInfo); - verify(statisticContext).close(); - verify(mockedTerminationPhaseHandler).onDeviceContextLevelDown(deviceInfo); - Assert.assertEquals(0, contextsMap.size()); + final long basicTimerDelay = 3000L; + final long maximumTimerDelay = 900000L; + + statisticsManager = new StatisticsManagerImpl( + new OpenflowProviderConfigBuilder() + .setBasicTimerDelay(new NonZeroUint32Type(basicTimerDelay)) + .setMaximumTimerDelay(new NonZeroUint32Type(maximumTimerDelay)) + .setIsStatisticsPollingOn(false) + .build(), rpcProviderRegistry, new HashedWheelTimer(), + convertorManager); } private static Map getContextsMap(final StatisticsManagerImpl statisticsManager) @@ -250,11 +189,12 @@ public class StatisticsManagerImplTest { @Test public void testChangeStatisticsWorkMode1() throws Exception { final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - when(statisticContext.getPollTimeout()).thenReturn( - Optional.empty()); when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( Collections.emptyList()); + when(statisticContext.gainDeviceContext()).thenReturn(mockedDeviceContext); + when(statisticContext.gainDeviceState()).thenReturn(mockedDeviceState); + getContextsMap(statisticsManager).put(deviceInfo, statisticContext); final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = @@ -265,8 +205,8 @@ public class StatisticsManagerImplTest { .changeStatisticsWorkMode(changeStatisticsWorkModeInputBld.build()); checkWorkModeChangeOutcome(workMode); - Mockito.verify(itemLifeCycleRegistry).getLifeCycleSources(); - Mockito.verify(statisticContext).getPollTimeout(); + verify(itemLifeCycleRegistry).getLifeCycleSources(); + verify(statisticContext).stopGatheringData(); } private static void checkWorkModeChangeOutcome(Future> workMode) throws InterruptedException, ExecutionException { @@ -285,13 +225,15 @@ public class StatisticsManagerImplTest { final Timeout pollTimeout = Mockito.mock(Timeout.class); final ItemLifeCycleSource itemLifecycleSource = Mockito.mock(ItemLifeCycleSource.class); final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - when(statisticContext.getPollTimeout()).thenReturn( - Optional.of(pollTimeout)); when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( Collections.singletonList(itemLifecycleSource)); getContextsMap(statisticsManager).put(deviceInfo, statisticContext); + when(statisticContext.gainDeviceContext()).thenReturn(mockedDeviceContext); + when(statisticContext.gainDeviceState()).thenReturn(mockedDeviceState); +// when(lifecycleService.getDeviceContext()).thenReturn(mockedDeviceContext); + final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = new ChangeStatisticsWorkModeInputBuilder() .setMode(StatisticsWorkMode.FULLYDISABLED); @@ -299,10 +241,9 @@ public class StatisticsManagerImplTest { Future> workMode = statisticsManager.changeStatisticsWorkMode(changeStatisticsWorkModeInputBld.build()); checkWorkModeChangeOutcome(workMode); - Mockito.verify(itemLifeCycleRegistry).getLifeCycleSources(); - Mockito.verify(statisticContext).getPollTimeout(); - Mockito.verify(pollTimeout).cancel(); - Mockito.verify(itemLifecycleSource).setItemLifecycleListener(Matchers.any()); + verify(itemLifeCycleRegistry).getLifeCycleSources(); + verify(statisticContext).stopGatheringData(); + verify(itemLifecycleSource).setItemLifecycleListener(Matchers.any()); } /** @@ -319,8 +260,6 @@ public class StatisticsManagerImplTest { .setItemLifecycleListener(itemLifeCycleListenerCapt.capture()); final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - when(statisticContext.getPollTimeout()).thenReturn( - Optional.of(pollTimeout)); when(statisticContext.getItemLifeCycleListener()).thenReturn( Mockito.mock(ItemLifecycleListener.class)); when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( @@ -328,6 +267,10 @@ public class StatisticsManagerImplTest { getContextsMap(statisticsManager).put(deviceInfo, statisticContext); + when(statisticContext.gainDeviceContext()).thenReturn(mockedDeviceContext); + when(statisticContext.gainDeviceState()).thenReturn(mockedDeviceState); +// when(lifecycleService.getDeviceContext()).thenReturn(mockedDeviceContext); + final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = new ChangeStatisticsWorkModeInputBuilder() .setMode(StatisticsWorkMode.FULLYDISABLED); @@ -342,9 +285,8 @@ public class StatisticsManagerImplTest { changeStatisticsWorkModeInputBld.build()); checkWorkModeChangeOutcome(workMode); - Mockito.verify(itemLifeCycleRegistry, Mockito.times(2)).getLifeCycleSources(); - Mockito.verify(statisticContext).getPollTimeout(); - Mockito.verify(pollTimeout).cancel(); + verify(itemLifeCycleRegistry, times(2)).getLifeCycleSources(); + verify(statisticContext).stopGatheringData(); final List itemLifeCycleListenerValues = itemLifeCycleListenerCapt.getAllValues(); Assert.assertEquals(2, itemLifeCycleListenerValues.size()); @@ -355,18 +297,17 @@ public class StatisticsManagerImplTest { @Test public void testClose() throws Exception { statisticsManager.close(); - Mockito.verify(serviceControlRegistration).close(); + verify(serviceControlRegistration).close(); } @Test public void testCalculateTimerDelay() throws Exception { final TimeCounter timeCounter = Mockito.mock(TimeCounter.class); when(timeCounter.getAverageTimeBetweenMarks()).thenReturn(2000L, (Long)4000L); - statisticsManager.calculateTimerDelay(timeCounter); - Assert.assertEquals(3000L, StatisticsManagerImpl.getCurrentTimerDelay()); + Assert.assertEquals(3000L, statisticsManager.getCurrentTimerDelay()); statisticsManager.calculateTimerDelay(timeCounter); - Assert.assertEquals(6000L, StatisticsManagerImpl.getCurrentTimerDelay()); + Assert.assertEquals(6000L, statisticsManager.getCurrentTimerDelay()); } @Test @@ -377,20 +318,18 @@ public class StatisticsManagerImplTest { statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); verify(mockedDeviceContext).getDeviceState(); - when(mockedDeviceContext.getDeviceState().isValid()).thenReturn(true); statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); - when(mockedDeviceContext.getDeviceState().isStatisticsPollingEnabled()).thenReturn(true); statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); when(statisticsContext.gatherDynamicData()).thenReturn(Futures.immediateCheckedFuture(Boolean.TRUE)); when(statisticsContext.isSchedulingEnabled()).thenReturn(Boolean.TRUE); statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); - Mockito.verify(mockTimerCounter).markStart(); - Mockito.verify(mockTimerCounter).addTimeMark(); + verify(mockTimerCounter).markStart(); + verify(mockTimerCounter).addTimeMark(); when(statisticsContext.gatherDynamicData()).thenReturn(Futures.immediateFailedFuture(new Throwable("error msg"))); statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); - Mockito.verify(mockTimerCounter,times(2)).addTimeMark(); + verify(mockTimerCounter,times(2)).addTimeMark(); } }