da9c3c86ac41d2dcd439d1ca7285b3b90ae7301b
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / ActionConvertorV10Test.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.sal.convertor;\r
10 \r
11 import java.math.BigInteger;\r
12 import java.util.ArrayList;\r
13 import java.util.List;\r
14 \r
15 import org.junit.Assert;\r
16 import org.junit.Test;\r
17 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
18 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
19 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;\r
20 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCaseBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.strip.vlan.action._case.StripVlanActionBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DlAddressAction;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthActionBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTosAction;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpAction;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidAction;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;\r
59 \r
60 /**\r
61  * @author michal.polkorab\r
62  *\r
63  */\r
64 public class ActionConvertorV10Test {\r
65 \r
66     /**\r
67      * Test {@link ActionConvertor#getActions(List, short, BigInteger)}\r
68      */\r
69     @Test\r
70     public void testGetActions() {\r
71         List<Action> salActions = new ArrayList<>();\r
72         ActionBuilder actionBuilder = new ActionBuilder();\r
73         SetVlanPcpActionCaseBuilder vlanPcpCaseBuilder = new SetVlanPcpActionCaseBuilder();\r
74         SetVlanPcpActionBuilder pcpBuilder = new SetVlanPcpActionBuilder();\r
75         pcpBuilder.setVlanPcp(new VlanPcp((short) 7));\r
76         vlanPcpCaseBuilder.setSetVlanPcpAction(pcpBuilder.build());\r
77         actionBuilder.setAction(vlanPcpCaseBuilder.build());\r
78         actionBuilder.setOrder(0);\r
79         salActions.add(actionBuilder.build());\r
80         actionBuilder = new ActionBuilder();\r
81         StripVlanActionCaseBuilder stripCaseBuilder = new StripVlanActionCaseBuilder();\r
82         StripVlanActionBuilder stripBuilder = new StripVlanActionBuilder();\r
83         stripCaseBuilder.setStripVlanAction(stripBuilder.build());\r
84         actionBuilder.setAction(stripCaseBuilder.build());\r
85         actionBuilder.setOrder(1);\r
86         salActions.add(actionBuilder.build());\r
87         actionBuilder = new ActionBuilder();\r
88         SetDlDstActionCaseBuilder dlDstCaseBuilder = new SetDlDstActionCaseBuilder();\r
89         SetDlDstActionBuilder dlDstBuilder = new SetDlDstActionBuilder();\r
90         dlDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
91         dlDstCaseBuilder.setSetDlDstAction(dlDstBuilder.build());\r
92         actionBuilder.setAction(dlDstCaseBuilder.build());\r
93         actionBuilder.setOrder(2);\r
94         salActions.add(actionBuilder.build());\r
95         actionBuilder = new ActionBuilder();\r
96         SetDlSrcActionCaseBuilder dlSrcCaseBuilder = new SetDlSrcActionCaseBuilder();\r
97         SetDlSrcActionBuilder dlSrcBuilder = new SetDlSrcActionBuilder();\r
98         dlSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
99         dlSrcCaseBuilder.setSetDlSrcAction(dlSrcBuilder.build());\r
100         actionBuilder.setAction(dlSrcCaseBuilder.build());\r
101         actionBuilder.setOrder(3);\r
102         salActions.add(actionBuilder.build());\r
103         actionBuilder = new ActionBuilder();\r
104         SetNwSrcActionCaseBuilder nwSrcCaseBuilder = new SetNwSrcActionCaseBuilder();\r
105         SetNwSrcActionBuilder nwSrcBuilder = new SetNwSrcActionBuilder();\r
106         Ipv4Builder ipv4Builder = new Ipv4Builder();\r
107         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.1/24"));\r
108         nwSrcBuilder.setAddress(ipv4Builder.build());\r
109         nwSrcCaseBuilder.setSetNwSrcAction(nwSrcBuilder.build());\r
110         actionBuilder.setAction(nwSrcCaseBuilder.build());\r
111         actionBuilder.setOrder(4);\r
112         salActions.add(actionBuilder.build());\r
113         actionBuilder = new ActionBuilder();\r
114         SetNwDstActionCaseBuilder nwDstCaseBuilder = new SetNwDstActionCaseBuilder();\r
115         SetNwDstActionBuilder nwDstBuilder = new SetNwDstActionBuilder();\r
116         ipv4Builder = new Ipv4Builder();\r
117         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.2/32"));\r
118         nwDstBuilder.setAddress(ipv4Builder.build());\r
119         nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());\r
120         actionBuilder.setAction(nwDstCaseBuilder.build());\r
121         actionBuilder.setOrder(5);\r
122         salActions.add(actionBuilder.build());\r
123         actionBuilder = new ActionBuilder();\r
124         SetTpSrcActionCaseBuilder tpSrcCaseBuilder = new SetTpSrcActionCaseBuilder();\r
125         SetTpSrcActionBuilder tpSrcBuilder = new SetTpSrcActionBuilder();\r
126         tpSrcBuilder.setPort(new PortNumber(54));\r
127         tpSrcCaseBuilder.setSetTpSrcAction(tpSrcBuilder.build());\r
128         actionBuilder.setAction(tpSrcCaseBuilder.build());\r
129         actionBuilder.setOrder(6);\r
130         salActions.add(actionBuilder.build());\r
131         actionBuilder = new ActionBuilder();\r
132         SetTpDstActionCaseBuilder tpDstCaseBuilder = new SetTpDstActionCaseBuilder();\r
133         SetTpDstActionBuilder tpDstBuilder = new SetTpDstActionBuilder();\r
134         tpDstBuilder.setPort(new PortNumber(45));\r
135         tpDstCaseBuilder.setSetTpDstAction(tpDstBuilder.build());\r
136         actionBuilder.setAction(tpDstCaseBuilder.build());\r
137         actionBuilder.setOrder(7);\r
138         salActions.add(actionBuilder.build());\r
139         actionBuilder = new ActionBuilder();\r
140         SetNwTosActionCaseBuilder tosCaseBuilder = new SetNwTosActionCaseBuilder();\r
141         SetNwTosActionBuilder tosBuilder = new SetNwTosActionBuilder();\r
142         tosBuilder.setTos(18);\r
143         tosCaseBuilder.setSetNwTosAction(tosBuilder.build());\r
144         actionBuilder.setAction(tosCaseBuilder.build());\r
145         actionBuilder.setOrder(8);\r
146         salActions.add(actionBuilder.build());\r
147         actionBuilder = new ActionBuilder();\r
148         SetVlanIdActionCaseBuilder vlanIdCaseBuilder = new SetVlanIdActionCaseBuilder();\r
149         SetVlanIdActionBuilder vlanIdBuilder = new SetVlanIdActionBuilder();\r
150         vlanIdBuilder.setVlanId(new VlanId(22));\r
151         vlanIdCaseBuilder.setSetVlanIdAction(vlanIdBuilder.build());\r
152         actionBuilder.setAction(vlanIdCaseBuilder.build());\r
153         actionBuilder.setOrder(9);\r
154         salActions.add(actionBuilder.build());\r
155         \r
156         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
157         .Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF10_VERSION_ID, new BigInteger("42"));\r
158         \r
159         Assert.assertEquals("Wrong number of actions", 10, actions.size());\r
160         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
161         .Action action = actions.get(0);\r
162         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
163                 + ".action.rev130731.SetVlanPcp", action.getType().getName());\r
164         Assert.assertEquals("Wrong vlan pcp", 7, action.getAugmentation(VlanPcpAction.class).getVlanPcp().intValue());\r
165         action = actions.get(1);\r
166         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
167                 + ".action.rev130731.StripVlan", action.getType().getName());\r
168         action = actions.get(2);\r
169         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
170                 + ".action.rev130731.SetDlDst", action.getType().getName());\r
171         Assert.assertEquals("Wrong dl dst", "00:00:00:00:00:06", action.getAugmentation(DlAddressAction.class)\r
172                 .getDlAddress().getValue());\r
173         action = actions.get(3);\r
174         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
175                 + ".action.rev130731.SetDlSrc", action.getType().getName());\r
176         Assert.assertEquals("Wrong dl dst", "00:00:00:00:00:05", action.getAugmentation(DlAddressAction.class)\r
177                 .getDlAddress().getValue());\r
178         action = actions.get(4);\r
179         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
180                 + ".action.rev130731.SetNwSrc", action.getType().getName());\r
181         // FIXME - fix ipv4 address translation - cut off network mask\r
182 //        Assert.assertEquals("Wrong nw src", "10.0.0.1", action.getAugmentation(IpAddressAction.class)\r
183 //                .getIpAddress().getValue());\r
184         action = actions.get(5);\r
185         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
186                 + ".action.rev130731.SetNwDst", action.getType().getName());\r
187         // FIXME - fix ipv4 address translation - cut off network mask\r
188 //        Assert.assertEquals("Wrong nw dst", "10.0.0.2", action.getAugmentation(IpAddressAction.class)\r
189 //                .getIpAddress().getValue());\r
190         action = actions.get(6);\r
191         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
192                 + ".action.rev130731.SetTpSrc", action.getType().getName());\r
193         Assert.assertEquals("Wrong tp src", 54, action.getAugmentation(PortAction.class)\r
194                 .getPort().getValue().intValue());\r
195         action = actions.get(7);\r
196         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
197                 + ".action.rev130731.SetTpDst", action.getType().getName());\r
198         Assert.assertEquals("Wrong tp dst", 45, action.getAugmentation(PortAction.class)\r
199                 .getPort().getValue().intValue());\r
200         action = actions.get(8);\r
201         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
202                 + ".action.rev130731.SetNwTos", action.getType().getName());\r
203         Assert.assertEquals("Wrong nw tos", 18, action.getAugmentation(NwTosAction.class)\r
204                 .getNwTos().intValue());\r
205         action = actions.get(9);\r
206         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
207                 + ".action.rev130731.SetVlanVid", action.getType().getName());\r
208         Assert.assertEquals("Wrong vlan id", 22, action.getAugmentation(VlanVidAction.class)\r
209                 .getVlanVid().intValue());\r
210     }\r
211 \r
212     /**\r
213      * Test {@link ActionConvertor#toMDSalActions(List, OpenflowVersion, ActionPath)}\r
214      */\r
215     @Test\r
216     public void testToMDSalActions() {\r
217         OpenflowPortsUtil.init();\r
218 \r
219         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
220         .Action> actions = new ArrayList<>();\r
221         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping\r
222         .ActionBuilder actionbuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common\r
223                                         .action.rev130731.actions.grouping.ActionBuilder();\r
224         actionbuilder.setType(Output.class);\r
225         PortActionBuilder portBuilder = new PortActionBuilder();\r
226         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber(14L));\r
227         actionbuilder.addAugmentation(PortAction.class, portBuilder.build());\r
228         MaxLengthActionBuilder lengthBuilder = new MaxLengthActionBuilder();\r
229         lengthBuilder.setMaxLength(555);\r
230         actionbuilder.addAugmentation(MaxLengthAction.class, lengthBuilder.build());\r
231         actions.add(actionbuilder.build());\r
232 \r
233         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
234         .Action> mdSalActions = ActionConvertor.toMDSalActions(actions, OpenflowVersion.OF10,\r
235                 ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
236 \r
237         Assert.assertEquals("Wrong number of output actions", 1, mdSalActions.size());\r
238         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = mdSalActions.get(0);\r
239         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
240                 + ".rev131112.action.action.OutputActionCase", action.getImplementedInterface().getName());\r
241         OutputActionCase outputAction = (OutputActionCase) action;\r
242         Assert.assertEquals("Wrong output port", "14", outputAction.getOutputAction().getOutputNodeConnector().getValue());\r
243         Assert.assertEquals("Wrong max length", 555, outputAction.getOutputAction().getMaxLength().intValue());\r
244     }\r
245 }