Fix checkstyle warnings for services package
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / services / sal / SalMetersBatchServiceImplTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.services.sal;
10
11 import com.google.common.collect.Lists;
12 import java.util.List;
13 import java.util.concurrent.Future;
14 import org.junit.After;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.junit.runner.RunWith;
19 import org.mockito.ArgumentCaptor;
20 import org.mockito.Captor;
21 import org.mockito.InOrder;
22 import org.mockito.Matchers;
23 import org.mockito.Mock;
24 import org.mockito.Mockito;
25 import org.mockito.runners.MockitoJUnitRunner;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.FlowCapableTransactionService;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.SendBarrierInput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutput;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutputBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutputBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.AddMetersBatchInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.AddMetersBatchInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.AddMetersBatchOutput;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.RemoveMetersBatchInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.RemoveMetersBatchInputBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.RemoveMetersBatchOutput;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.UpdateMetersBatchInput;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.UpdateMetersBatchInputBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.UpdateMetersBatchOutput;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.add.meters.batch.input.BatchAddMeters;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.add.meters.batch.input.BatchAddMetersBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.batch.meter.input.update.grouping.OriginalBatchedMeterBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.batch.meter.input.update.grouping.UpdatedBatchedMeterBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.remove.meters.batch.input.BatchRemoveMeters;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.remove.meters.batch.input.BatchRemoveMetersBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.update.meters.batch.input.BatchUpdateMeters;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.meters.service.rev160316.update.meters.batch.input.BatchUpdateMetersBuilder;
61 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
62 import org.opendaylight.yangtools.yang.common.RpcError;
63 import org.opendaylight.yangtools.yang.common.RpcResult;
64 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
65
66 /**
67  * Test for {@link org.opendaylight.openflowplugin.impl.services.sal.SalMetersBatchServiceImpl}.
68  */
69 @RunWith(MockitoJUnitRunner.class)
70 public class SalMetersBatchServiceImplTest {
71
72     public static final NodeId NODE_ID = new NodeId("ut-dummy-node");
73     public static final NodeKey NODE_KEY = new NodeKey(NODE_ID);
74     public static final NodeRef NODE_REF =
75             new NodeRef(InstanceIdentifier.create(Nodes.class).child(Node.class, NODE_KEY));
76
77     @Mock
78     private SalMeterService salMeterService;
79     @Mock
80     private FlowCapableTransactionService transactionService;
81     @Captor
82     private ArgumentCaptor<RemoveMeterInput> removeMeterInputCpt;
83     @Captor
84     private ArgumentCaptor<UpdateMeterInput> updateMeterInputCpt;
85     @Captor
86     private ArgumentCaptor<AddMeterInput> addMeterInputCpt;
87
88     private SalMetersBatchServiceImpl salMetersBatchService;
89
90     @Before
91     public void setUp() throws Exception {
92         salMetersBatchService = new SalMetersBatchServiceImpl(salMeterService, transactionService);
93
94         Mockito.when(transactionService.sendBarrier(Matchers.<SendBarrierInput>any()))
95                 .thenReturn(RpcResultBuilder.<Void>success().buildFuture());
96     }
97
98     @After
99     public void tearDown() throws Exception {
100         Mockito.verifyNoMoreInteractions(salMeterService, transactionService);
101     }
102
103     @Test
104     public void testUpdateMetersBatch_success() throws Exception {
105         Mockito.when(salMeterService.updateMeter(Mockito.<UpdateMeterInput>any()))
106                 .thenReturn(RpcResultBuilder.success(new UpdateMeterOutputBuilder().build()).buildFuture());
107
108         final UpdateMetersBatchInput input = new UpdateMetersBatchInputBuilder()
109                 .setNode(NODE_REF)
110                 .setBarrierAfter(true)
111                 .setBatchUpdateMeters(Lists.newArrayList(
112                         createEmptyBatchUpdateMeter(42L),
113                         createEmptyBatchUpdateMeter(44L)))
114                 .build();
115
116         final Future<RpcResult<UpdateMetersBatchOutput>> resultFuture = salMetersBatchService.updateMetersBatch(input);
117
118         Assert.assertTrue(resultFuture.isDone());
119         Assert.assertTrue(resultFuture.get().isSuccessful());
120
121         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
122         inOrder.verify(salMeterService, Mockito.times(2)).updateMeter(updateMeterInputCpt.capture());
123         final List<UpdateMeterInput> allValues = updateMeterInputCpt.getAllValues();
124         Assert.assertEquals(2, allValues.size());
125         Assert.assertEquals(42, allValues.get(0).getOriginalMeter().getMeterId().getValue().longValue());
126         Assert.assertEquals(43, allValues.get(0).getUpdatedMeter().getMeterId().getValue().longValue());
127         Assert.assertEquals(44, allValues.get(1).getOriginalMeter().getMeterId().getValue().longValue());
128         Assert.assertEquals(45, allValues.get(1).getUpdatedMeter().getMeterId().getValue().longValue());
129
130         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
131     }
132
133     @Test
134     public void testUpdateMetersBatch_failure() throws Exception {
135         Mockito.when(salMeterService.updateMeter(Mockito.<UpdateMeterInput>any()))
136                 .thenReturn(RpcResultBuilder.<UpdateMeterOutput>failed()
137                         .withError(RpcError.ErrorType.APPLICATION, "ur-groupUpdateError")
138                         .buildFuture());
139
140         final UpdateMetersBatchInput input = new UpdateMetersBatchInputBuilder()
141                 .setNode(NODE_REF)
142                 .setBarrierAfter(true)
143                 .setBatchUpdateMeters(Lists.newArrayList(
144                         createEmptyBatchUpdateMeter(42L),
145                         createEmptyBatchUpdateMeter(44L)))
146                 .build();
147
148         final Future<RpcResult<UpdateMetersBatchOutput>> resultFuture = salMetersBatchService.updateMetersBatch(input);
149
150         Assert.assertTrue(resultFuture.isDone());
151         Assert.assertFalse(resultFuture.get().isSuccessful());
152         Assert.assertEquals(2, resultFuture.get().getResult().getBatchFailedMetersOutput().size());
153         Assert.assertEquals(43L,
154                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(0).getMeterId().getValue().longValue());
155         Assert.assertEquals(45L,
156                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(1).getMeterId().getValue().longValue());
157         Assert.assertEquals(2, resultFuture.get().getErrors().size());
158
159
160         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
161         inOrder.verify(salMeterService, Mockito.times(2)).updateMeter(updateMeterInputCpt.capture());
162         final List<UpdateMeterInput> allValues = updateMeterInputCpt.getAllValues();
163         Assert.assertEquals(2, allValues.size());
164         Assert.assertEquals(42, allValues.get(0).getOriginalMeter().getMeterId().getValue().longValue());
165         Assert.assertEquals(43, allValues.get(0).getUpdatedMeter().getMeterId().getValue().longValue());
166         Assert.assertEquals(44, allValues.get(1).getOriginalMeter().getMeterId().getValue().longValue());
167         Assert.assertEquals(45, allValues.get(1).getUpdatedMeter().getMeterId().getValue().longValue());
168
169         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
170     }
171
172
173     @Test
174     public void testAddMetersBatch_success() throws Exception {
175         Mockito.when(salMeterService.addMeter(Mockito.<AddMeterInput>any()))
176                 .thenReturn(RpcResultBuilder.success(new AddMeterOutputBuilder().build()).buildFuture());
177
178         final AddMetersBatchInput input = new AddMetersBatchInputBuilder()
179                 .setNode(NODE_REF)
180                 .setBarrierAfter(true)
181                 .setBatchAddMeters(Lists.newArrayList(
182                         createEmptyBatchAddMeter(42L),
183                         createEmptyBatchAddMeter(43L)))
184                 .build();
185
186         final Future<RpcResult<AddMetersBatchOutput>> resultFuture = salMetersBatchService.addMetersBatch(input);
187
188         Assert.assertTrue(resultFuture.isDone());
189         Assert.assertTrue(resultFuture.get().isSuccessful());
190
191         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
192         inOrder.verify(salMeterService, Mockito.times(2)).addMeter(addMeterInputCpt.capture());
193         final List<AddMeterInput> allValues = addMeterInputCpt.getAllValues();
194         Assert.assertEquals(2, allValues.size());
195         Assert.assertEquals(42L, allValues.get(0).getMeterId().getValue().longValue());
196         Assert.assertEquals(43L, allValues.get(1).getMeterId().getValue().longValue());
197
198         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
199     }
200
201     @Test
202     public void testAddMetersBatch_failure() throws Exception {
203         Mockito.when(salMeterService.addMeter(Mockito.<AddMeterInput>any()))
204                 .thenReturn(RpcResultBuilder.<AddMeterOutput>failed()
205                         .withError(RpcError.ErrorType.APPLICATION, "ut-groupAddError")
206                         .buildFuture());
207
208         final AddMetersBatchInput input = new AddMetersBatchInputBuilder()
209                 .setNode(NODE_REF)
210                 .setBarrierAfter(true)
211                 .setBatchAddMeters(Lists.newArrayList(
212                         createEmptyBatchAddMeter(42L),
213                         createEmptyBatchAddMeter(43L)))
214                 .build();
215
216         final Future<RpcResult<AddMetersBatchOutput>> resultFuture = salMetersBatchService.addMetersBatch(input);
217
218         Assert.assertTrue(resultFuture.isDone());
219         Assert.assertFalse(resultFuture.get().isSuccessful());
220         Assert.assertEquals(2, resultFuture.get().getResult().getBatchFailedMetersOutput().size());
221         Assert.assertEquals(42L,
222                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(0).getMeterId().getValue().longValue());
223         Assert.assertEquals(43L,
224                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(1).getMeterId().getValue().longValue());
225         Assert.assertEquals(2, resultFuture.get().getErrors().size());
226
227
228         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
229         inOrder.verify(salMeterService, Mockito.times(2)).addMeter(addMeterInputCpt.capture());
230         final List<AddMeterInput> allValues = addMeterInputCpt.getAllValues();
231         Assert.assertEquals(2, allValues.size());
232         Assert.assertEquals(42L, allValues.get(0).getMeterId().getValue().longValue());
233         Assert.assertEquals(43L, allValues.get(1).getMeterId().getValue().longValue());
234
235         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
236     }
237
238     @Test
239     public void testRemoveMetersBatch_success() throws Exception {
240         Mockito.when(salMeterService.removeMeter(Mockito.<RemoveMeterInput>any()))
241                 .thenReturn(RpcResultBuilder.success(new RemoveMeterOutputBuilder().build()).buildFuture());
242
243         final RemoveMetersBatchInput input = new RemoveMetersBatchInputBuilder()
244                 .setNode(NODE_REF)
245                 .setBarrierAfter(true)
246                 .setBatchRemoveMeters(Lists.newArrayList(
247                         createEmptyBatchRemoveMeter(42L),
248                         createEmptyBatchRemoveMeter(43L)))
249                 .build();
250
251         final Future<RpcResult<RemoveMetersBatchOutput>> resultFuture = salMetersBatchService.removeMetersBatch(input);
252
253         Assert.assertTrue(resultFuture.isDone());
254         Assert.assertTrue(resultFuture.get().isSuccessful());
255
256         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
257
258         inOrder.verify(salMeterService, Mockito.times(2)).removeMeter(removeMeterInputCpt.capture());
259         final List<RemoveMeterInput> allValues = removeMeterInputCpt.getAllValues();
260         Assert.assertEquals(2, allValues.size());
261         Assert.assertEquals(42L, allValues.get(0).getMeterId().getValue().longValue());
262         Assert.assertEquals(43L, allValues.get(1).getMeterId().getValue().longValue());
263
264         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
265     }
266
267     @Test
268     public void testRemoveMetersBatch_failure() throws Exception {
269         Mockito.when(salMeterService.removeMeter(Mockito.<RemoveMeterInput>any()))
270                 .thenReturn(RpcResultBuilder.<RemoveMeterOutput>failed()
271                         .withError(RpcError.ErrorType.APPLICATION, "ut-groupRemoveError")
272                         .buildFuture());
273
274         final RemoveMetersBatchInput input = new RemoveMetersBatchInputBuilder()
275                 .setNode(NODE_REF)
276                 .setBarrierAfter(true)
277                 .setBatchRemoveMeters(Lists.newArrayList(
278                         createEmptyBatchRemoveMeter(42L),
279                         createEmptyBatchRemoveMeter(43L)))
280                 .build();
281
282         final Future<RpcResult<RemoveMetersBatchOutput>> resultFuture = salMetersBatchService.removeMetersBatch(input);
283
284         Assert.assertTrue(resultFuture.isDone());
285         Assert.assertFalse(resultFuture.get().isSuccessful());
286         Assert.assertEquals(2, resultFuture.get().getResult().getBatchFailedMetersOutput().size());
287         Assert.assertEquals(42L,
288                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(0).getMeterId().getValue().longValue());
289         Assert.assertEquals(43L,
290                 resultFuture.get().getResult().getBatchFailedMetersOutput().get(1).getMeterId().getValue().longValue());
291         Assert.assertEquals(2, resultFuture.get().getErrors().size());
292
293         final InOrder inOrder = Mockito.inOrder(salMeterService, transactionService);
294
295         inOrder.verify(salMeterService, Mockito.times(2)).removeMeter(removeMeterInputCpt.capture());
296         final List<RemoveMeterInput> allValues = removeMeterInputCpt.getAllValues();
297         Assert.assertEquals(2, allValues.size());
298         Assert.assertEquals(42L, allValues.get(0).getMeterId().getValue().longValue());
299         Assert.assertEquals(43L, allValues.get(1).getMeterId().getValue().longValue());
300
301         inOrder.verify(transactionService).sendBarrier(Matchers.<SendBarrierInput>any());
302     }
303
304     private static BatchAddMeters createEmptyBatchAddMeter(final long groupIdValue) {
305         return new BatchAddMetersBuilder()
306                 .setMeterId(new MeterId(groupIdValue))
307                 .build();
308     }
309
310     private static BatchRemoveMeters createEmptyBatchRemoveMeter(final long groupIdValue) {
311         return new BatchRemoveMetersBuilder()
312                 .setMeterId(new MeterId(groupIdValue))
313                 .build();
314     }
315
316     private static BatchUpdateMeters createEmptyBatchUpdateMeter(final long groupIdValue) {
317         return new BatchUpdateMetersBuilder()
318                 .setOriginalBatchedMeter(
319                         new OriginalBatchedMeterBuilder(createEmptyBatchAddMeter(groupIdValue)).build())
320                 .setUpdatedBatchedMeter(
321                         new UpdatedBatchedMeterBuilder(createEmptyBatchAddMeter(groupIdValue + 1)).build())
322                 .build();
323     }
324 }