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