Decompose RPC implementation classes
[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 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.Captor;
24 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
25 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetAllGroupStatisticsInputBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionInputBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesInputBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroupBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;
45 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;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder;
47 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;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder;
49 import org.opendaylight.yangtools.yang.common.RpcResult;
50 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
51 import org.opendaylight.yangtools.yang.common.Uint16;
52 import org.opendaylight.yangtools.yang.common.Uint32;
53 import org.opendaylight.yangtools.yang.common.Uint64;
54
55 @Deprecated
56 public class OpendaylightGroupStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
57     private static final org.opendaylight.yang.gen.v1.urn
58             .opendaylight.openflow.common.types.rev130731.GroupId GROUP_ID = new org.opendaylight.yang.gen.v1.urn
59                 .opendaylight.openflow.common.types.rev130731.GroupId(Uint32.valueOf(123));
60     @Captor
61     private ArgumentCaptor<MultipartRequestInput> requestInput;
62
63     private GetAllGroupStatisticsImpl getAllGroupStatistics;
64     private GetGroupStatisticsImpl getGroupStatistics;
65     private GetGroupDescriptionImpl getGroupDescription;
66     private GetGroupFeaturesImpl getGroupFeatures;
67
68     @Override
69     public void setUp() {
70         final var convertorManager = ConvertorManagerFactory.createDefaultManager();
71         final var xid = new AtomicLong();
72         getAllGroupStatistics = new GetAllGroupStatisticsImpl(rqContextStack, deviceContext, xid,
73             notificationPublishService, convertorManager);
74         getGroupStatistics = new GetGroupStatisticsImpl(rqContextStack, deviceContext, xid, notificationPublishService,
75             convertorManager);
76         getGroupDescription = new GetGroupDescriptionImpl(rqContextStack, deviceContext, xid,
77             notificationPublishService, convertorManager);
78         getGroupFeatures = new GetGroupFeaturesImpl(rqContextStack, deviceContext, xid, notificationPublishService,
79             convertorManager);
80
81         doAnswer(answerVoidToCallback).when(outboundQueueProvider)
82                 .commitEntry(eq(Uint32.valueOf(42)), requestInput.capture(), any(FutureCallback.class));
83     }
84
85     @After
86     public void tearDown() {
87         verify(notificationPublishService).offerNotification(any());
88     }
89
90     @Test
91     public void testGetAllGroupStatistics() throws Exception {
92         GetAllGroupStatisticsInputBuilder input = new GetAllGroupStatisticsInputBuilder()
93                 .setNode(createNodeRef("unitProt:123"));
94
95         rpcResult = buildGroupStatsResponse();
96
97         final var resultFuture = getAllGroupStatistics.invoke(input.build());
98
99         assertTrue(resultFuture.isDone());
100         final var rpcResultCompatible = resultFuture.get();
101         assertTrue(rpcResultCompatible.isSuccessful());
102         assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
103     }
104
105     @Test
106     public void testGetGroupDescription() throws Exception {
107         GetGroupDescriptionInputBuilder input = new GetGroupDescriptionInputBuilder()
108                 .setNode(createNodeRef("unitProt:123"));
109
110         rpcResult = RpcResultBuilder.<Object>success(List.of(new MultipartReplyMessageBuilder()
111             .setVersion(EncodeConstants.OF_VERSION_1_3)
112             .setMultipartReplyBody(new MultipartReplyGroupDescCaseBuilder()
113                 .setMultipartReplyGroupDesc(new MultipartReplyGroupDescBuilder()
114                     .setGroupDesc(List.of(new GroupDescBuilder()
115                         .setGroupId(GROUP_ID)
116                         .setBucketsList(List.of(new BucketsListBuilder()
117                             .setWatchGroup(Uint32.valueOf(51))
118                             .setWatchPort(new PortNumber(Uint32.valueOf(52)))
119                             .setWeight(Uint16.valueOf(53))
120                             .build()))
121                         .setType(GroupType.OFPGTALL)
122                         .build()))
123                     .build())
124                 .build())
125             .build()
126         )).build();
127
128         final var resultFuture = getGroupDescription.invoke(input.build());
129
130         assertTrue(resultFuture.isDone());
131         final var rpcResult = resultFuture.get();
132         assertTrue(rpcResult.isSuccessful());
133         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(List.of(new MultipartReplyMessageBuilder()
142             .setVersion(EncodeConstants.OF_VERSION_1_3)
143             .setMultipartReplyBody(new MultipartReplyGroupFeaturesCaseBuilder()
144                 .setMultipartReplyGroupFeatures(new MultipartReplyGroupFeaturesBuilder()
145                     .setActionsBitmap(List.of(new ActionType(true, false, false, false, false, false, false, false,
146                         false, false, false, false, false, false, false, false, false)))
147                     .setCapabilities(new GroupCapabilities(true, false, false, false))
148                     .setTypes(new GroupTypes(true, false, false, false))
149                     .setMaxGroups(List.of(Uint32.valueOf(5L)))
150                     .build())
151                 .build())
152             .build()
153         )).build();
154
155         final var resultFuture = getGroupFeatures.invoke(input.build());
156
157         assertTrue(resultFuture.isDone());
158         final var rpcResult = resultFuture.get();
159         assertTrue(rpcResult.isSuccessful());
160         assertEquals(MultipartType.OFPMPGROUPFEATURES, requestInput.getValue().getType());
161     }
162
163     @Test
164     public void testGetGroupStatistics() throws Exception {
165         GetGroupStatisticsInputBuilder input = new GetGroupStatisticsInputBuilder()
166                 .setNode(createNodeRef("unitProt:123"))
167                 .setGroupId(new GroupId(Uint32.valueOf(21)));
168
169         rpcResult = buildGroupStatsResponse();
170
171         final var resultFuture = getGroupStatistics.invoke(input.build());
172
173         assertTrue(resultFuture.isDone());
174         final var rpcResult = resultFuture.get();
175         assertTrue(rpcResult.isSuccessful());
176         assertEquals(MultipartType.OFPMPGROUP, requestInput.getValue().getType());
177     }
178
179     private static RpcResult<Object> buildGroupStatsResponse() {
180         return RpcResultBuilder.<Object>success(List.of(new MultipartReplyMessageBuilder()
181             .setVersion(EncodeConstants.OF_VERSION_1_3)
182             .setMultipartReplyBody(new MultipartReplyGroupCaseBuilder()
183                 .setMultipartReplyGroup(new MultipartReplyGroupBuilder()
184                     .setGroupStats(List.of(new GroupStatsBuilder()
185                         .setByteCount(Uint64.valueOf(21))
186                         .setPacketCount(Uint64.valueOf(22))
187                         .setRefCount(Uint32.valueOf(23))
188                         .setDurationSec(Uint32.valueOf(24))
189                         .setDurationNsec(Uint32.valueOf(25))
190                         .setGroupId(GROUP_ID)
191                         .setBucketStats(List.of(new BucketStatsBuilder()
192                             .setByteCount(Uint64.valueOf(26))
193                             .setPacketCount(Uint64.valueOf(27))
194                             .build()))
195                         .build()))
196                     .build())
197                 .build())
198             .build()
199         )).build();
200     }
201 }