Decompose RPC implementation classes
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / statistics / services / OpendaylightMeterStatisticsServiceImplTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.openflowplugin.impl.statistics.services;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.ArgumentMatchers.any;
13 import static org.mockito.ArgumentMatchers.eq;
14 import static org.mockito.Mockito.doAnswer;
15 import static org.mockito.Mockito.verify;
16
17 import com.google.common.util.concurrent.FutureCallback;
18 import java.util.List;
19 import java.util.concurrent.atomic.AtomicLong;
20 import org.junit.After;
21 import org.junit.Test;
22 import org.mockito.ArgumentCaptor;
23 import org.mockito.ArgumentMatchers;
24 import org.mockito.Captor;
25 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
26 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInputBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterStatisticsInputBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterFeaturesInputBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetMeterStatisticsInputBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfigCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeterBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStatsBuilder;
45 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;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.MultipartReplyMeterConfigBuilder;
47 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;
48 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;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeaturesBuilder;
50 import org.opendaylight.yangtools.yang.common.RpcResult;
51 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
52 import org.opendaylight.yangtools.yang.common.Uint32;
53 import org.opendaylight.yangtools.yang.common.Uint64;
54 import org.opendaylight.yangtools.yang.common.Uint8;
55
56 /**
57  * Test for {@link OpendaylightMeterStatisticsServiceImpl}.
58  */
59 @Deprecated
60 public class OpendaylightMeterStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
61     private static final org.opendaylight.yang.gen.v1.urn
62                 .opendaylight.openflow.common.types.rev130731.MeterId METER_ID = new org.opendaylight.yang.gen.v1.urn
63                     .opendaylight.openflow.common.types.rev130731.MeterId(Uint32.valueOf(123));
64     @Captor
65     private ArgumentCaptor<MultipartRequestInput> requestInput;
66
67     private GetAllMeterStatisticsImpl getAllMeterStatistics;
68     private GetMeterStatisticsImpl getMeterStatistics;
69     private GetAllMeterConfigStatisticsImpl getAllMeterConfigStatistics;
70     private GetMeterFeaturesImpl getMeterFeatures;
71
72     @Override
73     public void setUp() {
74         final var xid = new AtomicLong();
75         final var convertorManager = ConvertorManagerFactory.createDefaultManager();
76
77         getAllMeterStatistics = new GetAllMeterStatisticsImpl(rqContextStack, deviceContext, xid,
78             notificationPublishService, convertorManager);
79         getMeterStatistics = new GetMeterStatisticsImpl(rqContextStack, deviceContext, xid,
80             notificationPublishService, convertorManager);
81         getAllMeterConfigStatistics = new GetAllMeterConfigStatisticsImpl(rqContextStack, deviceContext, xid,
82             notificationPublishService, convertorManager);
83         getMeterFeatures = new GetMeterFeaturesImpl(rqContextStack, deviceContext, xid,
84             notificationPublishService, convertorManager);
85
86         doAnswer(answerVoidToCallback).when(outboundQueueProvider)
87                 .commitEntry(eq(Uint32.valueOf(42)), requestInput.capture(), any(FutureCallback.class));
88     }
89
90     @After
91     public void tearDown() {
92         verify(notificationPublishService).offerNotification(ArgumentMatchers.any());
93     }
94
95     @Test
96     public void testGetAllMeterConfigStatistics() throws Exception {
97         GetAllMeterConfigStatisticsInputBuilder input = new GetAllMeterConfigStatisticsInputBuilder()
98                 .setNode(createNodeRef("unitProt:123"));
99
100         rpcResult = RpcResultBuilder.<Object>success(List.of(
101                 new MultipartReplyMessageBuilder()
102                         .setVersion(EncodeConstants.OF_VERSION_1_3)
103                         .setMultipartReplyBody(new MultipartReplyMeterConfigCaseBuilder()
104                                 .setMultipartReplyMeterConfig(new MultipartReplyMeterConfigBuilder()
105                                         .setMeterConfig(List.of(new MeterConfigBuilder()
106                                                 .setFlags(new MeterFlags(true, false, false, false))
107                                                 .setMeterId(METER_ID)
108                                                 .setBands(List.of(new BandsBuilder()
109                                                         .setMeterBand(new MeterBandDropCaseBuilder()
110                                                                 .setMeterBandDrop(new MeterBandDropBuilder()
111                                                                         .setBurstSize(Uint32.valueOf(61))
112                                                                         .setRate(Uint32.valueOf(62))
113                                                                         .setType(MeterBandType.OFPMBTDROP)
114                                                                         .build())
115                                                                 .build())
116                                                         .build()))
117                                                 .build()))
118                                         .build())
119                                 .build())
120                         .build()
121         )).build();
122
123         final var resultFuture = getAllMeterConfigStatistics.invoke(input.build());
124
125         assertTrue(resultFuture.isDone());
126         final var rpcResult = resultFuture.get();
127         assertTrue(rpcResult.isSuccessful());
128         assertEquals(MultipartType.OFPMPMETERCONFIG, requestInput.getValue().getType());
129     }
130
131     @Test
132     public void testGetAllMeterStatistics() throws Exception {
133         GetAllMeterStatisticsInputBuilder input = new GetAllMeterStatisticsInputBuilder()
134                 .setNode(createNodeRef("unitProt:123"));
135
136         rpcResult = buildMeterStatisticsReply();
137
138         final var resultFuture = getAllMeterStatistics.invoke(input.build());
139
140         assertTrue(resultFuture.isDone());
141         final var rpcResult = resultFuture.get();
142         assertTrue(rpcResult.isSuccessful());
143         assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
144     }
145
146     @Test
147     public void testGetMeterFeatures() throws Exception {
148         GetMeterFeaturesInputBuilder input = new GetMeterFeaturesInputBuilder()
149                 .setNode(createNodeRef("unitProt:123"));
150
151         rpcResult = RpcResultBuilder.<Object>success(List.of(
152                 new MultipartReplyMessageBuilder()
153                         .setVersion(EncodeConstants.OF_VERSION_1_3)
154                         .setMultipartReplyBody(new MultipartReplyMeterFeaturesCaseBuilder()
155                                 .setMultipartReplyMeterFeatures(new MultipartReplyMeterFeaturesBuilder()
156                                         .setBandTypes(new MeterBandTypeBitmap(true, false))
157                                         .setCapabilities(new MeterFlags(true, false, false, false))
158                                         .setMaxBands(Uint8.valueOf(71))
159                                         .setMaxColor(Uint8.valueOf(72))
160                                         .setMaxMeter(Uint32.valueOf(73))
161                                         .build())
162                                 .build())
163                         .build()
164         )).build();
165
166         final var resultFuture = getMeterFeatures.invoke(input.build());
167
168         assertTrue(resultFuture.isDone());
169         final var rpcResult = resultFuture.get();
170         assertTrue(rpcResult.isSuccessful());
171         assertEquals(MultipartType.OFPMPMETERFEATURES, requestInput.getValue().getType());
172     }
173
174     @Test
175     public void testGetMeterStatistics() throws Exception {
176         GetMeterStatisticsInputBuilder input = new GetMeterStatisticsInputBuilder()
177                 .setNode(createNodeRef("unitProt:123"))
178                 .setMeterId(new MeterId(Uint32.valueOf(21)));
179
180         rpcResult = buildMeterStatisticsReply();
181
182         final var resultFuture = getMeterStatistics.invoke(input.build());
183
184         assertTrue(resultFuture.isDone());
185         final var rpcResult = resultFuture.get();
186         assertTrue(rpcResult.isSuccessful());
187         assertEquals(MultipartType.OFPMPMETER, requestInput.getValue().getType());
188     }
189
190     protected RpcResult<Object> buildMeterStatisticsReply() {
191         return RpcResultBuilder.<Object>success(List.of(
192                 new MultipartReplyMessageBuilder()
193                         .setVersion(EncodeConstants.OF_VERSION_1_3)
194                         .setMultipartReplyBody(new MultipartReplyMeterCaseBuilder()
195                                 .setMultipartReplyMeter(new MultipartReplyMeterBuilder()
196                                         .setMeterStats(List.of(new MeterStatsBuilder()
197                                                 .setMeterId(METER_ID)
198                                                 .setByteInCount(Uint64.valueOf(81))
199                                                 .setDurationSec(Uint32.valueOf(82))
200                                                 .setDurationNsec(Uint32.valueOf(83))
201                                                 .setFlowCount(Uint32.valueOf(84))
202                                                 .setPacketInCount(Uint64.valueOf(85))
203                                                 .setMeterBandStats(List.of(new MeterBandStatsBuilder()
204                                                         .setByteBandCount(Uint64.valueOf(86))
205                                                         .setPacketBandCount(Uint64.valueOf(87))
206                                                         .build()))
207                                                 .build()))
208                                         .build())
209                                 .build())
210                         .build()
211         )).build();
212     }
213 }