X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fdevice%2FDeviceContextImplTest.java;h=6b2e76408ad10ad15667bb05246b6ea739fd140c;hb=0e1f602f7118e6dd7c7e53da1320c8e58d5cace4;hp=0aed926c01e29f12234b9e4d6a1437ba38559a63;hpb=99946e4e9980bfaa7fa16e4a178919252b346d96;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java index 0aed926c01..6b2e76408a 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java @@ -10,9 +10,9 @@ package org.opendaylight.openflowplugin.impl.device; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -25,15 +25,11 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import io.netty.util.HashedWheelTimer; -import io.netty.util.Timeout; import java.math.BigInteger; -import java.net.InetSocketAddress; import java.util.concurrent.atomic.AtomicLong; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.InOrder; -import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; @@ -42,7 +38,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.binding.api.ReadTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; @@ -52,30 +48,26 @@ import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext import org.opendaylight.openflowplugin.api.openflow.connection.OutboundQueueProvider; 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.MessageTranslator; import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary; import org.opendaylight.openflowplugin.api.openflow.device.Xid; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceTerminationPhaseHandler; -import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleConductor; import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey; import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry; import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowDescriptor; import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowRegistryKey; import org.opendaylight.openflowplugin.api.openflow.registry.group.DeviceGroupRegistry; import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry; -import org.opendaylight.openflowplugin.api.openflow.rpc.ItemLifeCycleSource; -import org.opendaylight.openflowplugin.api.openflow.rpc.listener.ItemLifecycleListener; -import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency; import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy; +import org.opendaylight.openflowplugin.common.txchain.TransactionChainManager; import org.opendaylight.openflowplugin.extension.api.ConvertorMessageFromOFJava; import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider; +import org.opendaylight.openflowplugin.impl.device.initialization.AbstractDeviceInitializer; +import org.opendaylight.openflowplugin.impl.device.initialization.DeviceInitializerProvider; import org.opendaylight.openflowplugin.impl.registry.flow.FlowDescriptorFactory; import org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory; import org.opendaylight.openflowplugin.impl.util.DeviceStateUtil; -import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.message.service.rev151020.ExperimenterMessageFromDev; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; @@ -87,6 +79,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.ta import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowRemovedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; 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; @@ -97,6 +90,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessageBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessageBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncReply; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput; @@ -108,10 +102,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived; -import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.SalRoleService; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -125,69 +119,67 @@ public class DeviceContextImplTest { private static final Long DUMMY_XID = 544L; private static final Long DUMMY_PORT_NUMBER = 159L; private static final BigInteger DUMMY_DATAPATH_ID = new BigInteger("55"); - Xid xid; - Xid xidMulti; + private Xid xid; + private Xid xidMulti; - DeviceContext deviceContext; + private DeviceContext deviceContext; @Mock - TransactionChainManager txChainManager; + private RequestContext requestContext; @Mock - RequestContext requestContext; + private RequestContext requestContextMultiReply; @Mock - RequestContext requestContextMultiReply; + private ConnectionContext connectionContext; @Mock - ConnectionContext connectionContext; + private GetFeaturesOutput featuresOutput; @Mock - DeviceState deviceState; + private DataBroker dataBroker; @Mock - GetFeaturesOutput featuresOutput; + private ReadWriteTransaction writeTx; @Mock - DataBroker dataBroker; + private ReadOnlyTransaction readTx; @Mock - WriteTransaction wTx; + private BindingTransactionChain txChainFactory; @Mock - ReadOnlyTransaction rTx; + private HashedWheelTimer timer; @Mock - BindingTransactionChain txChainFactory; + private OutboundQueueProvider outboundQueueProvider; @Mock - HashedWheelTimer timer; + private ConnectionAdapter connectionAdapter; + private NodeId nodeId = new NodeId("h2g2:42"); + private KeyedInstanceIdentifier nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId); @Mock - MessageIntelligenceAgency messageIntelligenceAgency; + private TranslatorLibrary translatorLibrary; @Mock - OutboundQueueProvider outboundQueueProvider; - @Mock - ConnectionAdapter connectionAdapter; - NodeId nodeId = new NodeId("h2g2:42"); - KeyedInstanceIdentifier nodeKeyIdent = DeviceStateUtil.createNodeInstanceIdentifier(nodeId); + MessageTranslator messageTranslatorPacketReceived; @Mock - TranslatorLibrary translatorLibrary; + private MessageTranslator messageTranslatorFlowCapableNodeConnector; @Mock - Registration registration; + private MessageTranslator messageTranslatorFlowRemoved; @Mock - MessageTranslator messageTranslatorPacketReceived; + private DeviceInfo deviceInfo; @Mock - MessageTranslator messageTranslatorFlowCapableNodeConnector; + private ConvertorExecutor convertorExecutor; @Mock - private MessageTranslator messageTranslatorFlowRemoved; + private MessageSpy messageSpy; @Mock - private LifecycleConductor lifecycleConductor; + private DeviceInitializerProvider deviceInitializerProvider; @Mock - private DeviceInfo deviceInfo; + private AbstractDeviceInitializer abstractDeviceInitializer; @Mock - private DeviceManager deviceManager; - - private InOrder inOrderDevState; + private SalRoleService salRoleService; private final AtomicLong atomicLong = new AtomicLong(0); private DeviceContext deviceContextSpy; @Before - public void setUp() throws Exception{ - final CheckedFuture, ReadFailedException> noExistNodeFuture = Futures.immediateCheckedFuture(Optional.absent()); - Mockito.when(rTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture); - Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx); - Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))).thenReturn(txChainFactory); + public void setUp() throws Exception { + final CheckedFuture, ReadFailedException> noExistNodeFuture = + Futures.immediateCheckedFuture(Optional.absent()); + Mockito.when(readTx.read(LogicalDatastoreType.OPERATIONAL, nodeKeyIdent)).thenReturn(noExistNodeFuture); + Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(readTx); + Mockito.when(dataBroker.createTransactionChain(Mockito.any(TransactionChainManager.class))) + .thenReturn(txChainFactory); Mockito.when(deviceInfo.getNodeInstanceIdentifier()).thenReturn(nodeKeyIdent); Mockito.when(deviceInfo.getNodeId()).thenReturn(nodeId); Mockito.when(deviceInfo.getDatapathId()).thenReturn(BigInteger.ONE); @@ -204,8 +196,8 @@ public class DeviceContextImplTest { settableFutureMultiReply.set((RpcResult) invocation.getArguments()[0]); return null; }).when(requestContextMultiReply).setResult(any(RpcResult.class)); - Mockito.when(txChainFactory.newWriteOnlyTransaction()).thenReturn(wTx); - Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx); + Mockito.when(txChainFactory.newReadWriteTransaction()).thenReturn(writeTx); + Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(readTx); Mockito.when(connectionContext.getOutboundQueueProvider()).thenReturn(outboundQueueProvider); Mockito.when(connectionContext.getConnectionAdapter()).thenReturn(connectionAdapter); Mockito.when(connectionContext.getDeviceInfo()).thenReturn(deviceInfo); @@ -216,95 +208,70 @@ public class DeviceContextImplTest { Mockito.when(deviceInfo.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3); Mockito.when(featuresOutput.getDatapathId()).thenReturn(DUMMY_DATAPATH_ID); Mockito.when(featuresOutput.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3); - Mockito.when(messageTranslatorPacketReceived.translate(any(Object.class), any(DeviceInfo.class), any(Object.class))).thenReturn(mock(PacketReceived.class)); - Mockito.when(messageTranslatorFlowCapableNodeConnector.translate(any(Object.class), any(DeviceInfo.class), any(Object.class))).thenReturn(mock(FlowCapableNodeConnector.class)); - Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, PacketIn.class.getName())))).thenReturn(messageTranslatorPacketReceived); - Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, PortGrouping.class.getName())))).thenReturn(messageTranslatorFlowCapableNodeConnector); + + final PacketReceived packetReceived = new PacketReceivedBuilder() + .setMatch(new org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received + .MatchBuilder() + .setInPort(new NodeConnectorId("openflow:1:LOCAL")) + .build()) + .build(); + + Mockito.when(messageTranslatorPacketReceived.translate(any(Object.class), any(DeviceInfo.class), + any(Object.class))).thenReturn(packetReceived); + Mockito.when(messageTranslatorFlowCapableNodeConnector.translate(any(Object.class), any(DeviceInfo.class), + any(Object.class))).thenReturn(mock(FlowCapableNodeConnector.class)); + Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, + PacketIn.class.getName())))).thenReturn(messageTranslatorPacketReceived); Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, - org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemoved.class.getName())))) - .thenReturn(messageTranslatorFlowRemoved); - Mockito.when(lifecycleConductor.getMessageIntelligenceAgency()).thenReturn(messageIntelligenceAgency); + PortGrouping.class.getName())))).thenReturn(messageTranslatorFlowCapableNodeConnector); + Mockito.when(translatorLibrary.lookupTranslator(eq(new TranslatorKey(OFConstants.OFP_VERSION_1_3, + FlowRemoved.class.getName())))).thenReturn(messageTranslatorFlowRemoved); - deviceContext = new DeviceContextImpl(connectionContext, deviceState, dataBroker, lifecycleConductor, outboundQueueProvider, translatorLibrary, deviceManager); - deviceContextSpy = Mockito.spy(deviceContext); + Mockito.when(abstractDeviceInitializer.initialize(any(), anyBoolean(), anyBoolean(), any(), any())) + .thenReturn(Futures.immediateFuture(null)); - xid = new Xid(atomicLong.incrementAndGet()); - xidMulti = new Xid(atomicLong.incrementAndGet()); + final java.util.Optional deviceInitializer = java.util.Optional + .of(this.abstractDeviceInitializer); - Mockito.doNothing().when(deviceContextSpy).writeToTransaction(Mockito.any(), Mockito.any(), any()); - } + Mockito.when(deviceInitializerProvider.lookup(OFConstants.OFP_VERSION_1_3)).thenReturn(deviceInitializer); + Mockito.when(salRoleService.setRole(any())).thenReturn(Futures.immediateFuture(null)); - @Test(expected = NullPointerException.class) - public void testDeviceContextImplConstructorNullDataBroker() throws Exception { - new DeviceContextImpl(connectionContext, deviceState, null, lifecycleConductor, outboundQueueProvider, translatorLibrary, deviceManager).close(); - } + deviceContext = new DeviceContextImpl( + connectionContext, + dataBroker, + messageSpy, + translatorLibrary, + convertorExecutor, + false, timer, false, + deviceInitializerProvider, + true, false); - @Test(expected = NullPointerException.class) - public void testDeviceContextImplConstructorNullDeviceState() throws Exception { - new DeviceContextImpl(connectionContext, null, dataBroker, lifecycleConductor, outboundQueueProvider, translatorLibrary, deviceManager).close(); - } + ((DeviceContextImpl) deviceContext).lazyTransactionManagerInitialization(); + deviceContextSpy = Mockito.spy(deviceContext); - @Test(expected = NullPointerException.class) - public void testDeviceContextImplConstructorNullTimer() throws Exception { - new DeviceContextImpl(null, deviceState, dataBroker, lifecycleConductor, outboundQueueProvider, translatorLibrary, deviceManager).close(); - } + xid = new Xid(atomicLong.incrementAndGet()); + xidMulti = new Xid(atomicLong.incrementAndGet()); + + Mockito.doNothing().when(deviceContextSpy).writeToTransaction(any(), any(), any()); - @Test - public void testGetDeviceState() { - final DeviceState deviceSt = deviceContext.getDeviceState(); - assertNotNull(deviceSt); - assertEquals(deviceState, deviceSt); } @Test public void testGetReadTransaction() { final ReadTransaction readTx = deviceContext.getReadTransaction(); assertNotNull(readTx); - assertEquals(rTx, readTx); + assertEquals(this.readTx, readTx); } - /** - * @throws Exception - */ @Test public void testInitialSubmitTransaction() throws Exception { - Mockito.when(wTx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); + Mockito.when(writeTx.submit()).thenReturn(Futures.immediateCheckedFuture(null)); final InstanceIdentifier dummyII = InstanceIdentifier.create(Nodes.class); ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ; - ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit(); + ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction(); deviceContext.addDeleteToTxChain(LogicalDatastoreType.CONFIGURATION, dummyII); - ((DeviceContextImpl) deviceContext).initialSubmitTransaction(); - verify(wTx).submit(); - } - - @Test - public void testGetReservedXid() { - deviceContext.reserveXidForDeviceMessage(); - verify(outboundQueueProvider).reserveEntry(); - } - - @Test - public void testAuxiliaryConnectionContext() { - final ConnectionContext mockedConnectionContext = addDummyAuxiliaryConnectionContext(); - final ConnectionContext pickedConnectiobContexts = deviceContext.getAuxiliaryConnectiobContexts(DUMMY_COOKIE); - assertEquals(mockedConnectionContext, pickedConnectiobContexts); - } - @Test - public void testRemoveAuxiliaryConnectionContext() { - final ConnectionContext mockedConnectionContext = addDummyAuxiliaryConnectionContext(); - - final ConnectionAdapter mockedAuxConnectionAdapter = mock(ConnectionAdapter.class); - when(mockedConnectionContext.getConnectionAdapter()).thenReturn(mockedAuxConnectionAdapter); - - assertNotNull(deviceContext.getAuxiliaryConnectiobContexts(DUMMY_COOKIE)); - deviceContext.removeAuxiliaryConnectionContext(mockedConnectionContext); - assertNull(deviceContext.getAuxiliaryConnectiobContexts(DUMMY_COOKIE)); - } - - private ConnectionContext addDummyAuxiliaryConnectionContext() { - final ConnectionContext mockedConnectionContext = prepareConnectionContext(); - deviceContext.addAuxiliaryConnectionContext(mockedConnectionContext); - return mockedConnectionContext; + deviceContext.initialSubmitTransaction(); + verify(writeTx).submit(); } private ConnectionContext prepareConnectionContext() { @@ -315,25 +282,19 @@ public class DeviceContextImplTest { return mockedConnectionContext; } - /** - * @throws Exception - */ @Test - public void testAddDeleteToTxChain() throws Exception{ + public void testAddDeleteToTxChain() throws Exception { final InstanceIdentifier dummyII = InstanceIdentifier.create(Nodes.class); ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ; - ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit(); + ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction(); deviceContext.addDeleteToTxChain(LogicalDatastoreType.CONFIGURATION, dummyII); - verify(wTx).delete(eq(LogicalDatastoreType.CONFIGURATION), eq(dummyII)); + verify(writeTx).delete(eq(LogicalDatastoreType.CONFIGURATION), eq(dummyII)); } - /** - * @throws Exception - */ @Test public void testSubmitTransaction() throws Exception { ((DeviceContextImpl) deviceContext).getTransactionChainManager().activateTransactionManager() ; - ((DeviceContextImpl) deviceContext).getTransactionChainManager().enableSubmit(); + ((DeviceContextImpl) deviceContext).getTransactionChainManager().initialSubmitWriteTransaction(); assertTrue(deviceContext.submitTransaction()); } @@ -365,30 +326,37 @@ public class DeviceContextImplTest { public void testProcessReply() { final Error mockedError = mock(Error.class); deviceContext.processReply(mockedError); - verify(messageIntelligenceAgency).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_FAILURE)); final OfHeader mockedOfHeader = mock(OfHeader.class); deviceContext.processReply(mockedOfHeader); - verify(messageIntelligenceAgency).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS)); } @Test public void testProcessReply2() { - final MultipartReply mockedMultipartReply = mock(MultipartReply.class); final Xid dummyXid = new Xid(DUMMY_XID); + + final Error mockedError = mock(Error.class); + deviceContext.processReply(dummyXid, Lists.newArrayList(mockedError)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_FAILURE)); + + final MultipartReply mockedMultipartReply = mock(MultipartReply.class); deviceContext.processReply(dummyXid, Lists.newArrayList(mockedMultipartReply)); - verify(messageIntelligenceAgency).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS)); } @Test public void testProcessPacketInMessageFutureSuccess() { final PacketInMessage mockedPacketInMessage = mock(PacketInMessage.class); final NotificationPublishService mockedNotificationPublishService = mock(NotificationPublishService.class); - final ListenableFuture stringListenableFuture = Futures.immediateFuture(new String("dummy value")); + final ListenableFuture stringListenableFuture = Futures.immediateFuture("dummy value"); - when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class))).thenReturn(stringListenableFuture); + when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class))) + .thenReturn(stringListenableFuture); deviceContext.setNotificationPublishService(mockedNotificationPublishService); deviceContext.processPacketInMessage(mockedPacketInMessage); - verify(messageIntelligenceAgency).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH)); + verify(messageSpy).spyMessage(any(Class.class), eq(MessageSpy.StatisticsGroup.FROM_SWITCH_PUBLISHED_SUCCESS)); } @Test @@ -400,7 +368,8 @@ public class DeviceContextImplTest { when(mockedNotificationPublishService.offerNotification(any(PacketReceived.class))).thenReturn(dummyFuture); deviceContext.setNotificationPublishService(mockedNotificationPublishService); deviceContext.processPacketInMessage(mockedPacketInMessage); - verify(messageIntelligenceAgency).spyMessage(any(Class.class), eq(MessageSpy.STATISTIC_GROUP.FROM_SWITCH_NOTIFICATION_REJECTED)); + verify(messageSpy).spyMessage(any(Class.class), + eq(MessageSpy.StatisticsGroup.FROM_SWITCH_NOTIFICATION_REJECTED)); } @Test @@ -409,55 +378,23 @@ public class DeviceContextImplTest { assertEquals(translatorLibrary, pickedTranslatorLibrary); } - @Test - public void testShutdownConnection() { - final ConnectionAdapter mockedConnectionAdapter = mock(ConnectionAdapter.class); - final InetSocketAddress mockRemoteAddress = InetSocketAddress.createUnresolved("odl-unit.example.org",999); - when(mockedConnectionAdapter.getRemoteAddress()).thenReturn(mockRemoteAddress); - when(connectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter); - - final NodeId dummyNodeId = new NodeId("dummyNodeId"); - when(deviceInfo.getNodeId()).thenReturn(dummyNodeId); - - final ConnectionContext mockedAuxiliaryConnectionContext = prepareConnectionContext(); - deviceContext.addAuxiliaryConnectionContext(mockedAuxiliaryConnectionContext); - final DeviceTerminationPhaseHandler mockedDeviceContextClosedHandler = mock(DeviceTerminationPhaseHandler.class); - when(deviceState.isValid()).thenReturn(true); - deviceContext.shutdownConnection(); - verify(connectionContext).closeConnection(true); - } - - @Test - public void testBarrierFieldSetGet() { - final Timeout mockedTimeout = mock(Timeout.class); - deviceContext.setCurrentBarrierTimeout(mockedTimeout); - final Timeout pickedBarrierTimeout = deviceContext.getBarrierTaskTimeout(); - assertEquals(mockedTimeout, pickedBarrierTimeout); - } - @Test public void testGetMessageSpy() { final MessageSpy pickedMessageSpy = deviceContext.getMessageSpy(); - assertEquals(messageIntelligenceAgency, pickedMessageSpy); + assertEquals(messageSpy, pickedMessageSpy); } @Test public void testOnPublished() { - final ConnectionContext auxiliaryConnectionContext = addDummyAuxiliaryConnectionContext(); - - final ConnectionAdapter mockedAuxConnectionAdapter = mock(ConnectionAdapter.class); - when(auxiliaryConnectionContext.getConnectionAdapter()).thenReturn(mockedAuxConnectionAdapter); - final ConnectionAdapter mockedConnectionAdapter = mock(ConnectionAdapter.class); when(connectionContext.getConnectionAdapter()).thenReturn(mockedConnectionAdapter); deviceContext.onPublished(); - verify(mockedAuxConnectionAdapter).setPacketInFiltering(eq(false)); verify(mockedConnectionAdapter).setPacketInFiltering(eq(false)); } @Test - public void testPortStatusMessage() throws Exception{ + public void testPortStatusMessage() throws Exception { final PortStatusMessage mockedPortStatusMessage = mock(PortStatusMessage.class); final Class dummyClass = Class.class; when(mockedPortStatusMessage.getImplementedInterface()).thenReturn(dummyClass); @@ -470,10 +407,8 @@ public class DeviceContextImplTest { when(mockedPortStatusMessage.getReason()).thenReturn(PortReason.OFPPRADD); when(mockedPortStatusMessage.getPortNo()).thenReturn(42L); - OpenflowPortsUtil.init(); deviceContextSpy.processPortStatusMessage(mockedPortStatusMessage); - verify(deviceContextSpy).writeToTransaction(Mockito.any(), Mockito.any(), any()); - verify(deviceContextSpy).submitTransaction(); + verify(messageSpy).spyMessage(any(), any()); } @Test @@ -486,19 +421,15 @@ public class DeviceContextImplTest { .setMatch(new MatchBuilder().build()); final NotificationPublishService mockedNotificationPublishService = mock(NotificationPublishService.class); - Mockito.when(messageTranslatorFlowRemoved.translate(any(Object.class), any(DeviceInfo.class), any(Object.class))) + Mockito.when(messageTranslatorFlowRemoved + .translate(any(Object.class), any(DeviceInfo.class), any(Object.class))) .thenReturn(flowRemovedMdsalBld.build()); // insert flow+flowId into local registry - final FlowRegistryKey flowRegKey = FlowRegistryKeyFactory.create(flowRemovedMdsalBld.build()); + final FlowRegistryKey flowRegKey = + FlowRegistryKeyFactory.create(deviceInfo.getVersion(), flowRemovedMdsalBld.build()); final FlowDescriptor flowDescriptor = FlowDescriptorFactory.create((short) 0, new FlowId("ut-ofp:f456")); - deviceContext.getDeviceFlowRegistry().store(flowRegKey, flowDescriptor); - - // plug in lifecycleListener - final ItemLifecycleListener itemLifecycleListener = Mockito.mock(ItemLifecycleListener.class); - for (final ItemLifeCycleSource lifeCycleSource : deviceContext.getItemLifeCycleSourceRegistry().getLifeCycleSources()) { - lifeCycleSource.setItemLifecycleListener(itemLifecycleListener); - } + deviceContext.getDeviceFlowRegistry().storeDescriptor(flowRegKey, flowDescriptor); // prepare empty input message final FlowRemovedMessageBuilder flowRemovedBld = new FlowRemovedMessageBuilder(); @@ -509,25 +440,16 @@ public class DeviceContextImplTest { .child(Table.class, new TableKey((short) 0)) .child(Flow.class, new FlowKey(new FlowId("ut-ofp:f456"))); - Mockito.when(deviceManager.getIsNotificationFlowRemovedOff()).thenReturn(true); - deviceContext.setNotificationPublishService(mockedNotificationPublishService); deviceContext.processFlowRemovedMessage(flowRemovedBld.build()); - - Mockito.verify(itemLifecycleListener).onRemoved(flowToBeRemovedPath); - Mockito.verify(mockedNotificationPublishService, Mockito.never()).offerNotification(Matchers.any(Notification.class)); - - Mockito.when(deviceManager.getIsNotificationFlowRemovedOff()).thenReturn(false); - deviceContext.processFlowRemovedMessage(flowRemovedBld.build()); - - Mockito.verify(mockedNotificationPublishService).offerNotification(Matchers.any(Notification.class)); } @Test public void testProcessExperimenterMessage() { final ConvertorMessageFromOFJava mockedMessageConverter = mock(ConvertorMessageFromOFJava.class); final ExtensionConverterProvider mockedExtensionConverterProvider = mock(ExtensionConverterProvider.class); - when(mockedExtensionConverterProvider.getMessageConverter(any(MessageTypeKey.class))).thenReturn(mockedMessageConverter); + when(mockedExtensionConverterProvider.getMessageConverter(any(MessageTypeKey.class))) + .thenReturn(mockedMessageConverter); final ExperimenterDataOfChoice mockedExperimenterDataOfChoice = mock(ExperimenterDataOfChoice.class); final ExperimenterMessage experimenterMessage = new ExperimenterMessageBuilder() @@ -543,12 +465,18 @@ public class DeviceContextImplTest { } @Test - public void testOnDeviceDisconnected() throws Exception { - final DeviceTerminationPhaseHandler deviceContextClosedHandler = mock(DeviceTerminationPhaseHandler.class); + public void instantiateServiceInstance() throws Exception { + deviceContext.instantiateServiceInstance(); + } - assertEquals(0, deviceContext.getDeviceFlowRegistry().getAllFlowDescriptors().size()); - assertEquals(0, deviceContext.getDeviceGroupRegistry().getAllGroupIds().size()); - assertEquals(0, deviceContext.getDeviceMeterRegistry().getAllMeterIds().size()); + @Test + public void close() throws Exception { + deviceContext.close(); + } + @Test + public void closeServiceInstance() throws Exception { + deviceContext.closeServiceInstance(); } + }