OPNFLWPLUG-1032: Neon-MRI: Bump odlparent, yangtools, mdsal
[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.binding.Notification;
57 import org.opendaylight.yangtools.yang.common.RpcResult;
58 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
59
60 /**
61  * Test for {@link OpendaylightGroupStatisticsServiceImpl}.
62  */
63 public class OpendaylightGroupStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
64
65     private static final org.opendaylight.yang.gen.v1.urn
66             .opendaylight.openflow.common.types.rev130731.GroupId GROUP_ID =
67             new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId(123L);
68     @Captor
69     private ArgumentCaptor<MultipartRequestInput> requestInput;
70
71     private OpendaylightGroupStatisticsServiceImpl groupStatisticsService;
72
73     public void setUp() {
74         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
75         groupStatisticsService = new OpendaylightGroupStatisticsServiceImpl(rqContextStack, deviceContext,
76                 new AtomicLong(), notificationPublishService, convertorManager);
77
78         Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
79                 .commitEntry(eq(42L), requestInput.capture(), any(FutureCallback.class));
80     }
81
82     @After
83     public void tearDown() throws Exception {
84         Mockito.verify(notificationPublishService).offerNotification(ArgumentMatchers.<Notification>any());
85     }
86
87     @Test
88     public void testGetAllGroupStatistics() throws Exception {
89         GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder()
90                 .setNode(createNodeRef("unitProt:123"));
91
92         rpcResult = buildGroupStatsResponse();
93
94         final Future<RpcResult<GetAllGroupStatisticsOutput>> resultFuture
95                 = groupStatisticsService.getAllGroupStatistics(input.build());
96
97         Assert.assertTrue(resultFuture.isDone());
98         final RpcResult<GetAllGroupStatisticsOutput> rpcResultCompatible = resultFuture.get();
99         Assert.assertTrue(rpcResultCompatible.isSuccessful());
100         Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
101     }
102
103     @Test
104     public void testGetGroupDescription() throws Exception {
105         GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder()
106                 .setNode(createNodeRef("unitProt:123"));
107
108         rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
109                 new MultipartReplyMessageBuilder()
110                         .setVersion(OFConstants.OFP_VERSION_1_3)
111                         .setMultipartReplyBody(new MultipartReplyGroupDescCaseBuilder()
112                                 .setMultipartReplyGroupDesc(new MultipartReplyGroupDescBuilder()
113                                         .setGroupDesc(Collections.singletonList(new GroupDescBuilder()
114                                                 .setGroupId(GROUP_ID)
115                                                 .setBucketsList(Collections.singletonList(new BucketsListBuilder()
116                                                         .setWatchGroup(51L)
117                                                         .setWatchPort(new PortNumber(52L))
118                                                         .setWeight(53)
119                                                         .build()))
120                                                 .setType(GroupType.OFPGTALL)
121                                                 .build()))
122                                         .build())
123                                 .build())
124                         .build()
125         )).build();
126
127         final Future<RpcResult<GetGroupDescriptionOutput>> resultFuture
128                 = groupStatisticsService.getGroupDescription(input.build());
129
130         Assert.assertTrue(resultFuture.isDone());
131         final RpcResult<GetGroupDescriptionOutput> rpcResult = resultFuture.get();
132         Assert.assertTrue(rpcResult.isSuccessful());
133         Assert.assertEquals(MultipartType.OFPMPGROUPDESC, requestInput.getValue().getType());
134     }
135
136     @Test
137     public void testGetGroupFeatures() throws Exception {
138         GetGroupFeaturesInputBuilder input = new GetGroupFeaturesInputBuilder()
139                 .setNode(createNodeRef("unitProt:123"));
140
141         rpcResult = RpcResultBuilder.<Object>success(Collections.singletonList(
142                 new MultipartReplyMessageBuilder()
143                         .setVersion(OFConstants.OFP_VERSION_1_3)
144                         .setMultipartReplyBody(new MultipartReplyGroupFeaturesCaseBuilder()
145                                 .setMultipartReplyGroupFeatures(new MultipartReplyGroupFeaturesBuilder()
146                                         .setActionsBitmap(Collections.singletonList(new ActionType(true,
147                                                 false, false, false, false, false, false, false, false, false, false,
148                                                 false, false, false, false, false, false)))
149                                         .setCapabilities(new GroupCapabilities(true, false, false, false))
150                                         .setTypes(new GroupTypes(true, false, false, false))
151                                         .setMaxGroups(Collections.singletonList(5L))
152                                         .build())
153                                 .build())
154                         .build()
155         )).build();
156
157         final Future<RpcResult<GetGroupFeaturesOutput>> resultFuture
158                 = groupStatisticsService.getGroupFeatures(input.build());
159
160         Assert.assertTrue(resultFuture.isDone());
161         final RpcResult<GetGroupFeaturesOutput> rpcResult = resultFuture.get();
162         Assert.assertTrue(rpcResult.isSuccessful());
163         Assert.assertEquals(MultipartType.OFPMPGROUPFEATURES, requestInput.getValue().getType());
164     }
165
166     @Test
167     public void testGetGroupStatistics() throws Exception {
168         GetGroupStatisticsInputBuilder input = new GetGroupStatisticsInputBuilder()
169                 .setNode(createNodeRef("unitProt:123"))
170                 .setGroupId(new GroupId(21L));
171
172         rpcResult = buildGroupStatsResponse();
173
174         final Future<RpcResult<GetGroupStatisticsOutput>> resultFuture
175                 = groupStatisticsService.getGroupStatistics(input.build());
176
177         Assert.assertTrue(resultFuture.isDone());
178         final RpcResult<GetGroupStatisticsOutput> rpcResult = resultFuture.get();
179         Assert.assertTrue(rpcResult.isSuccessful());
180         Assert.assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
181     }
182
183     private static RpcResult<Object> buildGroupStatsResponse() {
184         return RpcResultBuilder.<Object>success(Collections.singletonList(
185                 new MultipartReplyMessageBuilder()
186                         .setVersion(OFConstants.OFP_VERSION_1_3)
187                         .setMultipartReplyBody(new MultipartReplyGroupCaseBuilder()
188                                 .setMultipartReplyGroup(new MultipartReplyGroupBuilder()
189                                         .setGroupStats(Collections.singletonList(new GroupStatsBuilder()
190                                                 .setByteCount(BigInteger.valueOf(21L))
191                                                 .setPacketCount(BigInteger.valueOf(22L))
192                                                 .setRefCount(23L)
193                                                 .setDurationSec(24L)
194                                                 .setDurationNsec(25L)
195                                                 .setGroupId(GROUP_ID)
196                                                 .setBucketStats(Collections.singletonList(new BucketStatsBuilder()
197                                                         .setByteCount(BigInteger.valueOf(26L))
198                                                         .setPacketCount(BigInteger.valueOf(27L))
199                                                         .build()))
200                                                 .build()))
201                                         .build())
202                                 .build())
203                         .build()
204         )).build();
205     }
206 }