Bug 1254 - Added unit tests
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / translator / MultipartReplyTranslatorTest2.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 \r
13 import java.math.BigInteger;\r
14 import java.util.ArrayList;\r
15 import java.util.List;\r
16 \r
17 import org.junit.Assert;\r
18 import org.junit.Before;\r
19 import org.junit.Test;\r
20 import org.mockito.Mock;\r
21 import org.mockito.MockitoAnnotations;\r
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
23 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
24 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;\r
25 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.AggregateFlowStatisticsUpdate;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupFeaturesUpdated;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdated;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCaseBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesCaseBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregateBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeaturesBuilder;\r
45 import org.opendaylight.yangtools.yang.binding.DataObject;\r
46 \r
47 /**\r
48  * @author michal.polkorab\r
49  *\r
50  */\r
51 public class MultipartReplyTranslatorTest2 {\r
52 \r
53     @Mock SwitchConnectionDistinguisher cookie;\r
54     @Mock SessionContext sc;\r
55     @Mock ConnectionConductor conductor;\r
56     @Mock GetFeaturesOutput features;\r
57 \r
58     MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
59 \r
60     /**\r
61      * Initializes mocks\r
62      */\r
63     @Before\r
64     public void startUp() {\r
65         MockitoAnnotations.initMocks(this);\r
66         when(sc.getPrimaryConductor()).thenReturn(conductor);\r
67         when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
68         when(sc.getFeatures()).thenReturn(features);\r
69         when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
70     }\r
71 \r
72     /**\r
73      * Test  MultipartReply message with aggregate stat\r
74      */\r
75     @Test\r
76     public void testAggregateCase() {\r
77         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
78         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
79         mpBuilder.setXid(123L);\r
80         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
81         mpBuilder.setType(MultipartType.OFPMPAGGREGATE);\r
82         \r
83         MultipartReplyAggregateCaseBuilder caseBuilder = new MultipartReplyAggregateCaseBuilder();\r
84         MultipartReplyAggregateBuilder aggBuilder = new MultipartReplyAggregateBuilder();\r
85         aggBuilder.setByteCount(new BigInteger("52"));\r
86         aggBuilder.setFlowCount(6587L);\r
87         aggBuilder.setPacketCount(new BigInteger("25"));\r
88         caseBuilder.setMultipartReplyAggregate(aggBuilder.build());\r
89         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
90         MultipartReplyMessage message = mpBuilder.build();\r
91 \r
92         List<DataObject> list = translator.translate(cookie, sc, message);\r
93 \r
94         Assert.assertEquals("Wrong list size", 1, list.size());\r
95         AggregateFlowStatisticsUpdate aggUpdate = (AggregateFlowStatisticsUpdate) list.get(0);\r
96         Assert.assertEquals("Wrong node-id", "openflow:42", aggUpdate.getId().getValue());\r
97         Assert.assertEquals("Wrong more-replies", false, aggUpdate.isMoreReplies());\r
98         Assert.assertEquals("Wrong transaction-id", 123, aggUpdate.getTransactionId().getValue().intValue());\r
99         Assert.assertEquals("Wrong byte count", 52, aggUpdate.getByteCount().getValue().intValue());\r
100         Assert.assertEquals("Wrong packet count", 25, aggUpdate.getPacketCount().getValue().intValue());\r
101         Assert.assertEquals("Wrong flow count", 6587, aggUpdate.getFlowCount().getValue().intValue());\r
102     }\r
103 \r
104     /**\r
105      * Test  MultipartReply message with group features stat\r
106      */\r
107     @Test\r
108     public void testGroupFeaturesCase() {\r
109         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
110         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
111         mpBuilder.setXid(123L);\r
112         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
113         mpBuilder.setType(MultipartType.OFPMPGROUPFEATURES);\r
114         \r
115         MultipartReplyGroupFeaturesCaseBuilder caseBuilder = new MultipartReplyGroupFeaturesCaseBuilder();\r
116         MultipartReplyGroupFeaturesBuilder featBuilder = new MultipartReplyGroupFeaturesBuilder();\r
117         featBuilder.setTypes(new GroupTypes(true, false, true, false));\r
118         featBuilder.setCapabilities(new GroupCapabilities(false, true, false, true));\r
119         List<Long> maxGroups = new ArrayList<>();\r
120         maxGroups.add(1L);\r
121         maxGroups.add(2L);\r
122         maxGroups.add(3L);\r
123         maxGroups.add(4L);\r
124         featBuilder.setMaxGroups(maxGroups);\r
125         List<ActionType> actionTypes = new ArrayList<>();\r
126         ActionType actionType1 = new ActionType(true, false, true, false, false, false, true,\r
127                 false, true, false, true, false, true, false, true, false, true);\r
128         actionTypes.add(actionType1);\r
129         ActionType actionType2 = new ActionType(false, true, false, true, false, true, false,\r
130                 true, false, true, false, true, false, true, false, true, false);\r
131         actionTypes.add(actionType2);\r
132         ActionType actionType3 = new ActionType(false, false, false, false, false, false, false,\r
133                 true, true, true, true, true, true, true, true, true, true);\r
134         actionTypes.add(actionType3);\r
135         ActionType actionType4 = new ActionType(true, true, true, true, true, true, true,\r
136                 false, false, false, false, false, false, false, false, false, false);\r
137         actionTypes.add(actionType4);\r
138         featBuilder.setActionsBitmap(actionTypes);\r
139         caseBuilder.setMultipartReplyGroupFeatures(featBuilder.build());\r
140         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
141         MultipartReplyMessage message = mpBuilder.build();\r
142 \r
143         List<DataObject> list = translator.translate(cookie, sc, message);\r
144 \r
145         Assert.assertEquals("Wrong list size", 1, list.size());\r
146         GroupFeaturesUpdated groupUpdate = (GroupFeaturesUpdated) list.get(0);\r
147         Assert.assertEquals("Wrong node-id", "openflow:42", groupUpdate.getId().getValue());\r
148         Assert.assertEquals("Wrong more-replies", false, groupUpdate.isMoreReplies());\r
149         Assert.assertEquals("Wrong transaction-id", 123, groupUpdate.getTransactionId().getValue().intValue());\r
150         Assert.assertEquals("Wrong group types size", 2, groupUpdate.getGroupTypesSupported().size());\r
151         Assert.assertEquals("Wrong group type", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupAll",\r
152                 groupUpdate.getGroupTypesSupported().get(0).getName());\r
153         Assert.assertEquals("Wrong group type", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupIndirect",\r
154                 groupUpdate.getGroupTypesSupported().get(1).getName());\r
155         Assert.assertEquals("Wrong group capabilities size", 2, groupUpdate.getGroupCapabilitiesSupported().size());\r
156         Assert.assertEquals("Wrong group capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.ChainingChecks",\r
157                 groupUpdate.getGroupCapabilitiesSupported().get(0).getName());\r
158         Assert.assertEquals("Wrong group capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight",\r
159                 groupUpdate.getGroupCapabilitiesSupported().get(1).getName());\r
160         Assert.assertEquals("Wrong max groups", maxGroups, groupUpdate.getMaxGroups());\r
161         Assert.assertEquals("Wrong actions bitmap", 137072641, groupUpdate.getActions().get(0).longValue());\r
162         Assert.assertEquals("Wrong actions bitmap", 131336192, groupUpdate.getActions().get(1).longValue());\r
163         Assert.assertEquals("Wrong actions bitmap", 247365632, groupUpdate.getActions().get(2).longValue());\r
164         Assert.assertEquals("Wrong actions bitmap", 21043201, groupUpdate.getActions().get(3).longValue());\r
165     }\r
166 \r
167     /**\r
168      * Test  MultipartReply message with meter features stat\r
169      */\r
170     @Test\r
171     public void testMeterFeaturesCase() {\r
172         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
173         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
174         mpBuilder.setXid(123L);\r
175         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
176         mpBuilder.setType(MultipartType.OFPMPMETERFEATURES);\r
177         \r
178         MultipartReplyMeterFeaturesCaseBuilder caseBuilder = new MultipartReplyMeterFeaturesCaseBuilder();\r
179         MultipartReplyMeterFeaturesBuilder featBuilder = new MultipartReplyMeterFeaturesBuilder();\r
180         featBuilder.setMaxMeter(1L);\r
181         featBuilder.setBandTypes(new MeterBandTypeBitmap(true, true));\r
182         featBuilder.setCapabilities(new MeterFlags(true, true, true, true));\r
183         featBuilder.setMaxBands((short) 2);\r
184         featBuilder.setMaxColor((short) 3);\r
185         caseBuilder.setMultipartReplyMeterFeatures(featBuilder.build());\r
186         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
187         MultipartReplyMessage message = mpBuilder.build();\r
188 \r
189         List<DataObject> list = translator.translate(cookie, sc, message);\r
190 \r
191         Assert.assertEquals("Wrong list size", 1, list.size());\r
192         MeterFeaturesUpdated megterUpdate = (MeterFeaturesUpdated) list.get(0);\r
193         Assert.assertEquals("Wrong node-id", "openflow:42", megterUpdate.getId().getValue());\r
194         Assert.assertEquals("Wrong more-replies", false, megterUpdate.isMoreReplies());\r
195         Assert.assertEquals("Wrong transaction-id", 123, megterUpdate.getTransactionId().getValue().intValue());\r
196         Assert.assertEquals("Wrong max meter", 1, megterUpdate.getMaxMeter().getValue().intValue());\r
197         Assert.assertEquals("Wrong max bands", 2, megterUpdate.getMaxBands().intValue());\r
198         Assert.assertEquals("Wrong max color", 3, megterUpdate.getMaxColor().intValue());\r
199         Assert.assertEquals("Wrong capabilities size", 4, megterUpdate.getMeterCapabilitiesSupported().size());\r
200         Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
201                 + ".MeterBurst", megterUpdate.getMeterCapabilitiesSupported().get(0).getName());\r
202         Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
203                 + ".MeterKbps", megterUpdate.getMeterCapabilitiesSupported().get(1).getName());\r
204         Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
205                 + ".MeterPktps", megterUpdate.getMeterCapabilitiesSupported().get(2).getName());\r
206         Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
207                 + ".MeterStats", megterUpdate.getMeterCapabilitiesSupported().get(3).getName());\r
208         Assert.assertEquals("Wrong band types size", 2, megterUpdate.getMeterBandSupported().size());\r
209         Assert.assertEquals("Wrong band type", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDrop",\r
210                 megterUpdate.getMeterBandSupported().get(0).getName());\r
211         Assert.assertEquals("Wrong band type", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDscpRemark",\r
212                 megterUpdate.getMeterBandSupported().get(1).getName());\r
213     }\r
214 }