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