Decompose RPC implementation classes
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / statistics / services / OpendaylightMeterStatisticsServiceImplTest.java
index 7ab278e3fd5babf3d8d0e5065589598803acbdc2..0c2ef404b639b96b02be3a8a8ab88d8e5d845126 100644 (file)
  * 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.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.verify;
+
 import com.google.common.util.concurrent.FutureCallback;
-import java.util.concurrent.Future;
-import org.junit.Assert;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+import org.junit.After;
 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.ConvertorManagerFactory;
 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.GetAllMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesOutput;
 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.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
 
 /**
- * Test for {@link OpendaylightMeterStatisticsServiceImpl}
+ * Test for {@link OpendaylightMeterStatisticsServiceImpl}.
  */
-public class OpendaylightMeterStatisticsServiceImplTest extends AbstractStatsServiceTest {
-
+@Deprecated
+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(Uint32.valueOf(123));
     @Captor
     private ArgumentCaptor<MultipartRequestInput> requestInput;
 
-    private RequestContext<Object> rqContext;
-
-    private OpendaylightMeterStatisticsServiceImpl meterStatisticsService;
+    private GetAllMeterStatisticsImpl getAllMeterStatistics;
+    private GetMeterStatisticsImpl getMeterStatistics;
+    private GetAllMeterConfigStatisticsImpl getAllMeterConfigStatistics;
+    private GetMeterFeaturesImpl getMeterFeatures;
 
+    @Override
     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);
+        final var xid = new AtomicLong();
+        final var convertorManager = ConvertorManagerFactory.createDefaultManager();
+
+        getAllMeterStatistics = new GetAllMeterStatisticsImpl(rqContextStack, deviceContext, xid,
+            notificationPublishService, convertorManager);
+        getMeterStatistics = new GetMeterStatisticsImpl(rqContextStack, deviceContext, xid,
+            notificationPublishService, convertorManager);
+        getAllMeterConfigStatistics = new GetAllMeterConfigStatisticsImpl(rqContextStack, deviceContext, xid,
+            notificationPublishService, convertorManager);
+        getMeterFeatures = new GetMeterFeaturesImpl(rqContextStack, deviceContext, xid,
+            notificationPublishService, convertorManager);
+
+        doAnswer(answerVoidToCallback).when(outboundQueueProvider)
+                .commitEntry(eq(Uint32.valueOf(42)), requestInput.capture(), any(FutureCallback.class));
+    }
+
+    @After
+    public void tearDown() {
+        verify(notificationPublishService).offerNotification(ArgumentMatchers.any());
     }
 
     @Test
     public void testGetAllMeterConfigStatistics() throws Exception {
-        Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
-                .commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
-
         GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder()
                 .setNode(createNodeRef("unitProt:123"));
 
-        final Future<RpcResult<GetAllMeterConfigStatisticsOutput>> resultFuture
-                = meterStatisticsService.getAllMeterConfigStatistics(input.build());
-
-        Assert.assertTrue(resultFuture.isDone());
-        final RpcResult<GetAllMeterConfigStatisticsOutput> rpcResult = resultFuture.get();
-        Assert.assertTrue(rpcResult.isSuccessful());
-        Assert.assertEquals(MultipartType.OFPMPMETERCONFIG, requestInput.getValue().getType());
+        rpcResult = RpcResultBuilder.<Object>success(List.of(
+                new MultipartReplyMessageBuilder()
+                        .setVersion(EncodeConstants.OF_VERSION_1_3)
+                        .setMultipartReplyBody(new MultipartReplyMeterConfigCaseBuilder()
+                                .setMultipartReplyMeterConfig(new MultipartReplyMeterConfigBuilder()
+                                        .setMeterConfig(List.of(new MeterConfigBuilder()
+                                                .setFlags(new MeterFlags(true, false, false, false))
+                                                .setMeterId(METER_ID)
+                                                .setBands(List.of(new BandsBuilder()
+                                                        .setMeterBand(new MeterBandDropCaseBuilder()
+                                                                .setMeterBandDrop(new MeterBandDropBuilder()
+                                                                        .setBurstSize(Uint32.valueOf(61))
+                                                                        .setRate(Uint32.valueOf(62))
+                                                                        .setType(MeterBandType.OFPMBTDROP)
+                                                                        .build())
+                                                                .build())
+                                                        .build()))
+                                                .build()))
+                                        .build())
+                                .build())
+                        .build()
+        )).build();
+
+        final var resultFuture = getAllMeterConfigStatistics.invoke(input.build());
+
+        assertTrue(resultFuture.isDone());
+        final var rpcResult = resultFuture.get();
+        assertTrue(rpcResult.isSuccessful());
+        assertEquals(MultipartType.OFPMPMETERCONFIG, requestInput.getValue().getType());
     }
 
     @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"));
 
