Bug 1764 - moved Session related interfaces to openflowplugin-api
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / translator / FlowRemovedTranslatorTest.java
1 /*
2  * Copyright (c) 2014 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 package org.opendaylight.openflowplugin.openflow.md.core.translator;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.mockito.Mockito.when;
13
14 import java.math.BigInteger;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Map;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.MockitoAnnotations;
23 import org.mockito.runners.MockitoJUnitRunner;
24 import org.opendaylight.openflowplugin.api.OFConstants;
25 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;
26 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
27 import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor;
28 import org.opendaylight.openflowplugin.openflow.md.core.extension.ExtensionConverterManagerImpl;
29 import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext;
30 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionManagerOFImpl;
31 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.mod.removed.Match;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ProtocolMatchFields;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4Match;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Tunnel;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatch;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelIpv4Dst;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelIpv4Src;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
124 import org.opendaylight.yangtools.yang.binding.Augmentation;
125 import org.opendaylight.yangtools.yang.binding.DataObject;
126
127 @RunWith(MockitoJUnitRunner.class)
128 public class FlowRemovedTranslatorTest extends FlowRemovedTranslator {
129
130     private static final FlowRemovedTranslator flowRemovedTranslator = new FlowRemovedTranslator();
131     private static final BigInteger DATA_PATH_ID = BigInteger.valueOf(42);
132
133     @MockitoAnnotations.Mock
134     SwitchConnectionDistinguisher switchConnectionDistinguisher;
135
136     @MockitoAnnotations.Mock
137     SessionContext sessionContext;
138
139     @MockitoAnnotations.Mock
140     FlowRemovedMessage msg;
141
142     @MockitoAnnotations.Mock
143     ConnectionConductor connectionConductor;
144
145     @MockitoAnnotations.Mock
146     GetFeaturesOutput featuresOutput;
147
148     private static final MacAddress MAC_ADDRESS = new MacAddress("00:01:02:03:04:05");
149
150
151     private static Map<Class<? extends MatchField>, Object> fieldClassesAndAugmentations = new HashMap<>();
152
153     private void setupClassAndAugmentationMap() {
154
155         PortNumberMatchEntryBuilder portNumberMatchEntryBuilder = new PortNumberMatchEntryBuilder();
156         portNumberMatchEntryBuilder.setPortNumber(new PortNumber((long) 42));
157         fieldClassesAndAugmentations.put(InPort.class, portNumberMatchEntryBuilder.build());
158         fieldClassesAndAugmentations.put(InPhyPort.class, portNumberMatchEntryBuilder.build());
159
160         MetadataMatchEntryBuilder metadataMatchEntryBuilder = new MetadataMatchEntryBuilder();
161         metadataMatchEntryBuilder.setMetadata(new byte[0]);
162         fieldClassesAndAugmentations.put(Metadata.class, metadataMatchEntryBuilder.build());
163
164         MaskMatchEntryBuilder maskMatchEntryBuilder = new MaskMatchEntryBuilder();
165         maskMatchEntryBuilder.setMask(new byte[24]);
166
167         EthTypeMatchEntryBuilder ethTypeMatchEntryBuilder = new EthTypeMatchEntryBuilder();
168         ethTypeMatchEntryBuilder.setEthType(new EtherType(6));
169         fieldClassesAndAugmentations.put(EthType.class, ethTypeMatchEntryBuilder.build());
170
171         VlanVidMatchEntryBuilder vlanVidMatchEntryBuilder = new VlanVidMatchEntryBuilder();
172         vlanVidMatchEntryBuilder.setCfiBit(true);
173         vlanVidMatchEntryBuilder.setVlanVid(42);
174         fieldClassesAndAugmentations.put(VlanVid.class, vlanVidMatchEntryBuilder.build());
175
176         VlanPcpMatchEntryBuilder vlanPcpMatchEntryBuilder = new VlanPcpMatchEntryBuilder();
177         vlanPcpMatchEntryBuilder.setVlanPcp((short) 7);
178         fieldClassesAndAugmentations.put(VlanPcp.class, vlanPcpMatchEntryBuilder.build());
179
180         DscpMatchEntryBuilder dscpMatchEntryBuilder = new DscpMatchEntryBuilder();
181         dscpMatchEntryBuilder.setDscp(new Dscp((short) 10));
182         fieldClassesAndAugmentations.put(IpDscp.class, dscpMatchEntryBuilder.build());
183
184         EcnMatchEntryBuilder ecnMatchEntryBuilder = new EcnMatchEntryBuilder();
185         ecnMatchEntryBuilder.setEcn((short) 10);
186         fieldClassesAndAugmentations.put(IpEcn.class, ecnMatchEntryBuilder.build());
187
188         ProtocolNumberMatchEntryBuilder protocolNumberMatchEntryBuilder = new ProtocolNumberMatchEntryBuilder();
189         protocolNumberMatchEntryBuilder.setProtocolNumber(OFConstants.OFP_VERSION_1_3);
190         fieldClassesAndAugmentations.put(IpProto.class, protocolNumberMatchEntryBuilder.build());
191
192         PortMatchEntryBuilder portMatchEntryBuilder = new PortMatchEntryBuilder();
193         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber port = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber(43);
194         portMatchEntryBuilder.setPort(port);
195         fieldClassesAndAugmentations.put(TcpSrc.class, portMatchEntryBuilder.build());
196         fieldClassesAndAugmentations.put(TcpDst.class, portMatchEntryBuilder.build());
197         fieldClassesAndAugmentations.put(UdpSrc.class, portMatchEntryBuilder.build());
198         fieldClassesAndAugmentations.put(UdpDst.class, portMatchEntryBuilder.build());
199         fieldClassesAndAugmentations.put(SctpSrc.class, portMatchEntryBuilder.build());
200         fieldClassesAndAugmentations.put(SctpDst.class, portMatchEntryBuilder.build());
201
202         Icmpv4TypeMatchEntryBuilder icmpv4TypeMatchEntryBuilder = new Icmpv4TypeMatchEntryBuilder();
203         icmpv4TypeMatchEntryBuilder.setIcmpv4Type((short) 10);
204         fieldClassesAndAugmentations.put(Icmpv4Type.class, icmpv4TypeMatchEntryBuilder.build());
205
206         Icmpv4CodeMatchEntryBuilder icmpv4CodeMatchEntryBuilder = new Icmpv4CodeMatchEntryBuilder();
207         icmpv4CodeMatchEntryBuilder.setIcmpv4Code((short) 10);
208         fieldClassesAndAugmentations.put(Icmpv4Code.class, icmpv4CodeMatchEntryBuilder.build());
209
210         Icmpv6TypeMatchEntryBuilder icmpv6TypeMatchEntryBuilder = new Icmpv6TypeMatchEntryBuilder();
211         icmpv6TypeMatchEntryBuilder.setIcmpv6Type((short) 10);
212         fieldClassesAndAugmentations.put(Icmpv6Type.class, icmpv6TypeMatchEntryBuilder.build());
213
214         Icmpv6CodeMatchEntryBuilder icmpv6CodeMatchEntryBuilder = new Icmpv6CodeMatchEntryBuilder();
215         icmpv6CodeMatchEntryBuilder.setIcmpv6Code((short) 10);
216         fieldClassesAndAugmentations.put(Icmpv6Code.class, icmpv6CodeMatchEntryBuilder.build());
217
218
219         OpCodeMatchEntryBuilder opCodeMatchEntryBuilder = new OpCodeMatchEntryBuilder();
220         opCodeMatchEntryBuilder.setOpCode(42);
221         fieldClassesAndAugmentations.put(ArpOp.class, opCodeMatchEntryBuilder.build());
222
223
224         MacAddressMatchEntryBuilder macAddressMatchEntryBuilder = new MacAddressMatchEntryBuilder();
225         macAddressMatchEntryBuilder.setMacAddress(MAC_ADDRESS);
226         fieldClassesAndAugmentations.put(ArpSha.class, macAddressMatchEntryBuilder.build());
227         fieldClassesAndAugmentations.put(ArpTha.class, macAddressMatchEntryBuilder.build());
228         fieldClassesAndAugmentations.put(EthDst.class, macAddressMatchEntryBuilder.build());
229         fieldClassesAndAugmentations.put(EthSrc.class, macAddressMatchEntryBuilder.build());
230
231
232         Ipv6FlabelMatchEntryBuilder ipv6FlabelMatchEntryBuilder = new Ipv6FlabelMatchEntryBuilder();
233         ipv6FlabelMatchEntryBuilder.setIpv6Flabel(new Ipv6FlowLabel((long) 42));
234         fieldClassesAndAugmentations.put(Ipv6Flabel.class, ipv6FlabelMatchEntryBuilder.build());
235
236         Ipv6AddressMatchEntryBuilder ipv6AddressMatchEntryBuilder = new Ipv6AddressMatchEntryBuilder();
237         ipv6AddressMatchEntryBuilder.setIpv6Address(new Ipv6Address("2001:0DB8:AC10:FE01:0000:0000:0000:0000"));
238         fieldClassesAndAugmentations.put(Ipv6NdTarget.class, ipv6AddressMatchEntryBuilder.build());
239
240         fieldClassesAndAugmentations.put(Ipv6NdSll.class, macAddressMatchEntryBuilder.build());
241         fieldClassesAndAugmentations.put(Ipv6NdTll.class, macAddressMatchEntryBuilder.build());
242         fieldClassesAndAugmentations.put(Ipv6Exthdr.class, macAddressMatchEntryBuilder.build());
243
244         PseudoFieldMatchEntryBuilder pseudoFieldMatchEntryBuilder = new PseudoFieldMatchEntryBuilder();
245         pseudoFieldMatchEntryBuilder.setPseudoField(new Ipv6ExthdrFlags(true, true, true, true, true, true, true, true, true));
246         fieldClassesAndAugmentations.put(Ipv6Exthdr.class, pseudoFieldMatchEntryBuilder.build());
247
248         MplsLabelMatchEntryBuilder mplsLabelMatchEntryBuilder = new MplsLabelMatchEntryBuilder();
249         mplsLabelMatchEntryBuilder.setMplsLabel((long) 42);
250         fieldClassesAndAugmentations.put(MplsLabel.class, mplsLabelMatchEntryBuilder.build());
251
252         TcMatchEntryBuilder tcMatchEntryBuilder = new TcMatchEntryBuilder();
253         tcMatchEntryBuilder.setTc((short) 0);
254         fieldClassesAndAugmentations.put(MplsTc.class, tcMatchEntryBuilder.build());
255
256         BosMatchEntryBuilder bosMatchEntryBuilder = new BosMatchEntryBuilder();
257         bosMatchEntryBuilder.setBos(false);
258         fieldClassesAndAugmentations.put(MplsBos.class, bosMatchEntryBuilder.build());
259
260         IsidMatchEntryBuilder isidMatchEntryBuilder = new IsidMatchEntryBuilder();
261         isidMatchEntryBuilder.setIsid((long) 42);
262         fieldClassesAndAugmentations.put(PbbIsid.class, isidMatchEntryBuilder.build());
263
264         fieldClassesAndAugmentations.put(TunnelId.class, metadataMatchEntryBuilder.build());
265
266         Ipv4AddressMatchEntryBuilder ipv4AddressMatchEntryBuilder = new Ipv4AddressMatchEntryBuilder();
267         ipv4AddressMatchEntryBuilder.setIpv4Address(new Ipv4Address("10.0.0.1/24"));
268         fieldClassesAndAugmentations.put(ArpTpa.class, ipv4AddressMatchEntryBuilder.build());
269         fieldClassesAndAugmentations.put(ArpSpa.class, ipv4AddressMatchEntryBuilder.build());
270
271         fieldClassesAndAugmentations.put(Ipv4Src.class, ipv4AddressMatchEntryBuilder.build());
272         fieldClassesAndAugmentations.put(Ipv4Dst.class, ipv4AddressMatchEntryBuilder.build());
273
274
275         fieldClassesAndAugmentations.put(TunnelIpv4Src.class, ipv4AddressMatchEntryBuilder.build());
276         fieldClassesAndAugmentations.put(TunnelIpv4Dst.class, ipv4AddressMatchEntryBuilder.build());
277         fieldClassesAndAugmentations.put(Ipv6Src.class, ipv6AddressMatchEntryBuilder.build());
278         fieldClassesAndAugmentations.put(Ipv6Dst.class, ipv6AddressMatchEntryBuilder.build());
279     }
280
281
282     @Before
283     public void setup() {
284         when(sessionContext.getPrimaryConductor()).thenReturn(connectionConductor);
285         when(connectionConductor.getVersion()).thenReturn(OFConstants.OFP_VERSION_1_3);
286         when(sessionContext.getFeatures()).thenReturn(featuresOutput);
287         when(featuresOutput.getDatapathId()).thenReturn(DATA_PATH_ID);
288         OpenflowPortsUtil.init();
289         ExtensionConverterManagerImpl extensionConverterProvider = new ExtensionConverterManagerImpl();
290         //extensionConverterProvider.registerMatchConvertor()
291         SessionManagerOFImpl.getInstance().setExtensionConverterProvider(extensionConverterProvider);
292     }
293
294     @Test
295     public void testTranslate() throws Exception {
296         List<DataObject> dataObjectList = flowRemovedTranslator.translate(switchConnectionDistinguisher, sessionContext, msg);
297         assertNotNull(dataObjectList);
298     }
299
300     @Test
301     public void testFromMatch() throws Exception {
302         setupClassAndAugmentationMap();
303         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder matchBuilder = new MatchBuilder();
304         List<MatchEntries> matchEntrieses = new ArrayList<>();
305         for (Map.Entry entry : fieldClassesAndAugmentations.entrySet()) {
306             MatchEntriesBuilder matchEntriesBuilder = new MatchEntriesBuilder();
307             matchEntriesBuilder.setOxmMatchField((Class<? extends MatchField>) entry.getKey());
308             if (entry.getValue() != null) {
309                 matchEntriesBuilder.addAugmentation((Class<? extends Augmentation<MatchEntries>>) entry.getValue().getClass().getInterfaces()[0], (Augmentation<MatchEntries>) entry.getValue());
310             }
311             matchEntriesBuilder.setHasMask(false);
312             matchEntrieses.add(matchEntriesBuilder.build());
313         }
314         matchBuilder.setMatchEntries(matchEntrieses);
315         Match match = flowRemovedTranslator.fromMatch(matchBuilder.build(), DATA_PATH_ID, OpenflowVersion.OF13);
316         assertNotNull(match);
317         assertEthernetMatch(match.getEthernetMatch());
318         assertIcmpV4Match(match.getIcmpv4Match());
319
320         assertEquals("openflow:42:42", match.getInPhyPort().getValue());
321         assertEquals("openflow:42:42", match.getInPort().getValue());
322         assertIpMatch(match.getIpMatch());
323
324         assertNotNull(match.getLayer3Match());
325         assertNotNull(match.getLayer4Match());
326
327         assertProtocolMatchFields(match.getProtocolMatchFields());
328
329         assertMetada(match.getMetadata());
330
331         assertTunnelMatch(match.getTunnel());
332
333         assertVlanMatch(match.getVlanMatch());
334     }
335
336     private void assertTunnelMatch(Tunnel tunnel) {
337         assertEquals(0, tunnel.getTunnelId().intValue());
338     }
339
340     private void assertVlanMatch(VlanMatch vlanMatch) {
341         assertEquals(true, vlanMatch.getVlanId().isVlanIdPresent());
342         assertEquals(new Integer(42), vlanMatch.getVlanId().getVlanId().getValue());
343
344         assertEquals((short) 7, vlanMatch.getVlanPcp().getValue().shortValue());
345     }
346
347     private void assertMetada(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
348         assertEquals(0, metadata.getMetadata().intValue());
349     }
350
351     private void assertProtocolMatchFields(ProtocolMatchFields protocolMatchFields) {
352         assertEquals((short) 0, protocolMatchFields.getMplsBos().shortValue());
353         assertEquals(42, protocolMatchFields.getMplsLabel().longValue());
354         assertEquals((short) 0, protocolMatchFields.getMplsTc().shortValue());
355         assertEquals(42, protocolMatchFields.getPbb().getPbbIsid().longValue());
356     }
357
358     private void assertIpMatch(IpMatch ipMatch) {
359         assertEquals(10, ipMatch.getIpDscp().getValue().longValue());
360         assertEquals(10, ipMatch.getIpEcn().shortValue());
361         assertEquals(4, ipMatch.getIpProtocol().shortValue());
362     }
363
364     private void assertIcmpV4Match(Icmpv4Match icmpv4Match) {
365         assertEquals(10, icmpv4Match.getIcmpv4Code().longValue());
366         assertEquals(10, icmpv4Match.getIcmpv4Type().longValue());
367     }
368
369     private void assertEthernetMatch(EthernetMatch ethernetMatch) {
370         assertEquals(MAC_ADDRESS, ethernetMatch.getEthernetDestination().getAddress());
371         assertEquals(MAC_ADDRESS, ethernetMatch.getEthernetSource().getAddress());
372         assertEquals(new Long(6), ethernetMatch.getEthernetType().getType().getValue());
373     }
374
375     @Test
376     public void MatchEntryToIpv4PrefixTest() {
377         Ipv4AddressMatchEntry ipv4AddressMatchEntry = new Ipv4AddressMatchEntryBuilder()
378                 .setIpv4Address(new Ipv4Address("10.0.0.0")).build();
379         byte[] maskBytes = new byte[1];
380         maskBytes[0] = (byte) 255;
381         MaskMatchEntry maskMatchEntry = new MaskMatchEntryBuilder().setMask(maskBytes).build();
382         MatchEntries entry = new MatchEntriesBuilder().setOxmMatchField(Ipv4Src.class)
383                 .addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressMatchEntry)
384                 .addAugmentation(MaskMatchEntry.class, maskMatchEntry).setHasMask(true).build();
385         Ipv4Prefix ipv4Prefix = toIpv4Prefix(entry);
386         assertEquals("10.0.0.0/8", ipv4Prefix.getValue());
387     }
388
389     @Test
390     public void MatchEntryToIpv6PrefixTest() {
391         Ipv6AddressMatchEntry ipv6AddressMatchEntry = new Ipv6AddressMatchEntryBuilder()
392                 .setIpv6Address(new Ipv6Address("1234:5678:9ABC:DEF0:FDCD:A987:6543:0")).build();
393         byte[] maskBytes = new byte[1];
394         maskBytes[0] = (byte) 255;
395         MaskMatchEntry maskMatchEntry = new MaskMatchEntryBuilder().setMask(maskBytes).build();
396         MatchEntries entry = new MatchEntriesBuilder().setOxmMatchField(Ipv6Src.class)
397                 .addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressMatchEntry)
398                 .addAugmentation(MaskMatchEntry.class, maskMatchEntry).setHasMask(true).build();
399         Ipv6Prefix ipv6Prefix = toIpv6Prefix(entry);
400         assertEquals("1234:5678:9ABC:DEF0:FDCD:A987:6543:0/8", ipv6Prefix.getValue());
401     }
402
403 }