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