Remove redundant type specifiers
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / statistics / services / OpendaylightGroupStatisticsServiceImplTest.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
9 package org.opendaylight.openflowplugin.impl.statistics.services;
10
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.ArgumentMatchers.eq;
13
14 import com.google.common.util.concurrent.FutureCallback;
15 import java.math.BigInteger;
16 import java.util.Collections;
17 import java.util.concurrent.Future;
18 import java.util.concurrent.atomic.AtomicLong;
19 import org.junit.After;
20 import org.junit.Assert;
21 import org.junit.Test;
22 import org.mockito.ArgumentCaptor;
23 import org.mockito.ArgumentMatchers;
24 import org.mockito.Captor;
25 import org.mockito.Mockito;
26 import org.opendaylight.openflowplugin.api.OFConstants;
27 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
28 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsInputBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsOutput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionInputBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionOutput;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesInputBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesOutput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsOutput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroupBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStatsBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDescBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder;
56 import org.opendaylight.yangtools.yang.common.RpcResult;
57 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
58
59 /**
60  * Test for {@link OpendaylightGroupStatisticsServiceImpl}.
61  */
62 public class OpendaylightGroupStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
63
64     private static final org.opendaylight.yang.gen.v1.urn
65             .opendaylight.openflow.common.types.rev130731.GroupId GROUP_ID =
66             new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId(123L);
67     @Captor
68     private ArgumentCaptor<MultipartRequestInput> requestInput;
69
70     private OpendaylightGroupStatisticsServiceImpl groupStatisticsService;
71
72     public void setUp() {
73         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
74         groupStatisticsService = new OpendaylightGroupStatisticsServiceImpl(rqContextStack, deviceContext,
75                 new AtomicLong(), notificationPublishService, convertorManager);
76
77         Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
78                 .commitEntry(eq(42L), requestInput.capture(), any(FutureCallback.class));
79     }
80
81     @After
82     public void tearDown() throws Exception {
83         Mockito.verify(notificationPublishService).offerNotification(ArgumentMatchers.any());
84     }
85
86     @Test
87     public void testGetAllGroupStatistics() throws Exception {
88         GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder()
89                 .setNode(createNodeRef("unitProt:123"));
90
91         rpcResult = buildGroupStatsResponse();
92
93         final Future<RpcResult<GetAllGroupStatisticsOutput>> resultFuture
94                 = groupStatisticsService.getAllGroupStatistics(input.build());
95
96         Assert.assertTrue(resultFuture.isDone());
97         final RpcResult<GetAllGroupStatisticsOutput> rpcResultCompatible = resultFuture.get();
98         Assert.assertTrue(rpcResultCompatible.isSuccessful());
99         Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
100     }
101
102     @Test
103     public void testGetGroupDescription() throws Exception {
104         GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder()
105                 .setNode(createNodeRef("unitProt:123"));
106
107         rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
108                 new MultipartReplyMessageBuilder()
109                         .setVersion(OFConstants.OFP_VERSION_1_3)
110                         .setMultipartReplyBody(new MultipartReplyGroupDescCaseBuilder()
111                                 .setMultipartReplyGroupDesc(new MultipartReplyGroupDescBuilder()
112                                         .setGroupDesc(Collections.singletonList(new GroupDescBuilder()
113                                                 .setGroupId(GROUP_ID)
114                                                 .setBucketsList(Collections.singletonList(new BucketsListBuilder()
115                                                         .setWatchGroup(51L)
116                                                         .setWatchPort(new PortNumber(52L))
117                                                         .setWeight(53)
118                                                         .build()))
119                                                 .setType(GroupType.OFPGTALL)
120                                                 .build()))
121                                         .build())
122                                 .build())
123                         .build()
124         )).build();
125
126         final Future<RpcResult<GetGroupDescriptionOutput>> resultFuture
127                 = groupStatisticsService.getGroupDescription(input.build());
128
129         Assert.assertTrue(resultFuture.isDone());
130         final RpcResult<GetGroupDescriptionOutput> rpcResult = resultFuture.get();
131         Assert.assertTrue(rpcResult.isSuccessful());
132         Assert.assertEquals(MultipartType.OFPMPGROUPDESC, requestInput.getValue().getType());
133     }
134
135     @Test
136     public void testGetGroupFeatures() throws Exception {
137         GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder()
138                 .setNode(createNodeRef("unitProt:123"));
139
140         rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
141                 new MultipartReplyMessageBuilder()
142                         .setVersion(OFConstants.OFP_VERSION_1_3)
143                         .setMultipartReplyBody(new MultipartReplyGroupFeaturesCaseBuilder()
144                                 .setMultipartReplyGroupFeatures(new MultipartReplyGroupFeaturesBuilder()
145                                         .setActionsBitmap(Collections.singletonList(new ActionType(true,
146                                                 false, false, false, false, false, false, false, false, false, false,
147                                                 false, false, false, false, false, false)))
148                                         .setCapabilities(new GroupCapabilities(true, false, false, false))
149                                         .setTypes(new GroupTypes(true, false, false, false))
150                                         .setMaxGroups(Collections.singletonList(5L))
151                                         .build())
152                                 .build())
153                         .build()
154         )).build();
155
156         final Future<RpcResult<GetGroupFeaturesOutput>> resultFuture
157                 = groupStatisticsService.getGroupFeatures(input.build());
158
159         Assert.assertTrue(resultFuture.isDone());
160         final RpcResult<GetGroupFeaturesOutput> rpcResult = resultFuture.get();
161         Assert.assertTrue(rpcResult.isSuccessful());
162         Assert.assertEquals(MultipartType.OFPMPGROUPFEATURES, requestInput.getValue().getType());
163     }
164
165     @Test
166     public void testGetGroupStatistics() throws Exception {
167         GetGroupStatisticsInputBuilder input = new GetGroupStatisticsInputBuilder()
168                 .setNode(createNodeRef("unitProt:123"))
169                 .setGroupId(new GroupId(21L));
170
171         rpcResult = buildGroupStatsResponse();
172
173         final Future<RpcResult<GetGroupStatisticsOutput>> resultFuture
174                 = groupStatisticsService.getGroupStatistics(input.build());
175
176         Assert.assertTrue(resultFuture.isDone());
177         final RpcResult<GetGroupStatisticsOutput> rpcResult = resultFuture.get();
178         Assert.assertTrue(rpcResult.isSuccessful());
179         Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
180     }
181
182     private static RpcResult<Object> buildGroupStatsResponse() {
183         return RpcResultBuilder.<Object>success(Collections.singletonList(
184                 new MultipartReplyMessageBuilder()
185                         .setVersion(OFConstants.OFP_VERSION_1_3)
186                         .setMultipartReplyBody(new MultipartReplyGroupCaseBuilder()
187                                 .setMultipartReplyGroup(new MultipartReplyGroupBuilder()
188                                         .setGroupStats(Collections.singletonList(new GroupStatsBuilder()
189                                                 .setByteCount(BigInteger.valueOf(21L))
190                                                 .setPacketCount(BigInteger.valueOf(22L))
191                                                 .setRefCount(23L)
192                                                 .setDurationSec(24L)
193                                                 .setDurationNsec(25L)
194                                                 .setGroupId(GROUP_ID)
195                                                 .setBucketStats(Collections.singletonList(new BucketStatsBuilder()
196                                                         .setByteCount(BigInteger.valueOf(26L))
197                                                         .setPacketCount(BigInteger.valueOf(27L))
198                                                         .build()))
199                                                 .build()))
200                                         .build())
201                                 .build())
202                         .build()
203         )).build();
204     }
205 }