Add support for encap/decap nicira actions
[openflowplugin.git] / extension / openflowplugin-extension-nicira / src / test / java / org / opendaylight / openflowplugin / extension / vendor / nicira / convertor / action / ConntrackConvertorTest.java
1 /**
2  * Copyright (c) 2016, 2017 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.action;
10
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrack;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.action.container.action.choice.ActionConntrackBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.NxActionConntrackBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.flows.statistics.update.flow.and.statistics.map.list.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.get.flow.statistics.output.flow.and.statistics.map.list.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionConntrackNotifDirectStatisticsUpdateApplyActionsCase;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.get.flow.statistics.output.flow.and.statistics.map.list.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNotifDirectStatisticsUpdateWriteActionsCase;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.group.desc.stats.updated.group.desc.stats.buckets.bucket.action.action.NxActionConntrackNotifGroupDescStatsUpdatedCase;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNodesNodeTableFlowWriteActionsCase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.NxConntrackBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActions;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.conntrack.grouping.nx.conntrack.CtActionsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.NxActionNatCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNat;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.ofpact.actions.ofpact.actions.nx.action.nat._case.NxActionNatBuilder;
37
38 /**
39  * Test for {@link ConntrackConvertor}.
40  */
41 public class ConntrackConvertorTest {
42
43     private ConntrackConvertor conntrackConvertor;
44
45     @Before
46     public void setUp() throws Exception {
47         conntrackConvertor = new ConntrackConvertor();
48     }
49
50     @Test
51     public void testConvertToOfJava() throws Exception {
52
53         final NxActionNatBuilder nxActionNatBuilder = new NxActionNatBuilder()
54                 .setFlags(1)
55                 .setRangePresent(2)
56                 .setIpAddressMin(new IpAddress("192.168.0.0".toCharArray()))
57                 .setIpAddressMin(new IpAddress("192.168.10.0".toCharArray()))
58                 .setPortMin(3000)
59                 .setPortMax(4000);
60         final CtActionsBuilder ctActionsBuilder = new CtActionsBuilder().setOfpactActions(new NxActionNatCaseBuilder()
61                 .setNxActionNat(nxActionNatBuilder.build()).build());
62         List<CtActions> ctAction = new ArrayList<>();
63         ctAction.add(ctActionsBuilder.build());
64         final NxConntrackBuilder nxConntrackBuilder = new NxConntrackBuilder()
65                 .setConntrackZone(1)
66                 .setFlags(1)
67                 .setRecircTable((short) 1)
68                 .setZoneSrc(1L)
69                 .setCtActions(ctAction);
70
71         final NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder nxActionConntrackBuilder =
72                 new NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder()
73                         .setNxConntrack(nxConntrackBuilder.build());
74
75         final NxActionConntrackNodesNodeTableFlowWriteActionsCase actionsCase = nxActionConntrackBuilder.build();
76         final ActionConntrack actionConntrack = (ActionConntrack) conntrackConvertor.convert(actionsCase)
77                 .getActionChoice();
78
79         Assert.assertEquals(actionsCase.getNxConntrack().getConntrackZone(), actionConntrack.getNxActionConntrack()
80                 .getConntrackZone());
81         Assert.assertEquals(actionsCase.getNxConntrack().getFlags(), actionConntrack.getNxActionConntrack().getFlags());
82         Assert.assertEquals(actionsCase.getNxConntrack().getRecircTable(), actionConntrack.getNxActionConntrack()
83                 .getRecircTable());
84         Assert.assertEquals(actionsCase.getNxConntrack().getZoneSrc(), actionConntrack.getNxActionConntrack()
85                 .getZoneSrc());
86
87         NxActionNat natactionCase = ((NxActionNatCase) actionsCase.getNxConntrack().getCtActions().get(0)
88                 .getOfpactActions()).getNxActionNat();
89         org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions
90             .nx.action.nat._case.NxActionNat nataction = ((org.opendaylight
91                     .yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions
92                     .NxActionNatCase) actionConntrack.getNxActionConntrack().getCtActions().get(0).getOfpactActions())
93             .getNxActionNat();
94         Assert.assertEquals(natactionCase.getFlags(), nataction.getFlags());
95         Assert.assertEquals(natactionCase.getRangePresent(), nataction.getRangePresent());
96         Assert.assertEquals(natactionCase.getIpAddressMin().getIpv4Address().getValue(), nataction.getIpAddressMin()
97             .getIpv4Address().getValue());
98         Assert.assertEquals(natactionCase.getIpAddressMin().getIpv4Address().getValue(), nataction.getIpAddressMin()
99             .getIpv4Address().getValue());
100         Assert.assertEquals(natactionCase.getPortMin(), nataction.getPortMin());
101         Assert.assertEquals(natactionCase.getPortMax(), nataction.getPortMax());
102
103     }
104
105     @Test
106     public void testConvertFromOfJava() throws Exception {
107
108         org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions
109             .nx.action.nat._case.NxActionNatBuilder nxActionNatBuilder = new org.opendaylight.yang.gen.v1.urn
110             .opendaylight.openflowjava.nx.action.rev140421.ofpact.actions.ofpact.actions.nx.action.nat._case
111             .NxActionNatBuilder()
112             .setFlags(1)
113             .setRangePresent(2)
114             .setIpAddressMin(new IpAddress("192.168.0.0".toCharArray()))
115             .setIpAddressMax(new IpAddress("192.168.10.0".toCharArray()))
116             .setPortMin(3000)
117             .setPortMax(4000);
118         org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping
119             .nx.action.conntrack.CtActionsBuilder ctActionsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight
120             .openflowjava.nx.action.rev140421.ofj.nx.action.conntrack.grouping.nx.action.conntrack.CtActionsBuilder()
121             .setOfpactActions(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofpact
122                     .actions.ofpact.actions.NxActionNatCaseBuilder().setNxActionNat(nxActionNatBuilder.build())
123                     .build());
124         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.action.rev140421.ofj.nx.action.conntrack
125             .grouping.nx.action.conntrack.CtActions> ctActions = new ArrayList<>();
126         ctActions.add(ctActionsBuilder.build());
127         final NxActionConntrackBuilder nxActionConntrackBuilder = new NxActionConntrackBuilder()
128                 .setConntrackZone(1)
129                 .setFlags(1)
130                 .setRecircTable((short) 1)
131                 .setZoneSrc(1L)
132                 .setCtActions(ctActions);
133
134         final ActionConntrackBuilder actionConntrackBuilder = new ActionConntrackBuilder()
135                 .setNxActionConntrack(nxActionConntrackBuilder.build());
136
137         final ActionBuilder actionBuilder = new ActionBuilder()
138                 .setActionChoice(actionConntrackBuilder.build());
139
140         final Action groupingAction = actionBuilder.build();
141
142         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action
143                 = conntrackConvertor.convert(groupingAction, ActionPath.INVENTORY_FLOWNODE_TABLE_WRITE_ACTIONS);
144         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action1
145                 = conntrackConvertor.convert(groupingAction, ActionPath.FLOWS_STATISTICS_UPDATE_WRITE_ACTIONS);
146         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action2
147                 = conntrackConvertor.convert(groupingAction, ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS);
148         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action3
149                 = conntrackConvertor.convert(groupingAction, ActionPath.GROUP_DESC_STATS_UPDATED_BUCKET_ACTION);
150         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action4
151                 = conntrackConvertor.convert(groupingAction, ActionPath.FLOWS_STATISTICS_RPC_WRITE_ACTIONS);
152         final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action5
153                 = conntrackConvertor.convert(groupingAction, ActionPath.FLOWS_STATISTICS_RPC_APPLY_ACTIONS);
154
155         Assert.assertEquals(1, ((NxActionConntrackNodesNodeTableFlowWriteActionsCase) action).getNxConntrack()
156                 .getConntrackZone().longValue());
157         Assert.assertEquals(1L, ((NxActionConntrackNodesNodeTableFlowWriteActionsCase) action).getNxConntrack()
158                 .getZoneSrc().longValue());
159         Assert.assertEquals(1, ((NxActionConntrackNodesNodeTableFlowWriteActionsCase) action).getNxConntrack()
160                 .getRecircTable().intValue());
161         Assert.assertEquals(1, ((NxActionConntrackNodesNodeTableFlowWriteActionsCase) action).getNxConntrack()
162                 .getFlags().intValue());
163
164         NxActionNat natActionCase = ((NxActionNatCase)((NxActionConntrackNodesNodeTableFlowWriteActionsCase)action)
165                .getNxConntrack().getCtActions().get(0).getOfpactActions()).getNxActionNat();
166         Assert.assertEquals(1, natActionCase.getFlags().shortValue());
167         Assert.assertEquals(2, natActionCase.getRangePresent().intValue());
168         Assert.assertEquals("192.168.0.0", natActionCase.getIpAddressMin().getIpv4Address().getValue());
169         Assert.assertEquals("192.168.10.0", natActionCase.getIpAddressMax().getIpv4Address().getValue());
170         Assert.assertEquals(3000, natActionCase.getPortMin().shortValue());
171         Assert.assertEquals(4000, natActionCase.getPortMax().shortValue());
172
173         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCase) action1)
174                 .getNxConntrack().getConntrackZone().longValue());
175         Assert.assertEquals(1L, ((NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCase) action1)
176                 .getNxConntrack().getZoneSrc().longValue());
177         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCase) action1)
178                 .getNxConntrack().getRecircTable().intValue());
179         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateWriteActionsCase) action1)
180                 .getNxConntrack().getFlags().intValue());
181
182         NxActionNat natActionCase1 = ((NxActionNatCase)((NxActionConntrackNodesNodeTableFlowWriteActionsCase)action)
183                 .getNxConntrack().getCtActions().get(0).getOfpactActions()).getNxActionNat();
184         Assert.assertEquals(1, natActionCase1.getFlags().shortValue());
185         Assert.assertEquals(2, natActionCase1.getRangePresent().intValue());
186         Assert.assertEquals("192.168.0.0", natActionCase1.getIpAddressMin().getIpv4Address().getValue());
187         Assert.assertEquals("192.168.10.0", natActionCase1.getIpAddressMax().getIpv4Address().getValue());
188         Assert.assertEquals(3000, natActionCase1.getPortMin().shortValue());
189         Assert.assertEquals(4000, natActionCase1.getPortMax().shortValue());
190
191         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCase) action2)
192                 .getNxConntrack().getConntrackZone().longValue());
193         Assert.assertEquals(1L, ((NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCase) action2)
194                 .getNxConntrack().getZoneSrc().longValue());
195         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCase) action2)
196                 .getNxConntrack().getRecircTable().intValue());
197         Assert.assertEquals(1, ((NxActionConntrackNotifFlowsStatisticsUpdateApplyActionsCase) action2)
198                 .getNxConntrack().getFlags().intValue());
199
200         NxActionNat natActionCase2 = ((NxActionNatCase)((NxActionConntrackNodesNodeTableFlowWriteActionsCase)action)
201                 .getNxConntrack().getCtActions().get(0).getOfpactActions()).getNxActionNat();
202         Assert.assertEquals(1, natActionCase2.getFlags().shortValue());
203         Assert.assertEquals(2, natActionCase2.getRangePresent().intValue());
204         Assert.assertEquals("192.168.0.0", natActionCase2.getIpAddressMin().getIpv4Address().getValue());
205         Assert.assertEquals("192.168.10.0", natActionCase2.getIpAddressMax().getIpv4Address().getValue());
206         Assert.assertEquals(3000, natActionCase2.getPortMin().shortValue());
207         Assert.assertEquals(4000, natActionCase2.getPortMax().shortValue());
208
209         NxActionNat natActionCase3 = ((NxActionNatCase)((NxActionConntrackNodesNodeTableFlowWriteActionsCase)action)
210                 .getNxConntrack().getCtActions().get(0).getOfpactActions()).getNxActionNat();
211         Assert.assertEquals(1, natActionCase3.getFlags().shortValue());
212         Assert.assertEquals(2, natActionCase3.getRangePresent().intValue());
213         Assert.assertEquals("192.168.0.0", natActionCase3.getIpAddressMin().getIpv4Address().getValue());
214         Assert.assertEquals("192.168.10.0", natActionCase3.getIpAddressMax().getIpv4Address().getValue());
215         Assert.assertEquals(3000, natActionCase3.getPortMin().shortValue());
216         Assert.assertEquals(4000, natActionCase3.getPortMax().shortValue());
217
218         Assert.assertEquals(1, ((NxActionConntrackNotifGroupDescStatsUpdatedCase) action3).getNxConntrack()
219                 .getConntrackZone().longValue());
220         Assert.assertEquals(1L, ((NxActionConntrackNotifGroupDescStatsUpdatedCase) action3).getNxConntrack()
221                 .getZoneSrc().longValue());
222         Assert.assertEquals(1, ((NxActionConntrackNotifGroupDescStatsUpdatedCase) action3).getNxConntrack()
223                 .getRecircTable().intValue());
224         Assert.assertEquals(1, ((NxActionConntrackNotifGroupDescStatsUpdatedCase) action3).getNxConntrack()
225                 .getFlags().intValue());
226
227         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateWriteActionsCase) action4)
228                 .getNxConntrack().getConntrackZone().longValue());
229         Assert.assertEquals(1L, ((NxActionConntrackNotifDirectStatisticsUpdateWriteActionsCase) action4)
230                 .getNxConntrack().getZoneSrc().longValue());
231         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateWriteActionsCase) action4)
232                 .getNxConntrack().getRecircTable().intValue());
233         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateWriteActionsCase) action4)
234                 .getNxConntrack().getFlags().intValue());
235
236         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateApplyActionsCase) action5).getNxConntrack()
237                 .getConntrackZone().longValue());
238         Assert.assertEquals(1L, ((NxActionConntrackNotifDirectStatisticsUpdateApplyActionsCase) action5)
239                 .getNxConntrack().getZoneSrc().longValue());
240         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateApplyActionsCase) action5).getNxConntrack()
241                 .getRecircTable().intValue());
242         Assert.assertEquals(1, ((NxActionConntrackNotifDirectStatisticsUpdateApplyActionsCase) action5).getNxConntrack()
243                 .getFlags().intValue());
244     }
245 }