X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fdevice%2FDeviceManagerImplTest.java;h=e2d969712dd62e96415d917e10ecaf799316ce64;hb=e95099b3217d7c3d7a09a5700026dbc561597121;hp=6d862ae943c19239e1068addd7775b76abdcf470;hpb=7495093cdf6e375a9e6451c6a213808d9677dbae;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java index 6d862ae943..e2d969712d 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceManagerImplTest.java @@ -13,25 +13,18 @@ package org.opendaylight.openflowplugin.impl.device; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.common.collect.Lists; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.FutureCallback; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import java.lang.reflect.Field; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; -import java.util.List; import java.util.Set; + +import com.google.common.util.concurrent.CheckedFuture; +import com.google.common.util.concurrent.FutureCallback; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -46,7 +39,6 @@ import org.mockito.stubbing.Answer; import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; @@ -64,54 +56,19 @@ import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitia import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey; import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageIntelligenceAgency; import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.NodeGroupFeatures; 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.node.NodeConnector; 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.meter.statistics.rev131111.NodeMeterFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Capabilities; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.CapabilitiesV10; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType; 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.MultipartReplyMessage; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder; 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.openflow.protocol.rev130731.features.reply.PhyPortBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortDescCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableFeaturesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDescBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeaturesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.MultipartReplyPortDescBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.PortsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeaturesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features.TableFeatures; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features.TableFeaturesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.OfpRole; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.opendaylight.yangtools.yang.common.RpcError; -import org.opendaylight.yangtools.yang.common.RpcResult; -import org.opendaylight.yangtools.yang.common.RpcResultBuilder; @RunWith(MockitoJUnitRunner.class) public class DeviceManagerImplTest { @@ -226,8 +183,6 @@ public class DeviceManagerImplTest { order.verify(mockConnectionContext).setOutboundQueueHandleRegistration( Mockito.>any()); order.verify(mockConnectionContext).getNodeId(); - order.verify(mockConnectionContext).setDeviceDisconnectedHandler(any(DeviceContext.class)); - Mockito.verify(deviceInitPhaseHandler).onDeviceContextLevelUp(Matchers.any()); } @@ -253,8 +208,6 @@ public class DeviceManagerImplTest { order.verify(mockConnectionContext).setOutboundQueueHandleRegistration( Mockito.>any()); order.verify(mockConnectionContext).getNodeId(); - order.verify(mockConnectionContext).setDeviceDisconnectedHandler(any(DeviceContext.class)); - Mockito.verify(deviceInitPhaseHandler).onDeviceContextLevelUp(Matchers.any()); } @@ -290,169 +243,6 @@ public class DeviceManagerImplTest { deviceManager.setTranslatorLibrary(translatorLibrary); } - @Test - public void chainTableTrunkWriteOF10Test() { - DeviceState mockedDeviceState = mock(DeviceState.class); - - GetFeaturesOutput mockedFeatures = mock(GetFeaturesOutput.class); - when(mockedFeatures.getTables()).thenReturn((short) 2); - when(mockedDeviceState.getFeatures()).thenReturn(mockedFeatures); - - when(mockedDeviceState.getNodeInstanceIdentifier()).thenReturn(DUMMY_NODE_II); - when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); - - RpcResult> mockedRpcResult = mock(RpcResult.class); - when(mockedRpcResult.isSuccessful()).thenReturn(true); - List>> data = new ArrayList>>(); - data.add(mockedRpcResult); - data.add(mockedRpcResult); - - DeviceManagerImpl.chainTableTrunkWriteOF10(mockedDeviceContext, Futures.immediateFuture(data)); - verify(mockedDeviceContext, times(3)) - .writeToTransaction(any(LogicalDatastoreType.class), any(InstanceIdentifier.class), any(FlowCapableNode.class)); - } - - @Test - public void testTranslateAndWriteReplyTypeDesc() { - final ConnectionContext connectionContext = buildMockConnectionContext(OFConstants.OFP_VERSION_1_3); - Mockito.when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(connectionContext); - DeviceState deviceState = Mockito.mock(DeviceState.class); - Mockito.when(mockedDeviceContext.getDeviceState()).thenReturn(deviceState); - - Collection multipartReplyMessages = prepareDataforTypeDesc(mockedDeviceContext); - - DeviceManagerImpl.translateAndWriteReply(MultipartType.OFPMPDESC, mockedDeviceContext, DUMMY_NODE_II, multipartReplyMessages); - verify(mockedDeviceContext) - .writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), eq(DUMMY_NODE_II.augmentation(FlowCapableNode.class)), any(FlowCapableNode.class)); - } - - private Collection prepareDataforTypeDesc(final DeviceContext mockedDeviceContext) { - MultipartReplyDesc multipartReplyDesc = new MultipartReplyDescBuilder().build(); - - MultipartReplyDescCaseBuilder multipartReplyDescCaseBuilder = new MultipartReplyDescCaseBuilder(); - multipartReplyDescCaseBuilder.setMultipartReplyDesc(multipartReplyDesc); - - MultipartReplyMessage multipartReplyMessage = new MultipartReplyMessageBuilder().setMultipartReplyBody(multipartReplyDescCaseBuilder.build()).build(); - return Collections.singleton(multipartReplyMessage); - - } - - @Test - public void translateAndWriteReplyTypeTableFeatures() { - TableFeaturesBuilder tableFeature = new TableFeaturesBuilder(); - tableFeature.setTableId(DUMMY_TABLE_ID); - List tableFeatures = new ArrayList<>(); - tableFeatures.add(tableFeature.build()); - - MultipartReplyTableFeatures multipartReplyTableFeatures = new MultipartReplyTableFeaturesBuilder().setTableFeatures(tableFeatures).build(); - MultipartReplyTableFeaturesCaseBuilder multipartReplyTableFeaturesCaseBuilder = new MultipartReplyTableFeaturesCaseBuilder(); - multipartReplyTableFeaturesCaseBuilder.setMultipartReplyTableFeatures(multipartReplyTableFeatures); - - MultipartReplyMessage multipartReplyMessage = new MultipartReplyMessageBuilder().setMultipartReplyBody(multipartReplyTableFeaturesCaseBuilder.build()).build(); - Set multipartReplyMessages = Collections.singleton(multipartReplyMessage); - DeviceManagerImpl.translateAndWriteReply(MultipartType.OFPMPTABLEFEATURES, mockedDeviceContext, DUMMY_NODE_II, multipartReplyMessages); - verify(mockedDeviceContext) - .writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), - eq(DUMMY_NODE_II.augmentation(FlowCapableNode.class).child(Table.class, new TableKey(DUMMY_TABLE_ID))), any(Table.class)); - - } - - @Test - public void translateAndWriteReplyTypeMeterFeatures() { - DeviceState mockedDeviceState = mock(DeviceState.class); - when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); - - MultipartReplyMeterFeaturesBuilder multipartReplyMeterFeaturesBuilder = new MultipartReplyMeterFeaturesBuilder(); - multipartReplyMeterFeaturesBuilder.setBandTypes(new MeterBandTypeBitmap(true, true)); - multipartReplyMeterFeaturesBuilder.setCapabilities(new MeterFlags(true, true, true, true)); - multipartReplyMeterFeaturesBuilder.setMaxMeter(DUMMY_MAX_METER); - - MultipartReplyMeterFeaturesCaseBuilder multipartReplyMeterFeaturesCaseBuilder = new MultipartReplyMeterFeaturesCaseBuilder(); - multipartReplyMeterFeaturesCaseBuilder.setMultipartReplyMeterFeatures(multipartReplyMeterFeaturesBuilder.build()); - - MultipartReplyMessage multipartReplyMessage = new MultipartReplyMessageBuilder().setMultipartReplyBody(multipartReplyMeterFeaturesCaseBuilder.build()).build(); - Set multipartReplyMessages = Collections.singleton(multipartReplyMessage); - DeviceManagerImpl.translateAndWriteReply(MultipartType.OFPMPMETERFEATURES, mockedDeviceContext, DUMMY_NODE_II, multipartReplyMessages); - verify(mockedDeviceContext) - .writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), eq(DUMMY_NODE_II.augmentation(NodeMeterFeatures.class)), any(NodeMeterFeatures.class)); - verify(mockedDeviceState).setMeterAvailable(eq(true)); - } - - @Test - public void translateAndWriteReplyTypeGroupFeatures() { - MultipartReplyGroupFeaturesBuilder multipartReplyGroupFeaturesBuilder = new MultipartReplyGroupFeaturesBuilder(); - multipartReplyGroupFeaturesBuilder.setTypes(new GroupTypes(true, true, true, true)); - multipartReplyGroupFeaturesBuilder.setCapabilities(new GroupCapabilities(true, true, true, true)); - ActionType actionType = new ActionType(true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true); - multipartReplyGroupFeaturesBuilder.setActionsBitmap(Lists.newArrayList(actionType)); - - MultipartReplyGroupFeatures multipartReplyGroupFeatures = multipartReplyGroupFeaturesBuilder.build(); - - MultipartReplyGroupFeaturesCaseBuilder multipartReplyGroupFeaturesCaseBuilder = new MultipartReplyGroupFeaturesCaseBuilder(); - multipartReplyGroupFeaturesCaseBuilder.setMultipartReplyGroupFeatures(multipartReplyGroupFeatures); - - MultipartReplyMessage multipartReplyMessage = new MultipartReplyMessageBuilder().setMultipartReplyBody(multipartReplyGroupFeaturesCaseBuilder.build()).build(); - Set multipartReplyMessages = Collections.singleton(multipartReplyMessage); - - DeviceManagerImpl.translateAndWriteReply(MultipartType.OFPMPGROUPFEATURES, mockedDeviceContext, DUMMY_NODE_II, multipartReplyMessages); - verify(mockedDeviceContext) - .writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), eq(DUMMY_NODE_II.augmentation(NodeGroupFeatures.class)), any(NodeGroupFeatures.class)); - } - - - @Test - public void translateAndWriteReplyTypePortDesc() { - ConnectionContext mockedPrimaryConnectionContext = mock(ConnectionContext.class); - FeaturesReply mockedFeatures = mock(FeaturesReply.class); - when(mockedFeatures.getDatapathId()).thenReturn(new BigInteger(DUMMY_DATAPATH_ID)); - when(mockedPrimaryConnectionContext.getFeatures()).thenReturn(mockedFeatures); - when(mockedDeviceContext.getPrimaryConnectionContext()).thenReturn(mockedPrimaryConnectionContext); - DeviceState mockedDeviceState = mock(DeviceState.class); - when(mockedDeviceState.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_0); - when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); - MessageTranslator mockedTranslator = mock(MessageTranslator.class); - when(translatorLibrary.lookupTranslator(any(TranslatorKey.class))).thenReturn(mockedTranslator); - when(mockedDeviceContext.oook()).thenReturn(translatorLibrary); - - MultipartReplyPortDescBuilder multipartReplyPortDescBuilder = new MultipartReplyPortDescBuilder(); - - PortsBuilder portsBuilder = new PortsBuilder(); - portsBuilder.setPortNo(DUMMY_PORT_NUMBER); - - multipartReplyPortDescBuilder.setPorts(Lists.newArrayList(portsBuilder.build())); - - MultipartReplyPortDescCaseBuilder multipartReplyPortDescCaseBuilder = new MultipartReplyPortDescCaseBuilder(); - multipartReplyPortDescCaseBuilder.setMultipartReplyPortDesc(multipartReplyPortDescBuilder.build()); - - MultipartReplyMessage multipartReplyMessage = new MultipartReplyMessageBuilder().setMultipartReplyBody(multipartReplyPortDescCaseBuilder.build()).build(); - Set multipartReplyMessages = Collections.singleton(multipartReplyMessage); - - OpenflowPortsUtil.init(); - DeviceManagerImpl.translateAndWriteReply(MultipartType.OFPMPPORTDESC, mockedDeviceContext, DUMMY_NODE_II, multipartReplyMessages); - verify(mockedDeviceContext) - .writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), any(InstanceIdentifier.class), any(NodeConnector.class)); - } - - @Test - public void createSuccessProcessingCallbackTest() { - DeviceState mockedDeviceState = mock(DeviceState.class); - when(mockedDeviceContext.getDeviceState()).thenReturn(mockedDeviceState); - - final ConnectionContext connectionContext = buildMockConnectionContext(OFConstants.OFP_VERSION_1_3); - - List multipartReplies = new ArrayList<>(prepareDataforTypeDesc(mockedDeviceContext)); - RpcResult> result = RpcResultBuilder.>success(multipartReplies).build(); - ListenableFuture>> mockedRequestContextFuture = Futures.immediateFuture(result); - - DeviceManagerImpl.createSuccessProcessingCallback(MultipartType.OFPMPDESC, mockedDeviceContext, DUMMY_NODE_II, mockedRequestContextFuture); - verify(mockedDeviceContext).writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), eq(DUMMY_NODE_II.augmentation(FlowCapableNode.class)), any(FlowCapableNode.class)); - - RpcResult> rpcResult = RpcResultBuilder.>failed().withError(RpcError.ErrorType.PROTOCOL, "dummy error").build(); - mockedRequestContextFuture = Futures.immediateFuture(rpcResult); - DeviceManagerImpl.createSuccessProcessingCallback(MultipartType.OFPMPDESC, mockedDeviceContext, DUMMY_NODE_II, mockedRequestContextFuture); - verify(mockedDeviceContext).writeToTransaction(eq(LogicalDatastoreType.OPERATIONAL), eq(DUMMY_NODE_II.augmentation(FlowCapableNode.class)), any(FlowCapableNode.class)); - } - @Test public void testClose() throws Exception { DeviceContext deviceContext = Mockito.mock(DeviceContext.class);