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.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;
127 @RunWith(MockitoJUnitRunner.class)
128 public class FlowRemovedTranslatorTest extends FlowRemovedTranslator {
130 private static final FlowRemovedTranslator flowRemovedTranslator = new FlowRemovedTranslator();
131 private static final BigInteger DATA_PATH_ID = BigInteger.valueOf(42);
133 @MockitoAnnotations.Mock
134 SwitchConnectionDistinguisher switchConnectionDistinguisher;
136 @MockitoAnnotations.Mock
137 SessionContext sessionContext;
139 @MockitoAnnotations.Mock
140 FlowRemovedMessage msg;
142 @MockitoAnnotations.Mock
143 ConnectionConductor connectionConductor;
145 @MockitoAnnotations.Mock
146 GetFeaturesOutput featuresOutput;
148 private static final MacAddress MAC_ADDRESS = new MacAddress("00:01:02:03:04:05");
151 private static Map<Class<? extends MatchField>, Object> fieldClassesAndAugmentations = new HashMap<>();
153 private void setupClassAndAugmentationMap() {
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());
160 MetadataMatchEntryBuilder metadataMatchEntryBuilder = new MetadataMatchEntryBuilder();
161 metadataMatchEntryBuilder.setMetadata(new byte[0]);
162 fieldClassesAndAugmentations.put(Metadata.class, metadataMatchEntryBuilder.build());
164 MaskMatchEntryBuilder maskMatchEntryBuilder = new MaskMatchEntryBuilder();
165 maskMatchEntryBuilder.setMask(new byte[24]);
167 EthTypeMatchEntryBuilder ethTypeMatchEntryBuilder = new EthTypeMatchEntryBuilder();
168 ethTypeMatchEntryBuilder.setEthType(new EtherType(6));
169 fieldClassesAndAugmentations.put(EthType.class, ethTypeMatchEntryBuilder.build());
171 VlanVidMatchEntryBuilder vlanVidMatchEntryBuilder = new VlanVidMatchEntryBuilder();
172 vlanVidMatchEntryBuilder.setCfiBit(true);
173 vlanVidMatchEntryBuilder.setVlanVid(42);
174 fieldClassesAndAugmentations.put(VlanVid.class, vlanVidMatchEntryBuilder.build());
176 VlanPcpMatchEntryBuilder vlanPcpMatchEntryBuilder = new VlanPcpMatchEntryBuilder();
177 vlanPcpMatchEntryBuilder.setVlanPcp((short) 7);
178 fieldClassesAndAugmentations.put(VlanPcp.class, vlanPcpMatchEntryBuilder.build());
180 DscpMatchEntryBuilder dscpMatchEntryBuilder = new DscpMatchEntryBuilder();
181 dscpMatchEntryBuilder.setDscp(new Dscp((short) 10));
182 fieldClassesAndAugmentations.put(IpDscp.class, dscpMatchEntryBuilder.build());
184 EcnMatchEntryBuilder ecnMatchEntryBuilder = new EcnMatchEntryBuilder();
185 ecnMatchEntryBuilder.setEcn((short) 10);
186 fieldClassesAndAugmentations.put(IpEcn.class, ecnMatchEntryBuilder.build());
188 ProtocolNumberMatchEntryBuilder protocolNumberMatchEntryBuilder = new ProtocolNumberMatchEntryBuilder();
189 protocolNumberMatchEntryBuilder.setProtocolNumber(OFConstants.OFP_VERSION_1_3);
190 fieldClassesAndAugmentations.put(IpProto.class, protocolNumberMatchEntryBuilder.build());
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());
202 Icmpv4TypeMatchEntryBuilder icmpv4TypeMatchEntryBuilder = new Icmpv4TypeMatchEntryBuilder();
203 icmpv4TypeMatchEntryBuilder.setIcmpv4Type((short) 10);
204 fieldClassesAndAugmentations.put(Icmpv4Type.class, icmpv4TypeMatchEntryBuilder.build());
206 Icmpv4CodeMatchEntryBuilder icmpv4CodeMatchEntryBuilder = new Icmpv4CodeMatchEntryBuilder();
207 icmpv4CodeMatchEntryBuilder.setIcmpv4Code((short) 10);
208 fieldClassesAndAugmentations.put(Icmpv4Code.class, icmpv4CodeMatchEntryBuilder.build());
210 Icmpv6TypeMatchEntryBuilder icmpv6TypeMatchEntryBuilder = new Icmpv6TypeMatchEntryBuilder();
211 icmpv6TypeMatchEntryBuilder.setIcmpv6Type((short) 10);
212 fieldClassesAndAugmentations.put(Icmpv6Type.class, icmpv6TypeMatchEntryBuilder.build());
214 Icmpv6CodeMatchEntryBuilder icmpv6CodeMatchEntryBuilder = new Icmpv6CodeMatchEntryBuilder();
215 icmpv6CodeMatchEntryBuilder.setIcmpv6Code((short) 10);
216 fieldClassesAndAugmentations.put(Icmpv6Code.class, icmpv6CodeMatchEntryBuilder.build());
219 OpCodeMatchEntryBuilder opCodeMatchEntryBuilder = new OpCodeMatchEntryBuilder();
220 opCodeMatchEntryBuilder.setOpCode(42);
221 fieldClassesAndAugmentations.put(ArpOp.class, opCodeMatchEntryBuilder.build());
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());
232 Ipv6FlabelMatchEntryBuilder ipv6FlabelMatchEntryBuilder = new Ipv6FlabelMatchEntryBuilder();
233 ipv6FlabelMatchEntryBuilder.setIpv6Flabel(new Ipv6FlowLabel((long) 42));
234 fieldClassesAndAugmentations.put(Ipv6Flabel.class, ipv6FlabelMatchEntryBuilder.build());
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());
240 fieldClassesAndAugmentations.put(Ipv6NdSll.class, macAddressMatchEntryBuilder.build());
241 fieldClassesAndAugmentations.put(Ipv6NdTll.class, macAddressMatchEntryBuilder.build());
242 fieldClassesAndAugmentations.put(Ipv6Exthdr.class, macAddressMatchEntryBuilder.build());
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());
248 MplsLabelMatchEntryBuilder mplsLabelMatchEntryBuilder = new MplsLabelMatchEntryBuilder();
249 mplsLabelMatchEntryBuilder.setMplsLabel((long) 42);
250 fieldClassesAndAugmentations.put(MplsLabel.class, mplsLabelMatchEntryBuilder.build());
252 TcMatchEntryBuilder tcMatchEntryBuilder = new TcMatchEntryBuilder();
253 tcMatchEntryBuilder.setTc((short) 0);
254 fieldClassesAndAugmentations.put(MplsTc.class, tcMatchEntryBuilder.build());
256 BosMatchEntryBuilder bosMatchEntryBuilder = new BosMatchEntryBuilder();
257 bosMatchEntryBuilder.setBos(false);
258 fieldClassesAndAugmentations.put(MplsBos.class, bosMatchEntryBuilder.build());
260 IsidMatchEntryBuilder isidMatchEntryBuilder = new IsidMatchEntryBuilder();
261 isidMatchEntryBuilder.setIsid((long) 42);
262 fieldClassesAndAugmentations.put(PbbIsid.class, isidMatchEntryBuilder.build());
264 fieldClassesAndAugmentations.put(TunnelId.class, metadataMatchEntryBuilder.build());
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());
271 fieldClassesAndAugmentations.put(Ipv4Src.class, ipv4AddressMatchEntryBuilder.build());
272 fieldClassesAndAugmentations.put(Ipv4Dst.class, ipv4AddressMatchEntryBuilder.build());
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());
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);
295 public void testTranslate() throws Exception {
296 List<DataObject> dataObjectList = flowRemovedTranslator.translate(switchConnectionDistinguisher, sessionContext, msg);
297 assertNotNull(dataObjectList);
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());
311 matchEntriesBuilder.setHasMask(false);
312 matchEntrieses.add(matchEntriesBuilder.build());
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());
320 assertEquals("openflow:42:42", match.getInPhyPort().getValue());
321 assertEquals("openflow:42:42", match.getInPort().getValue());
322 assertIpMatch(match.getIpMatch());
324 assertNotNull(match.getLayer3Match());
325 assertNotNull(match.getLayer4Match());
327 assertProtocolMatchFields(match.getProtocolMatchFields());
329 assertMetada(match.getMetadata());
331 assertTunnelMatch(match.getTunnel());
333 assertVlanMatch(match.getVlanMatch());
336 private void assertTunnelMatch(Tunnel tunnel) {
337 assertEquals(0, tunnel.getTunnelId().intValue());
340 private void assertVlanMatch(VlanMatch vlanMatch) {
341 assertEquals(true, vlanMatch.getVlanId().isVlanIdPresent());
342 assertEquals(new Integer(42), vlanMatch.getVlanId().getVlanId().getValue());
344 assertEquals((short) 7, vlanMatch.getVlanPcp().getValue().shortValue());
347 private void assertMetada(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Metadata metadata) {
348 assertEquals(0, metadata.getMetadata().intValue());
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());
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());
364 private void assertIcmpV4Match(Icmpv4Match icmpv4Match) {
365 assertEquals(10, icmpv4Match.getIcmpv4Code().longValue());
366 assertEquals(10, icmpv4Match.getIcmpv4Type().longValue());
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());
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());
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());