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