09da99443dbd04352634b1a7882fd0d4bc89b738
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / match / MatchConvertorImpl2Test.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match;\r
10 \r
11 import java.math.BigInteger;\r
12 import java.util.List;\r
13 import org.junit.Assert;\r
14 import org.junit.Before;\r
15 import org.junit.Test;\r
16 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.*;\r
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DottedQuad;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpSourceHardwareAddressBuilder;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.arp.match.fields.ArpTargetHardwareAddressBuilder;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6ExtHeaderBuilder;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ipv6.match.fields.Ipv6LabelBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv4MatchBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.ProtocolMatchFieldsBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMaskBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchArbitraryBitMaskBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatchBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.protocol.match.fields.PbbBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.opendaylight.ipv6.arbitrary.bitmask.fields.rev160224.Ipv6ArbitraryMask;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCase;\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCase;\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCase;\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCase;\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCase;\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCase;\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCase;\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCase;\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCase;\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCase;\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCase;\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCase;\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCase;\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCase;\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCase;\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCase;\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCase;\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCase;\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCase;\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCase;\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCase;\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCase;\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCase;\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCase;\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCase;\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCase;\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCase;\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCase;\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCase;\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCase;\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCase;\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCase;\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCase;\r
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCase;\r
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCase;\r
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCase;\r
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCase;\r
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCase;\r
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCase;\r
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCase;\r
135 import java.math.BigInteger;\r
136 import java.util.List;\r
137 \r
138 /**\r
139  * @author michal.polkorab\r
140  */\r
141 public class MatchConvertorImpl2Test {\r
142 \r
143     private static final MatchConvertorImpl convertor = new MatchConvertorImpl();\r
144 \r
145     /**\r
146      * Initializes OpenflowPortsUtil\r
147      */\r
148     @Before\r
149     public void startUp() {\r
150         OpenflowPortsUtil.init();\r
151     }\r
152 \r
153     /**\r
154      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
155      */\r
156     @Test\r
157     public void testEmptyAndNullInput() {\r
158         MatchBuilder builder = new MatchBuilder();\r
159         Match match = builder.build();\r
160 \r
161         List<MatchEntry> entries = convertor.convert(null);\r
162         Assert.assertEquals("Wrong entries size", 0, entries.size());\r
163 \r
164         entries = convertor.convert(match);\r
165         Assert.assertEquals("Wrong entries size", 0, entries.size());\r
166     }\r
167 \r
168     /**\r
169      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
170      */\r
171     @Test\r
172     public void testConversion() {\r
173         MatchBuilder builder = new MatchBuilder();\r
174         builder.setInPort(new NodeConnectorId("openflow:42:1"));\r
175         builder.setInPhyPort(new NodeConnectorId("openflow:42:2"));\r
176         MetadataBuilder metadataBuilder = new MetadataBuilder();\r
177         metadataBuilder.setMetadata(new BigInteger("3"));\r
178         builder.setMetadata(metadataBuilder.build());\r
179         EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();\r
180         EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();\r
181         ethTypeBuilder.setType(new EtherType(4L));\r
182         ethernetBuilder.setEthernetType(ethTypeBuilder.build());\r
183         EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();\r
184         ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
185         ethernetBuilder.setEthernetSource(ethSrcBuilder.build());\r
186         EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();\r
187         ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
188         ethernetBuilder.setEthernetDestination(ethDstBuilder.build());\r
189         builder.setEthernetMatch(ethernetBuilder.build());\r
190         VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();\r
191         VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();\r
192         vlanIdBuilder.setVlanId(new VlanId(7));\r
193         vlanIdBuilder.setVlanIdPresent(true);\r
194         vlanBuilder.setVlanId(vlanIdBuilder.build());\r
195         vlanBuilder.setVlanPcp(new VlanPcp((short) 7));\r
196         builder.setVlanMatch(vlanBuilder.build());\r
197         IpMatchBuilder ipMatchBuilder = new IpMatchBuilder();\r
198         ipMatchBuilder.setIpDscp(new Dscp((short) 8));\r
199         ipMatchBuilder.setIpEcn((short) 9);\r
200         ipMatchBuilder.setIpProtocol((short) 10);\r
201         builder.setIpMatch(ipMatchBuilder.build());\r
202         TcpMatchBuilder tcpMatchBuilder = new TcpMatchBuilder();\r
203         tcpMatchBuilder.setTcpSourcePort(new PortNumber(11));\r
204         tcpMatchBuilder.setTcpDestinationPort(new PortNumber(12));\r
205         builder.setLayer4Match(tcpMatchBuilder.build());\r
206         Icmpv4MatchBuilder icmpv4Builder = new Icmpv4MatchBuilder();\r
207         icmpv4Builder.setIcmpv4Type((short) 13);\r
208         icmpv4Builder.setIcmpv4Code((short) 14);\r
209         builder.setIcmpv4Match(icmpv4Builder.build());\r
210         Icmpv6MatchBuilder icmpv6Builder = new Icmpv6MatchBuilder();\r
211         icmpv6Builder.setIcmpv6Type((short) 15);\r
212         icmpv6Builder.setIcmpv6Code((short) 16);\r
213         builder.setIcmpv6Match(icmpv6Builder.build());\r
214         ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();\r
215         protoBuilder.setMplsLabel(17L);\r
216         protoBuilder.setMplsTc((short) 18);\r
217         protoBuilder.setMplsBos((short) 19);\r
218         PbbBuilder pbbBuilder = new PbbBuilder();\r
219         pbbBuilder.setPbbIsid(20L);\r
220         protoBuilder.setPbb(pbbBuilder.build());\r
221         builder.setProtocolMatchFields(protoBuilder.build());\r
222         TunnelBuilder tunnelBuilder = new TunnelBuilder();\r
223         tunnelBuilder.setTunnelId(new BigInteger("21"));\r
224         builder.setTunnel(tunnelBuilder.build());\r
225         Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();\r
226         ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.1/32"));\r
227         ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.2/32"));\r
228         builder.setLayer3Match(ipv4MatchBuilder.build());\r
229         Match match = builder.build();\r
230 \r
231         List<MatchEntry> entries = convertor.convert(match);\r
232         Assert.assertEquals("Wrong entries size", 24, entries.size());\r
233         MatchEntry entry = entries.get(0);\r
234         checkEntryHeader(entry, InPort.class, false);\r
235         Assert.assertEquals("Wrong in port", 1, ((InPortCase) entry.getMatchEntryValue()).getInPort()\r
236                 .getPortNumber().getValue().intValue());\r
237 \r
238         entry = entries.get(1);\r
239         checkEntryHeader(entry, InPhyPort.class, false);\r
240         Assert.assertEquals("Wrong in phy port", 2, ((InPhyPortCase) entry.getMatchEntryValue()).\r
241                         getInPhyPort().getPortNumber().getValue().intValue());\r
242 \r
243         entry = entries.get(2);\r
244         checkEntryHeader(entry, Metadata.class, false);\r
245         Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
246                 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMetadata());\r
247         entry = entries.get(3);\r
248         checkEntryHeader(entry, EthDst.class, false);\r
249         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),\r
250                 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMacAddress());\r
251         entry = entries.get(4);\r
252         checkEntryHeader(entry, EthSrc.class, false);\r
253         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),\r
254                 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMacAddress());\r
255         entry = entries.get(5);\r
256         checkEntryHeader(entry, EthType.class, false);\r
257         Assert.assertEquals("Wrong eth type", 4, ((EthTypeCase) entry.getMatchEntryValue())\r
258                 .getEthType().getEthType().getValue().intValue());\r
259         entry = entries.get(6);\r
260         checkEntryHeader(entry, VlanVid.class, false);\r
261         Assert.assertEquals("Wrong vlan id", 7, ((VlanVidCase) entry.getMatchEntryValue())\r
262                 .getVlanVid().getVlanVid().intValue());\r
263         Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue())\r
264                 .getVlanVid().isCfiBit());\r
265         entry = entries.get(7);\r
266         checkEntryHeader(entry, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp.class, false);\r
267         Assert.assertEquals("Wrong vlan pcp", 7, ((VlanPcpCase) entry.getMatchEntryValue())\r
268                 .getVlanPcp().getVlanPcp().intValue());\r
269         entry = entries.get(8);\r
270         checkEntryHeader(entry, IpDscp.class, false);\r
271         Assert.assertEquals("Wrong ip dscp", 8, ((IpDscpCase) entry.getMatchEntryValue())\r
272                 .getIpDscp().getDscp().getValue().intValue());\r
273         entry = entries.get(9);\r
274         checkEntryHeader(entry, IpEcn.class, false);\r
275         Assert.assertEquals("Wrong ip ecn", 9, ((IpEcnCase) entry.getMatchEntryValue())\r
276                 .getIpEcn().getEcn().intValue());\r
277         entry = entries.get(10);\r
278         checkEntryHeader(entry, IpProto.class, false);\r
279         Assert.assertEquals("Wrong ip proto", 10, ((IpProtoCase) entry.getMatchEntryValue())\r
280                 .getIpProto().getProtocolNumber().intValue());\r
281         entry = entries.get(11);\r
282         checkEntryHeader(entry, TcpSrc.class, false);\r
283         Assert.assertEquals("Wrong tcp src", 11, ((TcpSrcCase) entry.getMatchEntryValue())\r
284                 .getTcpSrc().getPort().getValue().intValue());\r
285         entry = entries.get(12);\r
286         checkEntryHeader(entry, TcpDst.class, false);\r
287         Assert.assertEquals("Wrong tcp dst", 12, ((TcpDstCase) entry.getMatchEntryValue())\r
288                 .getTcpDst().getPort().getValue().intValue());\r
289         entry = entries.get(13);\r
290         checkEntryHeader(entry, Icmpv4Type.class, false);\r
291         Assert.assertEquals("Wrong icmpv4 type", 13, ((Icmpv4TypeCase) entry.getMatchEntryValue())\r
292                 .getIcmpv4Type().getIcmpv4Type().intValue());\r
293         entry = entries.get(14);\r
294         checkEntryHeader(entry, Icmpv4Code.class, false);\r
295         Assert.assertEquals("Wrong icmpv4 code", 14, ((Icmpv4CodeCase) entry.getMatchEntryValue())\r
296                 .getIcmpv4Code().getIcmpv4Code().intValue());\r
297         entry = entries.get(15);\r
298         checkEntryHeader(entry, Icmpv6Type.class, false);\r
299         Assert.assertEquals("Wrong icmpv6 type", 15, ((Icmpv6TypeCase) entry.getMatchEntryValue())\r
300                 .getIcmpv6Type().getIcmpv6Type().intValue());\r
301         entry = entries.get(16);\r
302         checkEntryHeader(entry, Icmpv6Code.class, false);\r
303         Assert.assertEquals("Wrong icmpv6 code", 16, ((Icmpv6CodeCase) entry.getMatchEntryValue())\r
304                 .getIcmpv6Code().getIcmpv6Code().intValue());\r
305         entry = entries.get(17);\r
306         checkEntryHeader(entry, Ipv4Src.class, false);\r
307         Assert.assertEquals("Wrong ipv4 src", "10.0.0.1", ((Ipv4SrcCase) entry.getMatchEntryValue())\r
308                 .getIpv4Src().getIpv4Address().getValue());\r
309         entry = entries.get(18);\r
310         checkEntryHeader(entry, Ipv4Dst.class, false);\r
311         Assert.assertEquals("Wrong ipv4 dst", "10.0.0.2", ((Ipv4DstCase) entry.getMatchEntryValue())\r
312                 .getIpv4Dst().getIpv4Address().getValue());\r
313         entry = entries.get(19);\r
314         checkEntryHeader(entry, MplsLabel.class, false);\r
315         Assert.assertEquals("Wrong mpls label", 17, ((MplsLabelCase) entry.getMatchEntryValue())\r
316                 .getMplsLabel().getMplsLabel().intValue());\r
317         entry = entries.get(20);\r
318         checkEntryHeader(entry, MplsBos.class, false);\r
319         Assert.assertEquals("Wrong mpls bos", true, ((MplsBosCase) entry.getMatchEntryValue()).getMplsBos().isBos());\r
320         entry = entries.get(21);\r
321         checkEntryHeader(entry, MplsTc.class, false);\r
322         Assert.assertEquals("Wrong mpls tc", 18, ((MplsTcCase) entry.getMatchEntryValue())\r
323                 .getMplsTc().getTc().intValue());\r
324         entry = entries.get(22);\r
325         checkEntryHeader(entry, PbbIsid.class, false);\r
326         Assert.assertEquals("Wrong pbb isid", 20, ((PbbIsidCase) entry.getMatchEntryValue())\r
327                 .getPbbIsid().getIsid().intValue());\r
328         entry = entries.get(23);\r
329         checkEntryHeader(entry, TunnelId.class, false);\r
330         Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},\r
331                 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getTunnelId());\r
332     }\r
333 \r
334     private static void checkEntryHeader(MatchEntry entry, Class<? extends MatchField> field, boolean hasMask) {\r
335         Assert.assertEquals("Wrong oxm class", OpenflowBasicClass.class, entry.getOxmClass());\r
336         Assert.assertEquals("Wrong oxm field", field, entry.getOxmMatchField());\r
337         Assert.assertEquals("Wrong hasMask", hasMask, entry.isHasMask());\r
338     }\r
339 \r
340     /**\r
341      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
342      */\r
343     @Test\r
344     public void testIpv4MatchArbitraryBitMaskwithNoMask(){\r
345         MatchBuilder builder = new MatchBuilder();\r
346         Ipv4MatchArbitraryBitMaskBuilder ipv4MatchArbitraryBitMaskBuilder= new Ipv4MatchArbitraryBitMaskBuilder();\r
347         ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceAddressNoMask( new Ipv4Address("10.2.2.2"));\r
348         ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationAddressNoMask( new Ipv4Address("10.1.1.1"));\r
349         builder.setLayer3Match(ipv4MatchArbitraryBitMaskBuilder.build());\r
350         Match match = builder.build();\r
351 \r
352         List<MatchEntry> entries = convertor.convert(match);\r
353         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
354 \r
355         MatchEntry entry = entries.get(0);\r
356         checkEntryHeader(entry,Ipv4Src.class,false);\r
357         Assert.assertEquals("wrong Ipv4Address source", "10.2.2.2",((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getIpv4Address().getValue());\r
358         entry = entries.get(1);\r
359         checkEntryHeader(entry,Ipv4Dst.class,false);\r
360         Assert.assertEquals("wrong Ipv4Address destination", "10.1.1.1",((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getIpv4Address().getValue());\r
361     }\r
362 \r
363     /**\r
364      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
365      */\r
366     @Test\r
367     public void testIpv4MatchArbitraryBitMaskwithMask(){\r
368         MatchBuilder builder = new MatchBuilder();\r
369         Ipv4MatchArbitraryBitMaskBuilder ipv4MatchArbitraryBitMaskBuilder= new Ipv4MatchArbitraryBitMaskBuilder();\r
370         ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceAddressNoMask( new Ipv4Address("10.2.2.2"));\r
371         ipv4MatchArbitraryBitMaskBuilder.setIpv4SourceArbitraryBitmask(new DottedQuad("0.0.255.0"));\r
372         ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationAddressNoMask( new Ipv4Address("10.1.1.1"));\r
373         ipv4MatchArbitraryBitMaskBuilder.setIpv4DestinationArbitraryBitmask(new DottedQuad("0.240.0.0"));\r
374         builder.setLayer3Match(ipv4MatchArbitraryBitMaskBuilder.build());\r
375         Match match = builder.build();\r
376 \r
377         List<MatchEntry> entries = convertor.convert(match);\r
378         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
379 \r
380         MatchEntry entry = entries.get(0);\r
381         checkEntryHeader(entry,Ipv4Src.class,true);\r
382         Assert.assertEquals("wrong Ipv4Address source", "10.2.2.2",((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getIpv4Address().getValue());\r
383         entry = entries.get(1);\r
384         checkEntryHeader(entry,Ipv4Dst.class,true);\r
385         Assert.assertEquals("wrong Ipv4Adress destination", "10.1.1.1",((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getIpv4Address().getValue());\r
386     }\r
387 \r
388     /**\r
389      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
390      */\r
391     @Test\r
392     public void testUdpMatchConversion() {\r
393         MatchBuilder builder = new MatchBuilder();\r
394         UdpMatchBuilder udpMatchBuilder = new UdpMatchBuilder();\r
395         udpMatchBuilder.setUdpSourcePort(new PortNumber(11));\r
396         udpMatchBuilder.setUdpDestinationPort(new PortNumber(12));\r
397         builder.setLayer4Match(udpMatchBuilder.build());\r
398         Match match = builder.build();\r
399 \r
400         List<MatchEntry> entries = convertor.convert(match);\r
401         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
402         MatchEntry entry = entries.get(0);\r
403         checkEntryHeader(entry, UdpSrc.class, false);\r
404         Assert.assertEquals("Wrong udp src", 11, ((UdpSrcCase) entry.getMatchEntryValue()).getUdpSrc()\r
405                 .getPort().getValue().intValue());\r
406         entry = entries.get(1);\r
407         checkEntryHeader(entry, UdpDst.class, false);\r
408         Assert.assertEquals("Wrong udp dst", 12, ((UdpDstCase) entry.getMatchEntryValue())\r
409                 .getUdpDst().getPort().getValue().intValue());\r
410     }\r
411 \r
412     /**\r
413      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
414      */\r
415     @Test\r
416     public void testSctpMatchConversion() {\r
417         MatchBuilder builder = new MatchBuilder();\r
418         SctpMatchBuilder sctpMatchBuilder = new SctpMatchBuilder();\r
419         sctpMatchBuilder.setSctpSourcePort(new PortNumber(11));\r
420         sctpMatchBuilder.setSctpDestinationPort(new PortNumber(12));\r
421         builder.setLayer4Match(sctpMatchBuilder.build());\r
422         Match match = builder.build();\r
423 \r
424         List<MatchEntry> entries = convertor.convert(match);\r
425         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
426         MatchEntry entry = entries.get(0);\r
427         checkEntryHeader(entry, SctpSrc.class, false);\r
428         Assert.assertEquals("Wrong sctp src", 11, ((SctpSrcCase) entry.getMatchEntryValue()).getSctpSrc()\r
429                 .getPort().getValue().intValue());\r
430         entry = entries.get(1);\r
431         checkEntryHeader(entry, SctpDst.class, false);\r
432         Assert.assertEquals("Wrong sctp dst", 12, ((SctpDstCase) entry.getMatchEntryValue())\r
433                 .getSctpDst().getPort().getValue().intValue());\r
434     }\r
435 \r
436     /**\r
437      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
438      */\r
439     @Test\r
440     public void testArpMatchConversion() {\r
441         MatchBuilder builder = new MatchBuilder();\r
442         ArpMatchBuilder arpBuilder = new ArpMatchBuilder();\r
443         arpBuilder.setArpOp(5);\r
444         arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.3/32"));\r
445         arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4/32"));\r
446         ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();\r
447         srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
448         arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());\r
449         ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();\r
450         dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
451         arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());\r
452         builder.setLayer3Match(arpBuilder.build());\r
453         Match match = builder.build();\r
454 \r
455         List<MatchEntry> entries = convertor.convert(match);\r
456         Assert.assertEquals("Wrong entries size", 5, entries.size());\r
457         MatchEntry entry = entries.get(0);\r
458         checkEntryHeader(entry, ArpOp.class, false);\r
459         Assert.assertEquals("Wrong arp op", 5, ((ArpOpCase) entry.getMatchEntryValue())\r
460                 .getArpOp().getOpCode().intValue());\r
461         entry = entries.get(1);\r
462         checkEntryHeader(entry, ArpSpa.class, false);\r
463         Assert.assertEquals("Wrong arp spa", "10.0.0.3", ((ArpSpaCase) entry.getMatchEntryValue())\r
464                 .getArpSpa().getIpv4Address().getValue());\r
465         entry = entries.get(2);\r
466         checkEntryHeader(entry, ArpTpa.class, false);\r
467         Assert.assertEquals("Wrong arp tpa", "10.0.0.4", ((ArpTpaCase) entry.getMatchEntryValue())\r
468                 .getArpTpa().getIpv4Address().getValue());\r
469         entry = entries.get(3);\r
470         checkEntryHeader(entry, ArpSha.class, false);\r
471         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", ((ArpShaCase) entry.getMatchEntryValue())\r
472                 .getArpSha().getMacAddress().getValue());\r
473         entry = entries.get(4);\r
474         checkEntryHeader(entry, ArpTha.class, false);\r
475         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", ((ArpThaCase) entry.getMatchEntryValue())\r
476                 .getArpTha().getMacAddress().getValue());\r
477     }\r
478 \r
479     /**\r
480      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
481      */\r
482     @Test\r
483     public void testArpMatchConversionWithMasks() {\r
484         MatchBuilder builder = new MatchBuilder();\r
485         ArpMatchBuilder arpBuilder = new ArpMatchBuilder();\r
486         /* Use canonnical prefixes !!! */\r
487         arpBuilder.setArpSourceTransportAddress(new Ipv4Prefix("10.0.0.0/8"));\r
488         arpBuilder.setArpTargetTransportAddress(new Ipv4Prefix("10.0.0.4/31"));\r
489         ArpSourceHardwareAddressBuilder srcHwBuilder = new ArpSourceHardwareAddressBuilder();\r
490         srcHwBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
491         srcHwBuilder.setMask(new MacAddress("00:00:00:00:00:08"));\r
492         arpBuilder.setArpSourceHardwareAddress(srcHwBuilder.build());\r
493         ArpTargetHardwareAddressBuilder dstHwBuilder = new ArpTargetHardwareAddressBuilder();\r
494         dstHwBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
495         dstHwBuilder.setMask(new MacAddress("00:00:00:00:00:09"));\r
496         arpBuilder.setArpTargetHardwareAddress(dstHwBuilder.build());\r
497         builder.setLayer3Match(arpBuilder.build());\r
498         Match match = builder.build();\r
499 \r
500         List<MatchEntry> entries = convertor.convert(match);\r
501         Assert.assertEquals("Wrong entries size", 4, entries.size());\r
502         MatchEntry entry = entries.get(0);\r
503         entry = entries.get(0);\r
504         checkEntryHeader(entry, ArpSpa.class, true);\r
505         Assert.assertEquals("Wrong arp spa", "10.0.0.0", ((ArpSpaCase) entry.getMatchEntryValue())\r
506                 .getArpSpa().getIpv4Address().getValue());\r
507         Assert.assertArrayEquals("Wrong arp spa mask", new byte[]{(byte) 255, 0, 0, 0},\r
508                 ((ArpSpaCase) entry.getMatchEntryValue()).getArpSpa().getMask());\r
509         entry = entries.get(1);\r
510         checkEntryHeader(entry, ArpTpa.class, true);\r
511         Assert.assertEquals("Wrong arp tpa", "10.0.0.4", ((ArpTpaCase) entry.getMatchEntryValue()).getArpTpa()\r
512                 .getIpv4Address().getValue());\r
513         Assert.assertArrayEquals("Wrong arp tpa mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 254},\r
514                 ((ArpTpaCase) entry.getMatchEntryValue()).getArpTpa().getMask());\r
515         entry = entries.get(2);\r
516         checkEntryHeader(entry, ArpSha.class, true);\r
517         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:05", ((ArpShaCase) entry.getMatchEntryValue())\r
518                 .getArpSha().getMacAddress().getValue());\r
519         Assert.assertArrayEquals("Wrong arp sha mask", new byte[]{0, 0, 0, 0, 0, 8},\r
520                 ((ArpShaCase) entry.getMatchEntryValue()).getArpSha().getMask());\r
521         entry = entries.get(3);\r
522         checkEntryHeader(entry, ArpTha.class, true);\r
523         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:06", ((ArpThaCase) entry.getMatchEntryValue()).getArpTha()\r
524                 .getMacAddress().getValue());\r
525         Assert.assertArrayEquals("Wrong arp tha mask", new byte[]{0, 0, 0, 0, 0, 9},\r
526                 ((ArpThaCase) entry.getMatchEntryValue()).getArpTha().getMask());\r
527     }\r
528 \r
529     /**\r
530      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
531      */\r
532     @Test\r
533     public void testIpv6MatchConversion() {\r
534         MatchBuilder builder = new MatchBuilder();\r
535         Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
536         ipv6Builder.setIpv6Source(new Ipv6Prefix("::1/128"));\r
537         ipv6Builder.setIpv6Destination(new Ipv6Prefix("::2/128"));\r
538         Ipv6LabelBuilder ipv6LabelBuilder = new Ipv6LabelBuilder();\r
539         ipv6LabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(3L));\r
540         ipv6Builder.setIpv6Label(ipv6LabelBuilder.build());\r
541         ipv6Builder.setIpv6NdTarget(new Ipv6Address("::4"));\r
542         ipv6Builder.setIpv6NdSll(new MacAddress("00:00:00:00:00:05"));\r
543         ipv6Builder.setIpv6NdTll(new MacAddress("00:00:00:00:00:06"));\r
544         Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();\r
545         extHdrBuilder.setIpv6Exthdr(153);\r
546         ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());\r
547         builder.setLayer3Match(ipv6Builder.build());\r
548         Match match = builder.build();\r
549 \r
550         List<MatchEntry> entries = convertor.convert(match);\r
551         Assert.assertEquals("Wrong entries size", 7, entries.size());\r
552         MatchEntry entry = entries.get(0);\r
553         /* Due to conversion ambiguities, we always get "has mask" because \r
554          * an ip with no mask and prefix with /128 (or 32 in v4) cannot \r
555          * be distinguished */\r
556         checkEntryHeader(entry, Ipv6Src.class, true);\r
557         Assert.assertEquals("Wrong ipv6 src", "::1",\r
558                 ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());\r
559         entry = entries.get(1);\r
560         checkEntryHeader(entry, Ipv6Dst.class, true);\r
561         Assert.assertEquals("Wrong ipv6 dst", "::2",\r
562                 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());\r
563         entry = entries.get(2);\r
564         checkEntryHeader(entry, Ipv6Flabel.class, false);\r
565         Assert.assertEquals("Wrong ipv6 flabel", 3,\r
566                 ((Ipv6FlabelCase) entry.getMatchEntryValue()).getIpv6Flabel().getIpv6Flabel().getValue().intValue());\r
567         entry = entries.get(3);\r
568         checkEntryHeader(entry, Ipv6NdTarget.class, false);\r
569         Assert.assertEquals("Wrong ipv6 nd target", "::4",\r
570                 ((Ipv6NdTargetCase) entry.getMatchEntryValue()).getIpv6NdTarget().getIpv6Address().getValue());\r
571         entry = entries.get(4);\r
572         checkEntryHeader(entry, Ipv6NdSll.class, false);\r
573         Assert.assertEquals("Wrong ipv6 nd sll", "00:00:00:00:00:05",\r
574                 ((Ipv6NdSllCase) entry.getMatchEntryValue()).getIpv6NdSll().getMacAddress().getValue());\r
575         entry = entries.get(5);\r
576         checkEntryHeader(entry, Ipv6NdTll.class, false);\r
577         Assert.assertEquals("Wrong ipv6 nd tll", "00:00:00:00:00:06",\r
578                 ((Ipv6NdTllCase) entry.getMatchEntryValue()).getIpv6NdTll().getMacAddress().getValue());\r
579         entry = entries.get(6);\r
580         checkEntryHeader(entry, Ipv6Exthdr.class, false);\r
581         Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(false, true, false, true, false,\r
582                 true, false, true, false), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());\r
583     }\r
584 \r
585     /**\r
586      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
587      */\r
588     @Test\r
589     public void testIpv6MatchConversionWithMasks() {\r
590         MatchBuilder builder = new MatchBuilder();\r
591         Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
592         ipv6Builder.setIpv6Source(new Ipv6Prefix("::/24"));\r
593         ipv6Builder.setIpv6Destination(new Ipv6Prefix("::/64"));\r
594         builder.setLayer3Match(ipv6Builder.build());\r
595         Match match = builder.build();\r
596 \r
597         List<MatchEntry> entries = convertor.convert(match);\r
598         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
599         MatchEntry entry = entries.get(0);\r
600         checkEntryHeader(entry, Ipv6Src.class, true);\r
601         Assert.assertEquals("Wrong ipv6 src", "::",\r
602                 ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());\r
603         Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0,\r
604                 0, 0, 0, 0, 0, 0, 0, 0, 0}, ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getMask());\r
605         entry = entries.get(1);\r
606         checkEntryHeader(entry, Ipv6Dst.class, true);\r
607         Assert.assertEquals("Wrong ipv6 dst", "::",\r
608                 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());\r
609         Assert.assertArrayEquals("Wrong ipv6 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, (byte) 255,\r
610                         (byte) 255, (byte) 255, (byte) 255, (byte) 255, 0, 0, 0, 0, 0, 0, 0, 0},\r
611                 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getMask());\r
612     }\r
613 \r
614     /**\r
615      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
616      */\r
617     @Test\r
618     public void testIpv6ExtHeaderConversion() {\r
619         MatchBuilder builder = new MatchBuilder();\r
620         Ipv6MatchBuilder ipv6Builder = new Ipv6MatchBuilder();\r
621         Ipv6ExtHeaderBuilder extHdrBuilder = new Ipv6ExtHeaderBuilder();\r
622         extHdrBuilder.setIpv6Exthdr(358);\r
623         extHdrBuilder.setIpv6ExthdrMask(258);\r
624         ipv6Builder.setIpv6ExtHeader(extHdrBuilder.build());\r
625         builder.setLayer3Match(ipv6Builder.build());\r
626         Match match = builder.build();\r
627 \r
628         List<MatchEntry> entries = convertor.convert(match);\r
629         Assert.assertEquals("Wrong entries size", 1, entries.size());\r
630         MatchEntry entry = entries.get(0);\r
631         checkEntryHeader(entry, Ipv6Exthdr.class, true);\r
632         Assert.assertEquals("Wrong ipv6 ext hdr", new Ipv6ExthdrFlags(true, false, true, false, true, false,\r
633                 true, false, true), ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getPseudoField());\r
634         Assert.assertArrayEquals("Wrong ipv6 ext hdr mask", new byte[]{1, 2},\r
635                 ((Ipv6ExthdrCase) entry.getMatchEntryValue()).getIpv6Exthdr().getMask());\r
636     }\r
637 \r
638     /**\r
639      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match)}\r
640      */\r
641     @Test\r
642     public void testConversionWithMasks() {\r
643         MatchBuilder builder = new MatchBuilder();\r
644         MetadataBuilder metadataBuilder = new MetadataBuilder();\r
645         metadataBuilder.setMetadata(new BigInteger("3"));\r
646         metadataBuilder.setMetadataMask(new BigInteger("15"));\r
647         builder.setMetadata(metadataBuilder.build());\r
648         EthernetMatchBuilder ethernetBuilder = new EthernetMatchBuilder();\r
649         EthernetSourceBuilder ethSrcBuilder = new EthernetSourceBuilder();\r
650         ethSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
651         ethSrcBuilder.setMask(new MacAddress("00:00:00:00:00:08"));\r
652         ethernetBuilder.setEthernetSource(ethSrcBuilder.build());\r
653         EthernetDestinationBuilder ethDstBuilder = new EthernetDestinationBuilder();\r
654         ethDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
655         ethDstBuilder.setMask(new MacAddress("00:00:00:00:00:09"));\r
656         ethernetBuilder.setEthernetDestination(ethDstBuilder.build());\r
657         builder.setEthernetMatch(ethernetBuilder.build());\r
658         VlanMatchBuilder vlanBuilder = new VlanMatchBuilder();\r
659         VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();\r
660         vlanIdBuilder.setVlanId(new VlanId(0));\r
661         vlanIdBuilder.setVlanIdPresent(true);\r
662         vlanBuilder.setVlanId(vlanIdBuilder.build());\r
663         builder.setVlanMatch(vlanBuilder.build());\r
664         ProtocolMatchFieldsBuilder protoBuilder = new ProtocolMatchFieldsBuilder();\r
665         PbbBuilder pbbBuilder = new PbbBuilder();\r
666         pbbBuilder.setPbbIsid(20L);\r
667         pbbBuilder.setPbbMask(8L);\r
668         protoBuilder.setPbb(pbbBuilder.build());\r
669         builder.setProtocolMatchFields(protoBuilder.build());\r
670         TunnelBuilder tunnelBuilder = new TunnelBuilder();\r
671         tunnelBuilder.setTunnelId(new BigInteger("21"));\r
672         tunnelBuilder.setTunnelMask(new BigInteger("14"));\r
673         builder.setTunnel(tunnelBuilder.build());\r
674         Ipv4MatchBuilder ipv4MatchBuilder = new Ipv4MatchBuilder();\r
675         ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix("10.0.0.0/24"));\r
676         ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix("10.0.0.0/8"));\r
677         builder.setLayer3Match(ipv4MatchBuilder.build());\r
678         Match match = builder.build();\r
679 \r
680         List<MatchEntry> entries = convertor.convert(match);\r
681         Assert.assertEquals("Wrong entries size", 8, entries.size());\r
682         MatchEntry entry = entries.get(0);\r
683         checkEntryHeader(entry, Metadata.class, true);\r
684         Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
685                 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMetadata());\r
686         Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 15},\r
687                 ((MetadataCase) entry.getMatchEntryValue()).getMetadata().getMask());\r
688         entry = entries.get(1);\r
689         checkEntryHeader(entry, EthDst.class, true);\r
690         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:06"),\r
691                 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMacAddress());\r
692         Assert.assertArrayEquals("Wrong eth dst mask", new byte[]{0, 0, 0, 0, 0, 9},\r
693                 ((EthDstCase) entry.getMatchEntryValue()).getEthDst().getMask());\r
694         entry = entries.get(2);\r
695         checkEntryHeader(entry, EthSrc.class, true);\r
696         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:05"),\r
697                 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMacAddress());\r
698         Assert.assertArrayEquals("Wrong eth src mask", new byte[]{0, 0, 0, 0, 0, 8},\r
699                 ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc().getMask());\r
700         entry = entries.get(3);\r
701         checkEntryHeader(entry, VlanVid.class, true);\r
702         Assert.assertEquals("Wrong vlan id", 0, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()\r
703                 .getVlanVid().intValue());\r
704         Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()\r
705                 .isCfiBit());\r
706         Assert.assertArrayEquals("Wrong vlanId mask", new byte[]{16, 0},\r
707                 ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid().getMask());\r
708         entry = entries.get(4);\r
709         checkEntryHeader(entry, Ipv4Src.class, true);\r
710         Assert.assertEquals("Wrong ipv4 src", "10.0.0.0", ((Ipv4SrcCase) entry.getMatchEntryValue())\r
711                 .getIpv4Src().getIpv4Address().getValue());\r
712         Assert.assertArrayEquals("Wrong ipv4 src mask", new byte[]{(byte) 255, (byte) 255, (byte) 255, 0},\r
713                 ((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src().getMask());\r
714         entry = entries.get(5);\r
715         checkEntryHeader(entry, Ipv4Dst.class, true);\r
716         Assert.assertEquals("Wrong ipv4 dst", "10.0.0.0", ((Ipv4DstCase) entry.getMatchEntryValue())\r
717                 .getIpv4Dst().getIpv4Address().getValue());\r
718         Assert.assertArrayEquals("Wrong ipv4 dst mask", new byte[]{(byte) 255, 0, 0, 0},\r
719                 ((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst().getMask());\r
720         entry = entries.get(6);\r
721         checkEntryHeader(entry, PbbIsid.class, true);\r
722         Assert.assertEquals("Wrong pbb isid", 20, ((PbbIsidCase) entry.getMatchEntryValue())\r
723                 .getPbbIsid().getIsid().intValue());\r
724         Assert.assertArrayEquals("Wrong pbb isid mask", new byte[]{0, 0, 8},\r
725                 ((PbbIsidCase) entry.getMatchEntryValue()).getPbbIsid().getMask());\r
726         entry = entries.get(7);\r
727         checkEntryHeader(entry, TunnelId.class, true);\r
728         Assert.assertArrayEquals("Wrong tunnel id", new byte[]{0, 0, 0, 0, 0, 0, 0, 21},\r
729                 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getTunnelId());\r
730         Assert.assertArrayEquals("Wrong tunnel id mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 14},\r
731                 ((TunnelIdCase) entry.getMatchEntryValue()).getTunnelId().getMask());\r
732     }\r
733 \r
734     /**\r
735      * Test {@link MatchConvertorImpl#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.Match, java.math.BigInteger)}\r
736      */\r
737     @Test\r
738     public void testIpv6MatchArbitraryBitMask(){\r
739         MatchBuilder builder = new MatchBuilder();\r
740         Ipv6MatchArbitraryBitMaskBuilder ipv6MatchArbitraryBitMaskBuilder= new Ipv6MatchArbitraryBitMaskBuilder();\r
741         ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceAddressNoMask(new Ipv6Address("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0"));\r
742         ipv6MatchArbitraryBitMaskBuilder.setIpv6SourceArbitraryBitmask(new Ipv6ArbitraryMask("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:A555"));\r
743         ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationAddressNoMask(new Ipv6Address("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0"));\r
744         ipv6MatchArbitraryBitMaskBuilder.setIpv6DestinationArbitraryBitmask(new Ipv6ArbitraryMask("fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:A555"));\r
745         builder.setLayer3Match(ipv6MatchArbitraryBitMaskBuilder.build());\r
746         Match match = builder.build();\r
747 \r
748         List<MatchEntry> entries = convertor.convert(match);\r
749         Assert.assertEquals("Wrong entries size", 2, entries.size());\r
750 \r
751         MatchEntry entry = entries.get(0);\r
752         checkEntryHeader(entry,Ipv6Src.class,true);\r
753         Assert.assertEquals("wrong Ipv6Adress source", "fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0",((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());\r
754         entry = entries.get(1);\r
755         checkEntryHeader(entry,Ipv6Dst.class,true);\r
756         Assert.assertEquals("wrong Ipv6Adress destination", "fbA0:FFB6:FFF0:FFF0:FFF0:FFF0:FFF0:AFF0",((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());\r
757     }\r
758 }\r