Merge "Bug 5936 - DeviceFlowRegistry flowId bug"
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / statistics / services / OpendaylightMeterStatisticsServiceImplTest.java
index 7ab278e3fd5babf3d8d0e5065589598803acbdc2..0952a01dc9543ea21de3f59e6d97cc74e41e5f9c 100644 (file)
@@ -9,15 +9,18 @@
 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;
@@ -27,42 +30,80 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.
 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());
 
@@ -74,12 +115,11 @@ public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsSer
 
     @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());
 
@@ -91,12 +131,24 @@ public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsSer
 
     @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());
 
@@ -108,13 +160,12 @@ public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsSer
 
     @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());
 
@@ -123,4 +174,28 @@ public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsSer
         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