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