Bug 5895 - Support of Ext109 openflow tcp flag matching in openflowplugin
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / translator / MultipartReplyTranslatorFourthTest.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowplugin.openflow.md.core.translator;\r
10 \r
11 import static org.mockito.Mockito.when;\r
12 import java.math.BigInteger;\r
13 import java.util.ArrayList;\r
14 import java.util.List;\r
15 import org.junit.Assert;\r
16 import org.junit.Before;\r
17 import org.junit.Test;\r
18 import org.mockito.Mock;\r
19 import org.mockito.MockitoAnnotations;\r
20 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
21 import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor;\r
22 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
23 import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdated;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdated;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCaseBuilder;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCaseBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroupBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;\r
49 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.BucketStats;\r
50 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;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder;\r
52 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.GroupDesc;\r
53 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;\r
54 import org.opendaylight.yangtools.yang.binding.DataObject;\r
55 \r
56 /**\r
57  * @author michal.polkorab\r
58  *\r
59  */\r
60 public class MultipartReplyTranslatorFourthTest {\r
61 \r
62     @Mock SwitchConnectionDistinguisher cookie;\r
63     @Mock SessionContext sc;\r
64     @Mock ConnectionConductor conductor;\r
65     @Mock GetFeaturesOutput features;\r
66 \r
67     MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
68 \r
69     /**\r
70      * Initializes mocks\r
71      */\r
72     @Before\r
73     public void startUp() {\r
74         MockitoAnnotations.initMocks(this);\r
75         when(sc.getPrimaryConductor()).thenReturn(conductor);\r
76         when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
77         when(sc.getFeatures()).thenReturn(features);\r
78         when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
79     }\r
80 \r
81     /**\r
82      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
83      * with empty group stats\r
84      */\r
85     @Test\r
86     public void testEmptyGroupStats() {\r
87         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
88         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
89         mpBuilder.setXid(123L);\r
90         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
91         mpBuilder.setType(MultipartType.OFPMPGROUP);\r
92 \r
93         MultipartReplyGroupCaseBuilder caseBuilder = new MultipartReplyGroupCaseBuilder();\r
94         MultipartReplyGroupBuilder groupBuilder = new MultipartReplyGroupBuilder();\r
95         List<GroupStats> groupStats = new ArrayList<>();\r
96         groupBuilder.setGroupStats(groupStats);\r
97         caseBuilder.setMultipartReplyGroup(groupBuilder.build());\r
98         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
99         MultipartReplyMessage message = mpBuilder.build();\r
100 \r
101         List<DataObject> list = translator.translate(cookie, sc, message);\r
102 \r
103         Assert.assertEquals("Wrong list size", 1, list.size());\r
104         GroupStatisticsUpdated statUpdate = (GroupStatisticsUpdated) list.get(0);\r
105         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
106         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
107         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
108         Assert.assertEquals("Wrong group stats size", 0, statUpdate.getGroupStats().size());\r
109     }\r
110 \r
111     /**\r
112      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
113      * with group stats\r
114      */\r
115     @Test\r
116     public void testGroupStats() {\r
117         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
118         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
119         mpBuilder.setXid(123L);\r
120         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
121         mpBuilder.setType(MultipartType.OFPMPGROUP);\r
122 \r
123         MultipartReplyGroupCaseBuilder caseBuilder = new MultipartReplyGroupCaseBuilder();\r
124         MultipartReplyGroupBuilder groupBuilder = new MultipartReplyGroupBuilder();\r
125         List<GroupStats> groupStats = new ArrayList<>();\r
126         GroupStatsBuilder builder = new GroupStatsBuilder();\r
127         builder.setGroupId(new GroupId(55L));\r
128         builder.setRefCount(56L);\r
129         builder.setPacketCount(new BigInteger("57"));\r
130         builder.setByteCount(new BigInteger("58"));\r
131         builder.setDurationSec(59L);\r
132         builder.setDurationNsec(60L);\r
133         List<BucketStats> bucketStats = new ArrayList<>();\r
134         BucketStatsBuilder bucketBuilder = new BucketStatsBuilder();\r
135         bucketBuilder.setByteCount(new BigInteger("61"));\r
136         bucketBuilder.setPacketCount(new BigInteger("62"));\r
137         bucketStats.add(bucketBuilder.build());\r
138         bucketBuilder = new BucketStatsBuilder();\r
139         bucketBuilder.setByteCount(new BigInteger("63"));\r
140         bucketBuilder.setPacketCount(new BigInteger("64"));\r
141         bucketStats.add(bucketBuilder.build());\r
142         builder.setBucketStats(bucketStats);\r
143         groupStats.add(builder.build());\r
144         builder = new GroupStatsBuilder();\r
145         builder.setGroupId(new GroupId(550L));\r
146         builder.setRefCount(560L);\r
147         builder.setPacketCount(new BigInteger("570"));\r
148         builder.setByteCount(new BigInteger("580"));\r
149         builder.setDurationSec(590L);\r
150         builder.setDurationNsec(600L);\r
151         bucketStats = new ArrayList<>();\r
152         builder.setBucketStats(bucketStats);\r
153         groupStats.add(builder.build());\r
154         groupBuilder.setGroupStats(groupStats);\r
155         caseBuilder.setMultipartReplyGroup(groupBuilder.build());\r
156         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
157         MultipartReplyMessage message = mpBuilder.build();\r
158 \r
159         List<DataObject> list = translator.translate(cookie, sc, message);\r
160 \r
161         Assert.assertEquals("Wrong list size", 1, list.size());\r
162         GroupStatisticsUpdated statUpdate = (GroupStatisticsUpdated) list.get(0);\r
163         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
164         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
165         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
166         Assert.assertEquals("Wrong group stats size", 2, statUpdate.getGroupStats().size());\r
167         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
168         .GroupStats stat = statUpdate.getGroupStats().get(0);\r
169         Assert.assertEquals("Wrong group-id", 55, stat.getGroupId().getValue().intValue());\r
170         Assert.assertEquals("Wrong ref count", 56, stat.getRefCount().getValue().intValue());\r
171         Assert.assertEquals("Wrong packet count", 57, stat.getPacketCount().getValue().intValue());\r
172         Assert.assertEquals("Wrong byte count", 58, stat.getByteCount().getValue().intValue());\r
173         Assert.assertEquals("Wrong duration sec", 59, stat.getDuration().getSecond().getValue().intValue());\r
174         Assert.assertEquals("Wrong duration n sec", 60, stat.getDuration().getNanosecond().getValue().intValue());\r
175         Assert.assertEquals("Wrong bucket stats size", 2, stat.getBuckets().getBucketCounter().size());\r
176         Assert.assertEquals("Wrong bucket-id", 0, stat.getBuckets().getBucketCounter().get(0).getBucketId().getValue().intValue());\r
177         Assert.assertEquals("Wrong byte count", 61, stat.getBuckets().getBucketCounter().get(0).getByteCount().getValue().intValue());\r
178         Assert.assertEquals("Wrong packet count", 62, stat.getBuckets().getBucketCounter().get(0).getPacketCount().getValue().intValue());\r
179         Assert.assertEquals("Wrong bucket-id", 1, stat.getBuckets().getBucketCounter().get(1).getBucketId().getValue().intValue());\r
180         Assert.assertEquals("Wrong byte count", 63, stat.getBuckets().getBucketCounter().get(1).getByteCount().getValue().intValue());\r
181         Assert.assertEquals("Wrong packet count", 64, stat.getBuckets().getBucketCounter().get(1).getPacketCount().getValue().intValue());\r
182         stat = statUpdate.getGroupStats().get(1);\r
183         Assert.assertEquals("Wrong group-id", 550, stat.getGroupId().getValue().intValue());\r
184         Assert.assertEquals("Wrong ref count", 560, stat.getRefCount().getValue().intValue());\r
185         Assert.assertEquals("Wrong packet count", 570, stat.getPacketCount().getValue().intValue());\r
186         Assert.assertEquals("Wrong byte count", 580, stat.getByteCount().getValue().intValue());\r
187         Assert.assertEquals("Wrong duration sec", 590, stat.getDuration().getSecond().getValue().intValue());\r
188         Assert.assertEquals("Wrong duration n sec", 600, stat.getDuration().getNanosecond().getValue().intValue());\r
189         Assert.assertEquals("Wrong bucket stats size", 0, stat.getBuckets().getBucketCounter().size());\r
190     }\r
191 \r
192     /**\r
193      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
194      * with empty group desc stats\r
195      */\r
196     @Test\r
197     public void testEmptyGroupDescStats() {\r
198         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
199         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
200         mpBuilder.setXid(123L);\r
201         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
202         mpBuilder.setType(MultipartType.OFPMPGROUPDESC);\r
203 \r
204         MultipartReplyGroupDescCaseBuilder caseBuilder = new MultipartReplyGroupDescCaseBuilder();\r
205         MultipartReplyGroupDescBuilder groupBuilder = new MultipartReplyGroupDescBuilder();\r
206         List<GroupDesc> groupStats = new ArrayList<>();\r
207         groupBuilder.setGroupDesc(groupStats);\r
208         caseBuilder.setMultipartReplyGroupDesc(groupBuilder.build());\r
209         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
210         MultipartReplyMessage message = mpBuilder.build();\r
211 \r
212         List<DataObject> list = translator.translate(cookie, sc, message);\r
213 \r
214         Assert.assertEquals("Wrong list size", 1, list.size());\r
215         GroupDescStatsUpdated statUpdate = (GroupDescStatsUpdated) list.get(0);\r
216         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
217         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
218         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
219         Assert.assertEquals("Wrong group stats size", 0, statUpdate.getGroupDescStats().size());\r
220     }\r
221 \r
222     /**\r
223      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
224      * with group desc stats\r
225      */\r
226     @Test\r
227     public void testGroupDescStats() {\r
228         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
229         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
230         mpBuilder.setXid(123L);\r
231         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
232         mpBuilder.setType(MultipartType.OFPMPGROUPDESC);\r
233 \r
234         MultipartReplyGroupDescCaseBuilder caseBuilder = new MultipartReplyGroupDescCaseBuilder();\r
235         MultipartReplyGroupDescBuilder groupBuilder = new MultipartReplyGroupDescBuilder();\r
236         List<GroupDesc> groupStats = new ArrayList<>();\r
237 \r
238         GroupDescBuilder builder = new GroupDescBuilder();\r
239         builder.setType(GroupType.OFPGTALL);\r
240         builder.setGroupId(new GroupId(1L));\r
241         List<BucketsList> buckets = new ArrayList<>();\r
242         BucketsListBuilder bucketBuilder = new BucketsListBuilder();\r
243         bucketBuilder.setWeight(28);\r
244         bucketBuilder.setWatchPort(new PortNumber(56L));\r
245         bucketBuilder.setWatchGroup(112L);\r
246 \r
247         List<Action> actions = new ArrayList<>();\r
248         ActionBuilder actionBuilder = new ActionBuilder();\r
249         DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();\r
250         actionBuilder.setActionChoice(decMplsTtlCaseBuilder.build());\r
251         actions.add(actionBuilder.build());\r
252 \r
253         actionBuilder = new ActionBuilder();\r
254         PopPbbCaseBuilder popPbbCaseBuilder = new PopPbbCaseBuilder();\r
255         actionBuilder.setActionChoice(popPbbCaseBuilder.build());\r
256         actions.add(actionBuilder.build());\r
257 \r
258         bucketBuilder.setAction(actions);\r
259         buckets.add(bucketBuilder.build());\r
260         bucketBuilder = new BucketsListBuilder();\r
261         bucketBuilder.setWeight(280);\r
262         bucketBuilder.setWatchPort(new PortNumber(560L));\r
263         bucketBuilder.setWatchGroup(1120L);\r
264         actions = new ArrayList<>();\r
265         bucketBuilder.setAction(actions);\r
266         buckets.add(bucketBuilder.build());\r
267         builder.setBucketsList(buckets);\r
268         groupStats.add(builder.build());\r
269         groupBuilder.setGroupDesc(groupStats);\r
270         caseBuilder.setMultipartReplyGroupDesc(groupBuilder.build());\r
271         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
272         MultipartReplyMessage message = mpBuilder.build();\r
273 \r
274         List<DataObject> list = translator.translate(cookie, sc, message);\r
275 \r
276         Assert.assertEquals("Wrong list size", 1, list.size());\r
277         GroupDescStatsUpdated statUpdate = (GroupDescStatsUpdated) list.get(0);\r
278         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
279         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
280         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
281         Assert.assertEquals("Wrong group stats size", 1, statUpdate.getGroupDescStats().size());\r
282         GroupDescStats stat = statUpdate.getGroupDescStats().get(0);\r
283         Assert.assertEquals("Wrong group-id", 1, stat.getGroupId().getValue().intValue());\r
284         Assert.assertEquals("Wrong group type", GroupTypes.GroupAll, stat.getGroupType());\r
285         Assert.assertEquals("Wrong buckets size", 2, stat.getBuckets().getBucket().size());\r
286         Bucket bucket = stat.getBuckets().getBucket().get(0);\r
287         Assert.assertEquals("Wrong weight size", 28, bucket.getWeight().intValue());\r
288         Assert.assertEquals("Wrong watch port size", 56, bucket.getWatchPort().intValue());\r
289         Assert.assertEquals("Wrong watch group size", 112, bucket.getWatchGroup().intValue());\r
290         Assert.assertEquals("Wrong actions size", 2, bucket.getAction().size());\r
291         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
292                 + ".action.action.DecMplsTtlCase", bucket.getAction().get(0).getAction().getImplementedInterface().getName());\r
293         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
294                 + ".action.action.PopPbbActionCase", bucket.getAction().get(1).getAction().getImplementedInterface().getName());\r
295         bucket = stat.getBuckets().getBucket().get(1);\r
296         Assert.assertEquals("Wrong weight size", 280, bucket.getWeight().intValue());\r
297         Assert.assertEquals("Wrong watch port size", 560, bucket.getWatchPort().intValue());\r
298         Assert.assertEquals("Wrong watch group size", 1120, bucket.getWatchGroup().intValue());\r
299         Assert.assertEquals("Wrong actions size", 0, bucket.getAction().size());\r
300     }\r
301 }