Merge "Bump odlparent 2.0.2 to 2.0.4"
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / common / MultipartReplyTranslatorUtilTest.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.common;
10
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Mockito.when;
13
14 import java.math.BigInteger;
15 import java.util.Collections;
16 import java.util.Optional;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.runners.MockitoJUnitRunner;
22 import org.opendaylight.openflowplugin.api.OFConstants;
23 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
24 import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary;
25 import org.opendaylight.openflowplugin.api.openflow.translator.TranslatorLibrarian;
26 import org.opendaylight.openflowplugin.impl.util.TranslatorLibraryUtil;
27 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
28 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.MultipartReplyBody;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder;
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.MultipartReplyPortDescCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableFeaturesCaseBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregateBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDescBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlowBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroupBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeterBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.MultipartReplyMeterConfigBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeaturesBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.MultipartReplyPortDescBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.multipart.reply.port.desc.PortsBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStatsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueueBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStatsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTableBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStatsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeaturesBuilder;
70
71 @RunWith(MockitoJUnitRunner.class)
72 public class MultipartReplyTranslatorUtilTest {
73     @Mock
74     private DeviceInfo deviceInfo;
75     private ConvertorExecutor convertorExecutor = ConvertorManagerFactory.createDefaultManager();
76     private TranslatorLibrarian translatorLibrarian;
77
78     @Before
79     public void setUp() throws Exception {
80         when(deviceInfo.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
81
82         translatorLibrarian = new TranslatorLibrarian() {
83             private TranslatorLibrary translatorLibrary;
84
85             @Override
86             public TranslatorLibrary oook() {
87                 return translatorLibrary;
88             }
89
90             @Override
91             public void setTranslatorLibrary(final TranslatorLibrary translatorLibrary) {
92                 this.translatorLibrary = translatorLibrary;
93             }
94         };
95
96         TranslatorLibraryUtil.injectBasicTranslatorLibrary(translatorLibrarian, convertorExecutor);
97     }
98
99     private static MultipartReply buildReply(final MultipartType multipartType,
100                                              final MultipartReplyBody multipartReplyBody) {
101         return new MultipartReplyMessageBuilder()
102                 .setType(multipartType)
103                 .setMultipartReplyBody(multipartReplyBody)
104                 .build();
105     }
106
107     private void dummyAssertReply(final MultipartReply multipartReply) {
108         final Optional<? extends org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart
109                 .reply.MultipartReplyBody> translatedReply = MultipartReplyTranslatorUtil
110                 .translate(multipartReply, deviceInfo, convertorExecutor, translatorLibrarian.oook());
111
112         assertTrue(translatedReply.isPresent());
113     }
114
115     @Test
116     public void translatePortDesc() {
117         final MultipartReply multipartReply = buildReply(
118                 MultipartType.OFPMPPORTDESC,
119                 new MultipartReplyPortDescCaseBuilder()
120                         .setMultipartReplyPortDesc(new MultipartReplyPortDescBuilder()
121                                 .setPorts(Collections.singletonList(new PortsBuilder()
122                                         .build()))
123                                 .build())
124                         .build());
125
126         dummyAssertReply(multipartReply);
127     }
128
129     @Test
130     public void translateTableFeatures() {
131         final MultipartReply multipartReply = buildReply(
132                 MultipartType.OFPMPTABLEFEATURES,
133                 new MultipartReplyTableFeaturesCaseBuilder()
134                         .setMultipartReplyTableFeatures(new MultipartReplyTableFeaturesBuilder()
135                                 .build())
136                         .build());
137
138         dummyAssertReply(multipartReply);
139     }
140
141     @Test
142     public void translateDesc() {
143         final MultipartReply multipartReply = buildReply(
144                 MultipartType.OFPMPDESC,
145                 new MultipartReplyDescCaseBuilder()
146                         .setMultipartReplyDesc(new MultipartReplyDescBuilder()
147                                 .build())
148                         .build());
149
150         dummyAssertReply(multipartReply);
151     }
152
153     @Test
154     public void translateFlow() {
155         final MultipartReply multipartReply = buildReply(
156                 MultipartType.OFPMPFLOW,
157                 new MultipartReplyFlowCaseBuilder()
158                         .setMultipartReplyFlow(new MultipartReplyFlowBuilder()
159                                 .build())
160                         .build());
161
162         dummyAssertReply(multipartReply);
163     }
164
165     @Test
166     public void translateAggregate() {
167         final MultipartReply multipartReply = buildReply(
168                 MultipartType.OFPMPAGGREGATE,
169                 new MultipartReplyAggregateCaseBuilder()
170                         .setMultipartReplyAggregate(new MultipartReplyAggregateBuilder()
171                                 .setByteCount(BigInteger.ONE)
172                                 .setFlowCount(10L)
173                                 .setPacketCount(BigInteger.ONE)
174                                 .build())
175                         .build());
176
177         dummyAssertReply(multipartReply);
178     }
179
180     @Test
181     public void translatePortStats() {
182         final MultipartReply multipartReply = buildReply(
183                 MultipartType.OFPMPPORTSTATS,
184                 new MultipartReplyPortStatsCaseBuilder()
185                         .setMultipartReplyPortStats(new MultipartReplyPortStatsBuilder()
186                                 .setPortStats(Collections.singletonList(new PortStatsBuilder()
187                                         .build()))
188                                 .build())
189                         .build());
190
191         dummyAssertReply(multipartReply);
192     }
193
194     @Test
195     public void translateGroup() {
196         final MultipartReply multipartReply = buildReply(
197                 MultipartType.OFPMPGROUP,
198                 new MultipartReplyGroupCaseBuilder()
199                         .setMultipartReplyGroup(new MultipartReplyGroupBuilder()
200                                 .build())
201                         .build());
202
203         dummyAssertReply(multipartReply);
204     }
205
206     @Test
207     public void translateGroupDesc() {
208         final MultipartReply multipartReply = buildReply(
209                 MultipartType.OFPMPGROUPDESC,
210                 new MultipartReplyGroupDescCaseBuilder()
211                         .setMultipartReplyGroupDesc(new MultipartReplyGroupDescBuilder()
212                                 .build())
213                         .build());
214
215         dummyAssertReply(multipartReply);
216     }
217
218     @Test
219     public void translateGroupFeatures() {
220         final MultipartReply multipartReply = buildReply(
221                 MultipartType.OFPMPGROUPFEATURES,
222                 new MultipartReplyGroupFeaturesCaseBuilder()
223                         .setMultipartReplyGroupFeatures(new MultipartReplyGroupFeaturesBuilder()
224                                 .setTypes(new GroupTypes(true, false, false, false))
225                                 .setCapabilities(new GroupCapabilities(false, true, true, false))
226                                 .setActionsBitmap(Collections.singletonList(new ActionType(
227                                         true,
228                                         false,
229                                         false,
230                                         false,
231                                         false,
232                                         false,
233                                         false,
234                                         false,
235                                         false,
236                                         false,
237                                         false,
238                                         false,
239                                         false,
240                                         false,
241                                         false,
242                                         false,
243                                         false)))
244
245                                 .build())
246                         .build());
247
248         dummyAssertReply(multipartReply);
249     }
250
251     @Test
252     public void translateMeter() {
253         final MultipartReply multipartReply = buildReply(
254                 MultipartType.OFPMPMETER,
255                 new MultipartReplyMeterCaseBuilder()
256                         .setMultipartReplyMeter(new MultipartReplyMeterBuilder()
257                                 .build())
258                         .build());
259
260         dummyAssertReply(multipartReply);
261     }
262
263     @Test
264     public void translateMeterConfig() {
265         final MultipartReply multipartReply = buildReply(
266                 MultipartType.OFPMPMETERCONFIG,
267                 new MultipartReplyMeterConfigCaseBuilder()
268                         .setMultipartReplyMeterConfig(new MultipartReplyMeterConfigBuilder()
269                                 .build())
270                         .build());
271
272         dummyAssertReply(multipartReply);
273     }
274
275     @Test
276     public void translateMeterFeatures() {
277         final MultipartReply multipartReply = buildReply(
278                 MultipartType.OFPMPMETERFEATURES,
279                 new MultipartReplyMeterFeaturesCaseBuilder()
280                         .setMultipartReplyMeterFeatures(new MultipartReplyMeterFeaturesBuilder()
281                                 .setMaxMeter(10L)
282                                 .setCapabilities(new MeterFlags(true, false, false, false))
283                                 .setBandTypes(new MeterBandTypeBitmap(true, false))
284                                 .build())
285                         .build());
286
287         dummyAssertReply(multipartReply);
288     }
289
290     @Test
291     public void translateTable() {
292         final MultipartReply multipartReply = buildReply(
293                 MultipartType.OFPMPTABLE,
294                 new MultipartReplyTableCaseBuilder()
295                         .setMultipartReplyTable(new MultipartReplyTableBuilder()
296                                 .setTableStats(Collections.singletonList(new TableStatsBuilder()
297                                         .setActiveCount(10L)
298                                         .setLookupCount(BigInteger.ONE)
299                                         .setMatchedCount(BigInteger.ONE)
300                                         .setTableId((short) 10)
301                                         .build()))
302                                 .build())
303                         .build());
304
305         dummyAssertReply(multipartReply);
306     }
307
308     @Test
309     public void translateQueue() {
310         final MultipartReply multipartReply = buildReply(
311                 MultipartType.OFPMPQUEUE,
312                 new MultipartReplyQueueCaseBuilder()
313                         .setMultipartReplyQueue(new MultipartReplyQueueBuilder()
314                                 .setQueueStats(Collections.singletonList(new QueueStatsBuilder()
315                                         .setTxErrors(BigInteger.ONE)
316                                         .setTxBytes(BigInteger.ONE)
317                                         .setTxPackets(BigInteger.ONE)
318                                         .setDurationNsec(10L)
319                                         .setDurationSec(10L)
320                                         .setQueueId(10L)
321                                         .build()))
322                                 .build())
323                         .build());
324
325         dummyAssertReply(multipartReply);
326     }
327 }