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=68ed88b8d2d9032ff734957cf9954845e2e8341f;hb=d8cc382a8dbdcb7c89b68457b3ae0b6d576ee28f;hp=f203cfbbc113236b86298b8d3fd77ea37249645b;hpb=18dc690ea2106eea6c2111d998581e8ded03231c;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 f203cfbbc1..68ed88b8d2 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 @@ -7,12 +7,10 @@ */ package org.opendaylight.openflowplugin.impl.statistics; -import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import io.netty.util.HashedWheelTimer; @@ -22,8 +20,9 @@ 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; import org.junit.Before; import org.junit.Test; @@ -36,6 +35,7 @@ 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; import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; @@ -43,6 +43,7 @@ import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue; 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; @@ -51,13 +52,15 @@ import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitia 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.lifecycle.LifecycleService; 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; import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsContext; -import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsManager; import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy; import org.opendaylight.openflowplugin.impl.registry.flow.DeviceFlowRegistryImpl; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; @@ -71,7 +74,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow 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.yang.gen.v1.urn.opendaylight.role.service.rev150727.OfpRole; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @@ -86,6 +88,7 @@ public class StatisticsManagerImplTest { 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; @@ -104,6 +107,8 @@ public class StatisticsManagerImplTest { @Mock DeviceState mockedDeviceState; @Mock + DeviceInfo mockedDeviceInfo; + @Mock DeviceInitializationPhaseHandler mockedDevicePhaseHandler; @Mock DeviceTerminationPhaseHandler mockedTerminationPhaseHandler; @@ -129,6 +134,12 @@ public class StatisticsManagerImplTest { private GetFeaturesOutput featuresOutput; @Mock private DeviceInitializationPhaseHandler deviceInitializationPhaseHandler; + @Mock + private DeviceInfo deviceInfo; + @Mock + private DataBroker dataBroker; + @Mock + private LifecycleService lifecycleService; private RequestContext> currentRequestContext; private StatisticsManagerImpl statisticsManager; @@ -140,15 +151,10 @@ public class StatisticsManagerImplTest { .create(Nodes.class) .child(Node.class, new NodeKey(new NodeId("openflow:10"))); - when(mockedFeatures.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID); - when(mockedFeatures.getVersion()).thenReturn(DUMMY_VERSION); - when(mockedFeaturesOutput.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID); - when(mockedFeaturesOutput.getVersion()).thenReturn(DUMMY_VERSION); - when(mockedPrimConnectionContext.getFeatures()).thenReturn(mockedFeatures); when(mockedPrimConnectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter); when(mockedPrimConnectionContext.getConnectionState()).thenReturn(ConnectionContext.CONNECTION_STATE.WORKING); - when(mockedPrimConnectionContext.getNodeId()).thenReturn(new NodeId("ut-node:123")); + when(mockedPrimConnectionContext.getNodeId()).thenReturn(NODE_ID); when(mockedPrimConnectionContext.getOutboundQueueProvider()).thenReturn(outboundQueue); when(mockedDeviceState.isFlowStatisticsAvailable()).thenReturn(Boolean.TRUE); @@ -157,14 +163,14 @@ public class StatisticsManagerImplTest { when(mockedDeviceState.isPortStatisticsAvailable()).thenReturn(Boolean.TRUE); when(mockedDeviceState.isQueueStatisticsAvailable()).thenReturn(Boolean.TRUE); when(mockedDeviceState.isTableStatisticsAvailable()).thenReturn(Boolean.TRUE); - when(mockedDeviceState.getFeatures()).thenReturn(featuresOutput); - when(mockedDeviceState.getNodeInstanceIdentifier()).thenReturn(nodePath); - - when(mockedDeviceState.getNodeId()).thenReturn(new NodeId("ofp-unit-dummy-node-id")); + when(mockedDeviceInfo.getNodeInstanceIdentifier()).thenReturn(nodePath); + when(mockedDeviceInfo.getDatapathId()).thenReturn(BigInteger.TEN); + when(mockedDeviceInfo.getNodeId()).thenReturn(new NodeId("ofp-unit-dummy-node-id")); + when(mockedDeviceContext.getDeviceInfo()).thenReturn(mockedDeviceInfo); when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedPrimConnectionContext); when(mockedDeviceContext.getMessageSpy()).thenReturn(mockedMessagSpy); - when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl()); + when(mockedDeviceContext.getDeviceFlowRegistry()).thenReturn(new DeviceFlowRegistryImpl(dataBroker, nodePath)); when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); when(mockedDeviceContext.getMultiMsgCollector( Matchers.>>any())).thenAnswer( @@ -181,10 +187,10 @@ public class StatisticsManagerImplTest { Matchers.eq(StatisticsManagerControlService.class), Matchers.any())).thenReturn(serviceControlRegistration); - statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, false, conductor); + final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager(); + statisticsManager = new StatisticsManagerImpl(rpcProviderRegistry, false, conductor, convertorManager); statisticsManager.setDeviceInitializationPhaseHandler(deviceInitializationPhaseHandler); - when(deviceManager.getDeviceContextFromNodeId(Mockito.any())).thenReturn(mockedDeviceContext); - when(conductor.getDeviceContext(Mockito.any())).thenReturn(mockedDeviceContext); + when(conductor.getDeviceContext(deviceInfo)).thenReturn(mockedDeviceContext); } @Test @@ -202,32 +208,32 @@ public class StatisticsManagerImplTest { .commitEntry(Matchers.anyLong(), Matchers.any(), Matchers.>any()); statisticsManager.setDeviceInitializationPhaseHandler(mockedDevicePhaseHandler); - statisticsManager.onDeviceContextLevelUp(mockedDeviceContext.getDeviceState().getNodeId()); - verify(mockedDevicePhaseHandler).onDeviceContextLevelUp(mockedDeviceContext.getDeviceState().getNodeId()); + statisticsManager.onDeviceContextLevelUp(deviceInfo, lifecycleService); + verify(mockedDevicePhaseHandler).onDeviceContextLevelUp(deviceInfo, lifecycleService); } @Test public void testOnDeviceContextClosed() throws Exception { final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - final Map contextsMap = getContextsMap(statisticsManager); + final Map contextsMap = getContextsMap(statisticsManager); - contextsMap.put(mockedDeviceContext.getDeviceState().getNodeId(), statisticContext); + contextsMap.put(deviceInfo, statisticContext); Assert.assertEquals(1, contextsMap.size()); statisticsManager.setDeviceTerminationPhaseHandler(mockedTerminationPhaseHandler); - statisticsManager.onDeviceContextLevelDown(mockedDeviceContext); + statisticsManager.onDeviceContextLevelDown(deviceInfo); verify(statisticContext).close(); - verify(mockedTerminationPhaseHandler).onDeviceContextLevelDown(mockedDeviceContext); + verify(mockedTerminationPhaseHandler).onDeviceContextLevelDown(deviceInfo); Assert.assertEquals(0, contextsMap.size()); } - private static Map getContextsMap(final StatisticsManagerImpl statisticsManager) + private static Map getContextsMap(final StatisticsManagerImpl statisticsManager) throws NoSuchFieldException, IllegalAccessException { // HACK: contexts map for testing shall be accessed in some more civilized way final Field contextsField = StatisticsManagerImpl.class.getDeclaredField("contexts"); Assert.assertNotNull(contextsField); contextsField.setAccessible(true); - return (Map) contextsField.get(statisticsManager); + return (Map) contextsField.get(statisticsManager); } @Test @@ -247,13 +253,12 @@ public class StatisticsManagerImplTest { @Test public void testChangeStatisticsWorkMode1() throws Exception { final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - when(statisticContext.getDeviceContext()).thenReturn(mockedDeviceContext); when(statisticContext.getPollTimeout()).thenReturn( - Optional.absent()); + Optional.empty()); when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( Collections.emptyList()); - getContextsMap(statisticsManager).put(mockedDeviceContext.getDeviceState().getNodeId(), statisticContext); + getContextsMap(statisticsManager).put(deviceInfo, statisticContext); final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = new ChangeStatisticsWorkModeInputBuilder() @@ -267,7 +272,7 @@ public class StatisticsManagerImplTest { Mockito.verify(statisticContext).getPollTimeout(); } - private static void checkWorkModeChangeOutcome(Future> workMode) throws InterruptedException, java.util.concurrent.ExecutionException { + private static void checkWorkModeChangeOutcome(Future> workMode) throws InterruptedException, ExecutionException { Assert.assertTrue(workMode.isDone()); Assert.assertTrue(workMode.get().isSuccessful()); } @@ -283,13 +288,12 @@ 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.getDeviceContext()).thenReturn(mockedDeviceContext); when(statisticContext.getPollTimeout()).thenReturn( Optional.of(pollTimeout)); when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( Collections.singletonList(itemLifecycleSource)); - getContextsMap(statisticsManager).put(mockedDeviceContext.getDeviceState().getNodeId(), statisticContext); + getContextsMap(statisticsManager).put(deviceInfo, statisticContext); final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = new ChangeStatisticsWorkModeInputBuilder() @@ -318,7 +322,6 @@ public class StatisticsManagerImplTest { .setItemLifecycleListener(itemLifeCycleListenerCapt.capture()); final StatisticsContext statisticContext = Mockito.mock(StatisticsContext.class); - when(statisticContext.getDeviceContext()).thenReturn(mockedDeviceContext); when(statisticContext.getPollTimeout()).thenReturn( Optional.of(pollTimeout)); when(statisticContext.getItemLifeCycleListener()).thenReturn( @@ -326,7 +329,7 @@ public class StatisticsManagerImplTest { when(itemLifeCycleRegistry.getLifeCycleSources()).thenReturn( Collections.singletonList(itemLifecycleSource)); - getContextsMap(statisticsManager).put(mockedDeviceContext.getDeviceState().getNodeId(), statisticContext); + getContextsMap(statisticsManager).put(deviceInfo, statisticContext); final ChangeStatisticsWorkModeInputBuilder changeStatisticsWorkModeInputBld = new ChangeStatisticsWorkModeInputBuilder() @@ -361,7 +364,7 @@ public class StatisticsManagerImplTest { @Test public void testCalculateTimerDelay() throws Exception { final TimeCounter timeCounter = Mockito.mock(TimeCounter.class); - when(timeCounter.getAverageTimeBetweenMarks()).thenReturn((Long)2000L, (Long)4000L); + when(timeCounter.getAverageTimeBetweenMarks()).thenReturn(2000L, (Long)4000L); statisticsManager.calculateTimerDelay(timeCounter); Assert.assertEquals(3000L, StatisticsManagerImpl.getCurrentTimerDelay()); @@ -374,25 +377,22 @@ public class StatisticsManagerImplTest { final StatisticsContext statisticsContext = Mockito.mock(StatisticsContext.class); final TimeCounter mockTimerCounter = Mockito.mock(TimeCounter.class); - statisticsManager.pollStatistics(mockedDeviceContext, statisticsContext, mockTimerCounter); + statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); verify(mockedDeviceContext).getDeviceState(); - when(mockedDeviceContext.getDeviceState().isValid()).thenReturn(true); - statisticsManager.pollStatistics(mockedDeviceContext, statisticsContext, mockTimerCounter); - // TODO Make scheduleNextPolling visible for tests? + statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); when(mockedDeviceContext.getDeviceState().isStatisticsPollingEnabled()).thenReturn(true); - statisticsManager.pollStatistics(mockedDeviceContext, statisticsContext, mockTimerCounter); - // TODO Make scheduleNextPolling visible for tests? + statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); when(statisticsContext.gatherDynamicData()).thenReturn(Futures.immediateCheckedFuture(Boolean.TRUE)); when(statisticsContext.isSchedulingEnabled()).thenReturn(Boolean.TRUE); - statisticsManager.pollStatistics(mockedDeviceContext, statisticsContext, mockTimerCounter); + statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); Mockito.verify(mockTimerCounter).markStart(); Mockito.verify(mockTimerCounter).addTimeMark(); when(statisticsContext.gatherDynamicData()).thenReturn(Futures.immediateFailedFuture(new Throwable("error msg"))); - statisticsManager.pollStatistics(mockedDeviceContext, statisticsContext, mockTimerCounter); + statisticsManager.pollStatistics(mockedDeviceContext.getDeviceState(), statisticsContext, mockTimerCounter, mockedDeviceInfo); Mockito.verify(mockTimerCounter,times(2)).addTimeMark(); } -} \ No newline at end of file +}