package org.opendaylight.openflowplugin.impl.statistics.services;
import com.google.common.util.concurrent.FutureCallback;
+import java.math.BigInteger;
+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.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.openflowplugin.api.OFConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
+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.MultipartReplyMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfigCaseBuilder;
+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.multipart.reply.meter._case.MultipartReplyMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.MultipartReplyMeterConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder;
+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.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
/**
* Test for {@link OpendaylightMeterStatisticsServiceImpl}
*/
-public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsServiceTest {
+public class OpendaylightMeterStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
+ private static final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId METER_ID = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId(123L);
@Captor
private ArgumentCaptor<MultipartRequestInput> requestInput;
- private RequestContext<Object> rqContext;
-
private OpendaylightMeterStatisticsServiceImpl meterStatisticsService;
public void setUp() {
- meterStatisticsService = new OpendaylightMeterStatisticsServiceImpl(rqContextStack, deviceContext);
-
- rqContext = new AbstractRequestContext<Object>(42L) {
- @Override
- public void close() {
- //NOOP
- }
- };
- Mockito.when(rqContextStack.<Object>createRequestContext()).thenReturn(rqContext);
- }
+ meterStatisticsService = new OpendaylightMeterStatisticsServiceImpl(rqContextStack, deviceContext,
+ new AtomicLong(), notificationPublishService);
- @Test
- public void testGetAllMeterConfigStatistics() throws Exception {
Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
.commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ Mockito.verify(notificationPublishService).offerNotification(Matchers.<Notification>any());
+ }
+ @Test
+ public void testGetAllMeterConfigStatistics() throws Exception {
GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder()
.setNode(createNodeRef("unitProt:123"));
+ rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
+ new MultipartReplyMessageBuilder()
+ .setVersion(OFConstants.OFP_VERSION_1_3)
+ .setMultipartReplyBody(new MultipartReplyMeterConfigCaseBuilder()
+ .setMultipartReplyMeterConfig(new MultipartReplyMeterConfigBuilder()
+ .setMeterConfig(Collections.singletonList(new MeterConfigBuilder()
+ .setFlags(new MeterFlags(true, false, false, false))
+ .setMeterId(METER_ID)
+ .setBands(Collections.singletonList(new BandsBuilder()
+ .setMeterBand(new MeterBandDropCaseBuilder()
+ .setMeterBandDrop(new MeterBandDropBuilder()
+ .setBurstSize(61L)
+ .setRate(62L)
+ .setType(MeterBandType.OFPMBTDROP)
+ .build())
+ .build())
+ .build()))
+ .build()))
+ .build())
+ .build())
+ .build()
+ )).build();
+
final Future<RpcResult<GetAllMeterConfigStatisticsOutput>> resultFuture
= meterStatisticsService.getAllMeterConfigStatistics(input.build());
@Test
public void testGetAllMeterStatistics() throws Exception {
- Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
- .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
-
GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder()
.setNode(createNodeRef("unitProt:123"));
+ rpcResult = buildMeterStatisticsReply();
+
final Future<RpcResult<GetAllMeterStatisticsOutput>> resultFuture
= meterStatisticsService.getAllMeterStatistics(input.build());
@Test
public void testGetMeterFeatures() throws Exception {
- Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
- .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
-
GetMeterFeaturesInputBuilder input = new GetMeterFeaturesInputBuilder()
.setNode(createNodeRef("unitProt:123"));
+ rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
+ new MultipartReplyMessageBuilder()
+ .setVersion(OFConstants.OFP_VERSION_1_3)
+ .setMultipartReplyBody(new MultipartReplyMeterFeaturesCaseBuilder()
+ .setMultipartReplyMeterFeatures(new MultipartReplyMeterFeaturesBuilder()
+ .setBandTypes(new MeterBandTypeBitmap(true, false))
+ .setCapabilities(new MeterFlags(true, false, false, false))
+ .setMaxBands((short) 71)
+ .setMaxColor((short) 72)
+ .setMaxMeter(73L)
+ .build())
+ .build())
+ .build()
+ )).build();
+
final Future<RpcResult<GetMeterFeaturesOutput>> resultFuture
= meterStatisticsService.getMeterFeatures(input.build());
@Test
public void testGetMeterStatistics() throws Exception {
- Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
- .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
-
GetMeterStatisticsInputBuilder input = new GetMeterStatisticsInputBuilder()
.setNode(createNodeRef("unitProt:123"))
.setMeterId(new MeterId(21L));
+ rpcResult = buildMeterStatisticsReply();
+
final Future<RpcResult<GetMeterStatisticsOutput>> resultFuture
= meterStatisticsService.getMeterStatistics(input.build());
Assert.assertTrue(rpcResult.isSuccessful());
Assert.assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
}
+
+ protected RpcResult<Object> buildMeterStatisticsReply() {
+ return RpcResultBuilder.<Object>success(Collections.singletonList(
+ new MultipartReplyMessageBuilder()
+ .setVersion(OFConstants.OFP_VERSION_1_3)
+ .setMultipartReplyBody(new MultipartReplyMeterCaseBuilder()
+ .setMultipartReplyMeter(new MultipartReplyMeterBuilder()
+ .setMeterStats(Collections.singletonList(new MeterStatsBuilder()
+ .setMeterId(METER_ID)
+ .setByteInCount(BigInteger.valueOf(81L))
+ .setDurationSec(82L)
+ .setDurationNsec(83L)
+ .setFlowCount(84L)
+ .setPacketInCount(BigInteger.valueOf(85L))
+ .setMeterBandStats(Collections.singletonList(new MeterBandStatsBuilder()
+ .setByteBandCount(BigInteger.valueOf(86L))
+ .setPacketBandCount(BigInteger.valueOf(87L))
+ .build()))
+ .build()))
+ .build())
+ .build())
+ .build()
+ )).build();
+ }
}
\ No newline at end of file