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