X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2Fservices%2FOpendaylightGroupStatisticsServiceImplTest.java;h=0d61ba0d01732e663eb9e5790285279c65ccd94f;hb=73776c548ab153dee35ca4165ca0ef2413969704;hp=0102ad7e1dabe9f2118a1cdc0317dbe604e50c90;hpb=18d57f1aee64c8afdcd97016f2db00e889e051fb;p=openflowplugin.git diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/OpendaylightGroupStatisticsServiceImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/OpendaylightGroupStatisticsServiceImplTest.java index 0102ad7e1d..0d61ba0d01 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/OpendaylightGroupStatisticsServiceImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/OpendaylightGroupStatisticsServiceImplTest.java @@ -5,19 +5,25 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.openflowplugin.impl.statistics.services; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; + import com.google.common.util.concurrent.FutureCallback; +import java.util.Collections; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicLong; +import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatchers; import org.mockito.Captor; -import org.mockito.Matchers; import org.mockito.Mockito; -import org.opendaylight.openflowplugin.api.openflow.device.RequestContext; -import org.opendaylight.openflowplugin.impl.rpc.AbstractRequestContext; +import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; +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.group.statistics.rev131111.GetAllGroupStatisticsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionInputBuilder; @@ -27,59 +33,98 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111. import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId; +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.GroupCapabilities; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType; +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.MultipartType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber; +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.buckets.grouping.BucketsListBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder; +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.multipart.reply.group._case.MultipartReplyGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDescBuilder; +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.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; /** - * Test for {@link OpendaylightGroupStatisticsServiceImpl} + * Test for {@link OpendaylightGroupStatisticsServiceImpl}. */ -public class OpendaylightGroupStatisticsServiceImplTest extends AbstractStatsServiceTest { +public class OpendaylightGroupStatisticsServiceImplTest extends AbstractSingleStatsServiceTest { + private static final org.opendaylight.yang.gen.v1.urn + .opendaylight.openflow.common.types.rev130731.GroupId GROUP_ID = new org.opendaylight.yang.gen.v1.urn + .opendaylight.openflow.common.types.rev130731.GroupId(Uint32.valueOf(123)); @Captor private ArgumentCaptor requestInput; - private RequestContext rqContext; - private OpendaylightGroupStatisticsServiceImpl groupStatisticsService; + @Override public void setUp() { - groupStatisticsService = new OpendaylightGroupStatisticsServiceImpl(rqContextStack, deviceContext); - - rqContext = new AbstractRequestContext(42L) { - @Override - public void close() { - //NOOP - } - }; - Mockito.when(rqContextStack.createRequestContext()).thenReturn(rqContext); + final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager(); + groupStatisticsService = new OpendaylightGroupStatisticsServiceImpl(rqContextStack, deviceContext, + new AtomicLong(), notificationPublishService, convertorManager); + + Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider) + .commitEntry(eq(Uint32.valueOf(42)), requestInput.capture(), any(FutureCallback.class)); + } + + @After + public void tearDown() { + Mockito.verify(notificationPublishService).offerNotification(ArgumentMatchers.any()); } @Test public void testGetAllGroupStatistics() throws Exception { - Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider) - .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class)); - GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder() .setNode(createNodeRef("unitProt:123")); + rpcResult = buildGroupStatsResponse(); + final Future> resultFuture = groupStatisticsService.getAllGroupStatistics(input.build()); Assert.assertTrue(resultFuture.isDone()); - final RpcResult rpcResult = resultFuture.get(); - Assert.assertTrue(rpcResult.isSuccessful()); + final RpcResult rpcResultCompatible = resultFuture.get(); + Assert.assertTrue(rpcResultCompatible.isSuccessful()); Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType()); } @Test public void testGetGroupDescription() throws Exception { - Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider) - .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class)); - GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder() .setNode(createNodeRef("unitProt:123")); + rpcResult = RpcResultBuilder.success(Collections.singletonList( + new MultipartReplyMessageBuilder() + .setVersion(EncodeConstants.OF_VERSION_1_3) + .setMultipartReplyBody(new MultipartReplyGroupDescCaseBuilder() + .setMultipartReplyGroupDesc(new MultipartReplyGroupDescBuilder() + .setGroupDesc(Collections.singletonList(new GroupDescBuilder() + .setGroupId(GROUP_ID) + .setBucketsList(Collections.singletonList(new BucketsListBuilder() + .setWatchGroup(Uint32.valueOf(51)) + .setWatchPort(new PortNumber(Uint32.valueOf(52))) + .setWeight(Uint16.valueOf(53)) + .build())) + .setType(GroupType.OFPGTALL) + .build())) + .build()) + .build()) + .build() + )).build(); + final Future> resultFuture = groupStatisticsService.getGroupDescription(input.build()); @@ -91,12 +136,25 @@ public class OpendaylightGroupStatisticsServiceImplTest extends AbstractStatsSer @Test public void testGetGroupFeatures() throws Exception { - Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider) - .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class)); - GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder() .setNode(createNodeRef("unitProt:123")); + rpcResult = RpcResultBuilder.success(Collections.singletonList( + new MultipartReplyMessageBuilder() + .setVersion(EncodeConstants.OF_VERSION_1_3) + .setMultipartReplyBody(new MultipartReplyGroupFeaturesCaseBuilder() + .setMultipartReplyGroupFeatures(new MultipartReplyGroupFeaturesBuilder() + .setActionsBitmap(Collections.singletonList(new ActionType(true, + false, false, false, false, false, false, false, false, false, false, + false, false, false, false, false, false))) + .setCapabilities(new GroupCapabilities(true, false, false, false)) + .setTypes(new GroupTypes(true, false, false, false)) + .setMaxGroups(Collections.singletonList(Uint32.valueOf(5L))) + .build()) + .build()) + .build() + )).build(); + final Future> resultFuture = groupStatisticsService.getGroupFeatures(input.build()); @@ -108,12 +166,11 @@ public class OpendaylightGroupStatisticsServiceImplTest extends AbstractStatsSer @Test public void testGetGroupStatistics() throws Exception { - Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider) - .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class)); - GetGroupStatisticsInputBuilder input = new GetGroupStatisticsInputBuilder() .setNode(createNodeRef("unitProt:123")) - .setGroupId(new GroupId(21L)); + .setGroupId(new GroupId(Uint32.valueOf(21))); + + rpcResult = buildGroupStatsResponse(); final Future> resultFuture = groupStatisticsService.getGroupStatistics(input.build()); @@ -123,4 +180,28 @@ public class OpendaylightGroupStatisticsServiceImplTest extends AbstractStatsSer Assert.assertTrue(rpcResult.isSuccessful()); Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType()); } + + private static RpcResult buildGroupStatsResponse() { + return RpcResultBuilder.success(Collections.singletonList( + new MultipartReplyMessageBuilder() + .setVersion(EncodeConstants.OF_VERSION_1_3) + .setMultipartReplyBody(new MultipartReplyGroupCaseBuilder() + .setMultipartReplyGroup(new MultipartReplyGroupBuilder() + .setGroupStats(Collections.singletonList(new GroupStatsBuilder() + .setByteCount(Uint64.valueOf(21)) + .setPacketCount(Uint64.valueOf(22)) + .setRefCount(Uint32.valueOf(23)) + .setDurationSec(Uint32.valueOf(24)) + .setDurationNsec(Uint32.valueOf(25)) + .setGroupId(GROUP_ID) + .setBucketStats(Collections.singletonList(new BucketStatsBuilder() + .setByteCount(Uint64.valueOf(26)) + .setPacketCount(Uint64.valueOf(27)) + .build())) + .build())) + .build()) + .build()) + .build() + )).build(); + } } \ No newline at end of file