-        final Future<RpcResult<GetAllMeterStatisticsOutput>> resultFuture
-                = meterStatisticsService.getAllMeterStatistics(input.build());
+        rpcResult = buildMeterStatisticsReply();
+
+        final var resultFuture = getAllMeterStatistics.invoke(input.build());
 
-        Assert.assertTrue(resultFuture.isDone());
-        final RpcResult<GetAllMeterStatisticsOutput> rpcResult = resultFuture.get();
-        Assert.assertTrue(rpcResult.isSuccessful());
-        Assert.assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
+        assertTrue(resultFuture.isDone());
+        final var rpcResult = resultFuture.get();
+        assertTrue(rpcResult.isSuccessful());
+        assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
     }
 
     @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"));
 
-        final Future<RpcResult<GetMeterFeaturesOutput>> resultFuture
-                = meterStatisticsService.getMeterFeatures(input.build());
-
-        Assert.assertTrue(resultFuture.isDone());
-        final RpcResult<GetMeterFeaturesOutput> rpcResult = resultFuture.get();
-        Assert.assertTrue(rpcResult.isSuccessful());
-        Assert.assertEquals(MultipartType.OFPMPMETERFEATURES, requestInput.getValue().getType());
+        rpcResult = RpcResultBuilder.<Object>success(List.of(
+                new MultipartReplyMessageBuilder()
+                        .setVersion(EncodeConstants.OF_VERSION_1_3)
+                        .setMultipartReplyBody(new MultipartReplyMeterFeaturesCaseBuilder()
+                                .setMultipartReplyMeterFeatures(new MultipartReplyMeterFeaturesBuilder()
+                                        .setBandTypes(new MeterBandTypeBitmap(true, false))
+                                        .setCapabilities(new MeterFlags(true, false, false, false))
+                                        .setMaxBands(Uint8.valueOf(71))
+                                        .setMaxColor(Uint8.valueOf(72))
+                                        .setMaxMeter(Uint32.valueOf(73))
+                                        .build())
+                                .build())
+                        .build()
+        )).build();
+
+        final var resultFuture = getMeterFeatures.invoke(input.build());
+
+        assertTrue(resultFuture.isDone());
+        final var rpcResult = resultFuture.get();
+        assertTrue(rpcResult.isSuccessful());
+        assertEquals(MultipartType.OFPMPMETERFEATURES, requestInput.getValue().getType());
     }
 
     @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));
+                .setMeterId(new MeterId(Uint32.valueOf(21)));
+
+        rpcResult = buildMeterStatisticsReply();
 
-        final Future<RpcResult<GetMeterStatisticsOutput>> resultFuture
-                = meterStatisticsService.getMeterStatistics(input.build());
+        final var resultFuture = getMeterStatistics.invoke(input.build());
+
+        assertTrue(resultFuture.isDone());
+        final var rpcResult = resultFuture.get();
+        assertTrue(rpcResult.isSuccessful());
+        assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
+    }
 
-        Assert.assertTrue(resultFuture.isDone());
-        final RpcResult<GetMeterStatisticsOutput> rpcResult = resultFuture.get();
-        Assert.assertTrue(rpcResult.isSuccessful());
-        Assert.assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
+    protected RpcResult<Object> buildMeterStatisticsReply() {
+        return RpcResultBuilder.<Object>success(List.of(
+                new MultipartReplyMessageBuilder()
+                        .setVersion(EncodeConstants.OF_VERSION_1_3)
+                        .setMultipartReplyBody(new MultipartReplyMeterCaseBuilder()
+                                .setMultipartReplyMeter(new MultipartReplyMeterBuilder()
+                                        .setMeterStats(List.of(new MeterStatsBuilder()
+                                                .setMeterId(METER_ID)
+                                                .setByteInCount(Uint64.valueOf(81))
+                                                .setDurationSec(Uint32.valueOf(82))
+                                                .setDurationNsec(Uint32.valueOf(83))
+                                                .setFlowCount(Uint32.valueOf(84))
+                                                .setPacketInCount(Uint64.valueOf(85))
+                                                .setMeterBandStats(List.of(new MeterBandStatsBuilder()
+                                                        .setByteBandCount(Uint64.valueOf(86))
+                                                        .setPacketBandCount(Uint64.valueOf(87))
+                                                        .build()))
+                                                .build()))
+                                        .build())
+                                .build())
+                        .build()
+        )).build();
     }
 }
\ No newline at end of file