Bug 5540 - MeterStatsResponseConvertor, MeterConfigStatsResponseConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / match / MatchConvertorImplV13Test.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.ArrayList;\r
13 import java.util.List;\r
14 import org.junit.Assert;\r
15 import org.junit.Before;\r
16 import org.junit.Test;\r
17 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
18 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Dscp;\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;\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.yang.types.rev130715.MacAddress;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchArbitraryBitMask;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6Match;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv6MatchArbitraryBitMask;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.SctpMatch;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;\r
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;\r
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;\r
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;\r
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;\r
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;\r
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;\r
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;\r
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;\r
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;\r
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;\r
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;\r
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;\r
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;\r
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;\r
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;\r
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;\r
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;\r
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;\r
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;\r
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;\r
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;\r
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;\r
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;\r
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;\r
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;\r
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;\r
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;\r
155 \r
156 /**\r
157  * @author michal.polkorab\r
158  */\r
159 public class MatchConvertorImplV13Test {\r
160 \r
161     /**\r
162      * Initializes OpenflowPortsUtil\r
163      */\r
164     @Before\r
165     public void startUp() {\r
166         OpenflowPortsUtil.init();\r
167     }\r
168 \r
169     /**\r
170      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
171      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
172      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
173      */\r
174     @Test(expected = NullPointerException.class)\r
175     public void testEmptyMatch() {\r
176         final MatchBuilder builder = new MatchBuilder();\r
177 \r
178         MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF10);\r
179     }\r
180 \r
181     /**\r
182      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
183      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
184      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
185      */\r
186     @Test\r
187     public void testEmptyMatchEntry() {\r
188 \r
189         final MatchBuilder builder = new MatchBuilder();\r
190         builder.setType(OxmMatchType.class);\r
191         final List<MatchEntry> entries = new ArrayList<>();\r
192         builder.setMatchEntry(entries);\r
193         final Match match = builder.build();\r
194 \r
195         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
196                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
197         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
198 \r
199         Assert.assertEquals("Wrong match entries", null, builtMatch.getEthernetMatch());\r
200         Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv4Match());\r
201         Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv6Match());\r
202         Assert.assertEquals("Wrong match entries", null, builtMatch.getInPhyPort());\r
203         Assert.assertEquals("Wrong match entries", null, builtMatch.getInPort());\r
204         Assert.assertEquals("Wrong match entries", null, builtMatch.getIpMatch());\r
205         Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer3Match());\r
206         Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer4Match());\r
207         Assert.assertEquals("Wrong match entries", null, builtMatch.getMetadata());\r
208         Assert.assertEquals("Wrong match entries", null, builtMatch.getProtocolMatchFields());\r
209         Assert.assertEquals("Wrong match entries", null, builtMatch.getVlanMatch());\r
210         Assert.assertEquals("Wrong match entries", null, builtMatch.getTunnel());\r
211 \r
212     }\r
213 \r
214     /**\r
215      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
216      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
217      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
218      */\r
219     @Test\r
220     public void testWithMatchEntryNoMasks() {\r
221         final List<MatchEntry> entries = new ArrayList<>();\r
222         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
223         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
224         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort.class);\r
225         entriesBuilder.setHasMask(false);\r
226         final InPortCaseBuilder caseBuilder = new InPortCaseBuilder();\r
227         final InPortBuilder portBuilder = new InPortBuilder();\r
228         portBuilder.setPortNumber(new PortNumber(1L));\r
229         caseBuilder.setInPort(portBuilder.build());\r
230         entriesBuilder.setMatchEntryValue(caseBuilder.build());\r
231         entries.add(entriesBuilder.build());\r
232 \r
233         final InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();\r
234         entriesBuilder = new MatchEntryBuilder();\r
235         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
236         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort.class);\r
237         entriesBuilder.setHasMask(false);\r
238         final InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();\r
239         inPhyPortBuilder.setPortNumber(new PortNumber(2L));\r
240         inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());\r
241         entriesBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());\r
242         entries.add(entriesBuilder.build());\r
243 \r
244         entriesBuilder = new MatchEntryBuilder();\r
245         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
246         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
247         entriesBuilder.setHasMask(false);\r
248         final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();\r
249         final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();\r
250         metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
251         metadataCaseBuilder.setMetadata(metadataBuilder.build());\r
252         entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());\r
253         entries.add(entriesBuilder.build());\r
254 \r
255         entriesBuilder = new MatchEntryBuilder();\r
256         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
257         entriesBuilder.setOxmMatchField(EthDst.class);\r
258         entriesBuilder.setHasMask(false);\r
259         final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();\r
260         final EthDstBuilder ethDstBuilder = new EthDstBuilder();\r
261         ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
262         ethDstCaseBuilder.setEthDst(ethDstBuilder.build());\r
263         entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());\r
264         entries.add(entriesBuilder.build());\r
265 \r
266         entriesBuilder = new MatchEntryBuilder();\r
267         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
268         entriesBuilder.setOxmMatchField(EthSrc.class);\r
269         entriesBuilder.setHasMask(false);\r
270         final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();\r
271         final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();\r
272         ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
273         ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());\r
274         entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());\r
275         entries.add(entriesBuilder.build());\r
276 \r
277 \r
278         entriesBuilder = new MatchEntryBuilder();\r
279         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
280         entriesBuilder.setOxmMatchField(EthType.class);\r
281         entriesBuilder.setHasMask(false);\r
282         final EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();\r
283 \r
284         final EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();\r
285         ethTypeBuilder.setEthType(new EtherType(3));\r
286         ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());\r
287         entriesBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());\r
288         entries.add(entriesBuilder.build());\r
289 \r
290 \r
291         entriesBuilder = new MatchEntryBuilder();\r
292         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
293         entriesBuilder.setOxmMatchField(VlanVid.class);\r
294         final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();\r
295         entriesBuilder.setHasMask(false);\r
296         final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();\r
297         vlanVidBuilder.setVlanVid(4);\r
298         vlanVidBuilder.setCfiBit(true);\r
299         vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());\r
300         entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());\r
301         entries.add(entriesBuilder.build());\r
302 \r
303         entriesBuilder = new MatchEntryBuilder();\r
304         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
305         entriesBuilder.setOxmMatchField(VlanPcp.class);\r
306         final VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();\r
307         entriesBuilder.setHasMask(false);\r
308         final VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();\r
309         vlanPcpBuilder.setVlanPcp((short) 5);\r
310         vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());\r
311         entriesBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());\r
312         entries.add(entriesBuilder.build());\r
313 \r
314 \r
315         entriesBuilder = new MatchEntryBuilder();\r
316         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
317         entriesBuilder.setOxmMatchField(IpDscp.class);\r
318         entriesBuilder.setHasMask(false);\r
319         final IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();\r
320         final IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();\r
321         ipDscpBuilder.setDscp(new Dscp((short) 6));\r
322         ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());\r
323         entriesBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());\r
324         entries.add(entriesBuilder.build());\r
325 \r
326 \r
327         entriesBuilder = new MatchEntryBuilder();\r
328         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
329         entriesBuilder.setOxmMatchField(IpEcn.class);\r
330         entriesBuilder.setHasMask(false);\r
331         final IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();\r
332         final IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();\r
333         ipEcnBuilder.setEcn((short) 7);\r
334         ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());\r
335         entriesBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());\r
336         entries.add(entriesBuilder.build());\r
337 \r
338 \r
339         entriesBuilder = new MatchEntryBuilder();\r
340         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
341         entriesBuilder.setOxmMatchField(IpProto.class);\r
342         final IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();\r
343         entriesBuilder.setHasMask(false);\r
344         final IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();\r
345         ipProtoBuilder.setProtocolNumber((short) 8);\r
346         ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());\r
347         entriesBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());\r
348         entries.add(entriesBuilder.build());\r
349 \r
350 \r
351         entriesBuilder = new MatchEntryBuilder();\r
352         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
353         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
354         entriesBuilder.setHasMask(false);\r
355         final Ipv4SrcCaseBuilder ipv4AddressBuilder = new Ipv4SrcCaseBuilder();\r
356         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
357         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
358         ipv4AddressBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
359         entriesBuilder.setMatchEntryValue(ipv4AddressBuilder.build());\r
360         entries.add(entriesBuilder.build());\r
361 \r
362         entriesBuilder = new MatchEntryBuilder();\r
363         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
364         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
365         entriesBuilder.setHasMask(false);\r
366         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
367         final Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();\r
368         ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
369         ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());\r
370         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
371         entries.add(entriesBuilder.build());\r
372 \r
373         entriesBuilder = new MatchEntryBuilder();\r
374         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
375         entriesBuilder.setOxmMatchField(TcpSrc.class);\r
376         entriesBuilder.setHasMask(false);\r
377         final TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();\r
378         final TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();\r
379         tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
380                 .inet.types.rev130715.PortNumber(9));\r
381         tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());\r
382         entriesBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());\r
383         entries.add(entriesBuilder.build());\r
384 \r
385         entriesBuilder = new MatchEntryBuilder();\r
386         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
387         entriesBuilder.setOxmMatchField(TcpDst.class);\r
388         entriesBuilder.setHasMask(false);\r
389         final TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();\r
390         final TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();\r
391         tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
392                 .inet.types.rev130715.PortNumber(10));\r
393         tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());\r
394         entriesBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());\r
395         entries.add(entriesBuilder.build());\r
396 \r
397         entriesBuilder = new MatchEntryBuilder();\r
398         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
399         entriesBuilder.setOxmMatchField(Icmpv4Type.class);\r
400         entriesBuilder.setHasMask(false);\r
401         final Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();\r
402         final Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();\r
403         icmpv4TypeBuilder.setIcmpv4Type((short) 15);\r
404         icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());\r
405         entriesBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());\r
406         entries.add(entriesBuilder.build());\r
407 \r
408         entriesBuilder = new MatchEntryBuilder();\r
409         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
410         entriesBuilder.setOxmMatchField(Icmpv4Code.class);\r
411         entriesBuilder.setHasMask(false);\r
412         final Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();\r
413         final Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();\r
414         icmpv4CodeBuilder.setIcmpv4Code((short) 16);\r
415         icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());\r
416         entriesBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());\r
417         entries.add(entriesBuilder.build());\r
418 \r
419         entriesBuilder = new MatchEntryBuilder();\r
420         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
421         entriesBuilder.setOxmMatchField(Icmpv6Type.class);\r
422         entriesBuilder.setHasMask(false);\r
423         final Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();\r
424         final Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();\r
425         icmpv6TypeBuilder.setIcmpv6Type((short) 19);\r
426         icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());\r
427         entriesBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());\r
428         entries.add(entriesBuilder.build());\r
429 \r
430         entriesBuilder = new MatchEntryBuilder();\r
431         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
432         entriesBuilder.setOxmMatchField(Icmpv6Code.class);\r
433         entriesBuilder.setHasMask(false);\r
434         final Icmpv6CodeCaseBuilder icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();\r
435         final Icmpv6CodeBuilder icmpv6CodeBuilder = new Icmpv6CodeBuilder();\r
436         icmpv6CodeBuilder.setIcmpv6Code((short) 20);\r
437         icmpv6CodeCaseBuilder.setIcmpv6Code(icmpv6CodeBuilder.build());\r
438         entriesBuilder.setMatchEntryValue(icmpv6CodeCaseBuilder.build());\r
439         entries.add(entriesBuilder.build());\r
440 \r
441         entriesBuilder = new MatchEntryBuilder();\r
442         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
443         entriesBuilder.setOxmMatchField(MplsLabel.class);\r
444         entriesBuilder.setHasMask(false);\r
445         final MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();\r
446 \r
447         final MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();\r
448         mplsLabelBuilder.setMplsLabel(21L);\r
449         mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());\r
450         entriesBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());\r
451         entries.add(entriesBuilder.build());\r
452 \r
453         entriesBuilder = new MatchEntryBuilder();\r
454         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
455         entriesBuilder.setOxmMatchField(MplsTc.class);\r
456         entriesBuilder.setHasMask(false);\r
457         final MplsTcCaseBuilder mplsTcCaseBuilder = new MplsTcCaseBuilder();\r
458         final MplsTcBuilder mplsTcBuilder = new MplsTcBuilder();\r
459         mplsTcBuilder.setTc((short) 22);\r
460         mplsTcCaseBuilder.setMplsTc(mplsTcBuilder.build());\r
461         entriesBuilder.setMatchEntryValue(mplsTcCaseBuilder.build());\r
462         entries.add(entriesBuilder.build());\r
463 \r
464         entriesBuilder = new MatchEntryBuilder();\r
465         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
466         entriesBuilder.setOxmMatchField(MplsBos.class);\r
467         entriesBuilder.setHasMask(false);\r
468         final MplsBosCaseBuilder mplsBosCaseBuilder = new MplsBosCaseBuilder();\r
469         final MplsBosBuilder mplsBosBuilder = new MplsBosBuilder();\r
470         mplsBosBuilder.setBos(true);\r
471         mplsBosCaseBuilder.setMplsBos(mplsBosBuilder.build());\r
472         entriesBuilder.setMatchEntryValue(mplsBosCaseBuilder.build());\r
473         entries.add(entriesBuilder.build());\r
474 \r
475         entriesBuilder = new MatchEntryBuilder();\r
476         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
477         entriesBuilder.setOxmMatchField(PbbIsid.class);\r
478         entriesBuilder.setHasMask(false);\r
479         final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();\r
480         final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();\r
481         pbbIsidBuilder.setIsid(23L);\r
482         pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());\r
483         entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());\r
484 \r
485         entries.add(entriesBuilder.build());\r
486         entriesBuilder = new MatchEntryBuilder();\r
487         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
488         entriesBuilder.setOxmMatchField(TunnelId.class);\r
489         entriesBuilder.setHasMask(false);\r
490         final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();\r
491         final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();\r
492         tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
493         tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());\r
494         entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());\r
495         entries.add(entriesBuilder.build());\r
496 \r
497         final MatchBuilder builder = new MatchBuilder();\r
498         builder.setMatchEntry(entries);\r
499 \r
500         final Match match = builder.build();\r
501 \r
502         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
503                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
504         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
505 \r
506         Assert.assertEquals("Wrong in port", "openflow:42:1", builtMatch.getInPort().getValue());\r
507         Assert.assertEquals("Wrong in phy port", "openflow:42:2", builtMatch.getInPhyPort().getValue());\r
508         Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
509         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
510         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
511         Assert.assertEquals("Wrong eth type", 3, builtMatch.getEthernetMatch().getEthernetType().getType().getValue().intValue());\r
512         Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
513         Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
514         Assert.assertEquals("Wrong vlan pcp", 5, builtMatch.getVlanMatch().getVlanPcp().getValue().intValue());\r
515         Assert.assertEquals("Wrong ip dscp", 6, builtMatch.getIpMatch().getIpDscp().getValue().intValue());\r
516         Assert.assertEquals("Wrong ip ecn", 7, builtMatch.getIpMatch().getIpEcn().intValue());\r
517         Assert.assertEquals("Wrong ip proto", null, builtMatch.getIpMatch().getIpProto());\r
518         Assert.assertEquals("Wrong ip protocol", 8, builtMatch.getIpMatch().getIpProtocol().intValue());\r
519 \r
520         final TcpMatch tcpMatch = (TcpMatch) builtMatch.getLayer4Match();\r
521         Assert.assertEquals("Wrong tcp src port", 9, tcpMatch.getTcpSourcePort().getValue().intValue());\r
522         Assert.assertEquals("Wrong tcp dst port", 10, tcpMatch.getTcpDestinationPort().getValue().intValue());\r
523         Assert.assertEquals("Wrong icmpv4 type", 15, builtMatch.getIcmpv4Match().getIcmpv4Type().intValue());\r
524         Assert.assertEquals("Wrong icmpv4 code", 16, builtMatch.getIcmpv4Match().getIcmpv4Code().intValue());\r
525         Assert.assertEquals("Wrong icmpv6 type", 19, builtMatch.getIcmpv6Match().getIcmpv6Type().intValue());\r
526         Assert.assertEquals("Wrong icmpv6 code", 20, builtMatch.getIcmpv6Match().getIcmpv6Code().intValue());\r
527 \r
528         final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
529         Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/32", ipv4Match.getIpv4Source().getValue());\r
530         Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/32", ipv4Match.getIpv4Destination().getValue());\r
531         Assert.assertEquals("Wrong mpls label", 21, builtMatch.getProtocolMatchFields().getMplsLabel().intValue());\r
532         Assert.assertEquals("Wrong mpls bos", 1, builtMatch.getProtocolMatchFields().getMplsBos().intValue());\r
533         Assert.assertEquals("Wrong mpls tc", 22, builtMatch.getProtocolMatchFields().getMplsTc().intValue());\r
534         Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
535         Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
536                 builtMatch.getTunnel().getTunnelId());\r
537     }\r
538 \r
539     /**\r
540      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
541      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
542      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
543      */\r
544     @Test\r
545     public void testWithMatchEntryWithMasks() {\r
546         final MatchBuilder builder = new MatchBuilder();\r
547         builder.setType(OxmMatchType.class);\r
548         final List<MatchEntry> entries = new ArrayList<>();\r
549         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
550         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
551         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
552         entriesBuilder.setHasMask(true);\r
553 \r
554 \r
555         final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();\r
556         final org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder metadataBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder();\r
557         metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
558         metadataBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 1});\r
559         metadataCaseBuilder.setMetadata(metadataBuilder.build());\r
560         entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());\r
561         entries.add(entriesBuilder.build());\r
562 \r
563         entriesBuilder = new MatchEntryBuilder();\r
564         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
565         entriesBuilder.setOxmMatchField(EthDst.class);\r
566         entriesBuilder.setHasMask(true);\r
567         final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();\r
568         final EthDstBuilder ethDstBuilder = new EthDstBuilder();\r
569         ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
570         ethDstBuilder.setMask(new byte[]{0, 0, 0, 0, 1, 1});\r
571         ethDstCaseBuilder.setEthDst(ethDstBuilder.build());\r
572         entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());\r
573         entries.add(entriesBuilder.build());\r
574 \r
575         entriesBuilder = new MatchEntryBuilder();\r
576         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
577         entriesBuilder.setOxmMatchField(EthSrc.class);\r
578         entriesBuilder.setHasMask(true);\r
579         final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();\r
580         final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();\r
581         ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
582         ethSrcBuilder.setMask(new byte[]{0, 0, 0, 0, 2, 2});\r
583         ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());\r
584         entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());\r
585         entries.add(entriesBuilder.build());\r
586 \r
587         entriesBuilder = new MatchEntryBuilder();\r
588         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
589         entriesBuilder.setOxmMatchField(VlanVid.class);\r
590         entriesBuilder.setHasMask(true);\r
591         final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();\r
592         final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();\r
593         vlanVidBuilder.setVlanVid(4);\r
594         vlanVidBuilder.setCfiBit(true);\r
595         vlanVidBuilder.setMask(new byte[]{0, 4});\r
596         vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());\r
597         entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());\r
598         entries.add(entriesBuilder.build());\r
599 \r
600         entriesBuilder = new MatchEntryBuilder();\r
601         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
602         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
603         entriesBuilder.setHasMask(true);\r
604         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
605         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
606         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
607         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
608         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
609         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
610         entries.add(entriesBuilder.build());\r
611 \r
612         entriesBuilder = new MatchEntryBuilder();\r
613         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
614         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
615         entriesBuilder.setHasMask(true);\r
616         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
617         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
618         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
619         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});\r
620         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
621         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
622         entries.add(entriesBuilder.build());\r
623 \r
624         entriesBuilder = new MatchEntryBuilder();\r
625         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
626         entriesBuilder.setOxmMatchField(PbbIsid.class);\r
627         entriesBuilder.setHasMask(true);\r
628         final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();\r
629 \r
630         final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();\r
631         pbbIsidBuilder.setIsid(23L);\r
632         pbbIsidBuilder.setMask(new byte[]{0, 0, 7});\r
633         pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());\r
634         entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());\r
635         entries.add(entriesBuilder.build());\r
636 \r
637         entriesBuilder = new MatchEntryBuilder();\r
638         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
639         entriesBuilder.setOxmMatchField(TunnelId.class);\r
640         entriesBuilder.setHasMask(true);\r
641         final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();\r
642         final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();\r
643         tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
644         tunnelIdBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 8});\r
645         tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());\r
646         entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());\r
647         entries.add(entriesBuilder.build());\r
648         builder.setMatchEntry(entries);\r
649         final Match match = builder.build();\r
650 \r
651         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
652                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
653         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
654 \r
655         Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
656         Assert.assertEquals("Wrong metadata mask", new BigInteger(1, new byte[]{0, 0, 0, 0, 0, 0, 0, 1}),\r
657                 builtMatch.getMetadata().getMetadataMask());\r
658         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
659         Assert.assertEquals("Wrong eth dst mask", new MacAddress("00:00:00:00:01:01"), builtMatch.getEthernetMatch().getEthernetDestination().getMask());\r
660         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
661         Assert.assertEquals("Wrong eth src mask", new MacAddress("00:00:00:00:02:02"), builtMatch.getEthernetMatch().getEthernetSource().getMask());\r
662         Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
663         Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
664         final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
665         Assert.assertEquals("Wrong ipv4 src address", "10.0.0.0/24", ipv4Match.getIpv4Source().getValue());\r
666         Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.0/20", ipv4Match.getIpv4Destination().getValue());\r
667         Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
668         Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
669                 builtMatch.getTunnel().getTunnelId());\r
670     }\r
671 \r
672     /**\r
673      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
674      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
675      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
676      */\r
677     @Test\r
678     public void testWithMatchEntryWithArbitraryMasks() {\r
679         final MatchBuilder builder = new MatchBuilder();\r
680         builder.setType(OxmMatchType.class);\r
681         final List<MatchEntry> entries = new ArrayList<>();\r
682         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
683         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
684         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
685         entriesBuilder.setHasMask(true);\r
686 \r
687         entriesBuilder = new MatchEntryBuilder();\r
688         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
689         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
690         entriesBuilder.setHasMask(true);\r
691         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
692         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
693         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
694         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 255, 0});\r
695         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
696         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
697         entries.add(entriesBuilder.build());\r
698 \r
699         entriesBuilder = new MatchEntryBuilder();\r
700         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
701         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
702         entriesBuilder.setHasMask(true);\r
703         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
704         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
705         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
706         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 240, 0});\r
707         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
708         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
709         entries.add(entriesBuilder.build());\r
710 \r
711         builder.setMatchEntry(entries);\r
712         final Match match = builder.build();\r
713 \r
714         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
715                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
716         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
717 \r
718         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
719         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1",\r
720                 ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
721         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1",\r
722                 ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
723     }\r
724 \r
725     /**\r
726      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
727      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
728      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
729      */\r
730     @Test\r
731     public void testWithMatchEntryWithSrcCidrMaskAndDstArbitraryBitMask() {\r
732         final MatchBuilder builder = new MatchBuilder();\r
733         builder.setType(OxmMatchType.class);\r
734         final List<MatchEntry> entries = new ArrayList<>();\r
735         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
736         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
737         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
738         entriesBuilder.setHasMask(true);\r
739 \r
740         entriesBuilder = new MatchEntryBuilder();\r
741         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
742         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
743         entriesBuilder.setHasMask(true);\r
744         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
745         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
746         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
747         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
748         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
749         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
750         entries.add(entriesBuilder.build());\r
751 \r
752         entriesBuilder = new MatchEntryBuilder();\r
753         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
754         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
755         entriesBuilder.setHasMask(true);\r
756         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
757         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
758         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
759         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 240, 0});\r
760         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
761         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
762         entries.add(entriesBuilder.build());\r
763 \r
764         builder.setMatchEntry(entries);\r
765         final Match match = builder.build();\r
766 \r
767         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
768                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
769         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
770 \r
771         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
772         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1",\r
773                 ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
774         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1",\r
775                 ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
776     }\r
777 \r
778     /**\r
779      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
780      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
781      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
782      */\r
783     @Test\r
784     public void testWithMatchEntryWithSrcArbitraryBitMaskAndDstCidrMask() {\r
785         final MatchBuilder builder = new MatchBuilder();\r
786         builder.setType(OxmMatchType.class);\r
787         final List<MatchEntry> entries = new ArrayList<>();\r
788         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
789         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
790         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
791         entriesBuilder.setHasMask(true);\r
792 \r
793         entriesBuilder = new MatchEntryBuilder();\r
794         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
795         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
796         entriesBuilder.setHasMask(true);\r
797         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
798         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
799         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
800         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 0, (byte) 255, 0});\r
801         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
802         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
803         entries.add(entriesBuilder.build());\r
804 \r
805         entriesBuilder = new MatchEntryBuilder();\r
806         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
807         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
808         entriesBuilder.setHasMask(true);\r
809         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
810         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
811         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
812         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});\r
813         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
814         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
815         entries.add(entriesBuilder.build());\r
816 \r
817         builder.setMatchEntry(entries);\r
818         final Match match = builder.build();\r
819 \r
820         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
821                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
822         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
823 \r
824         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
825         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1",\r
826                 ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
827         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1",\r
828                 ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
829     }\r
830 \r
831 \r
832     /**\r
833      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
834      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
835      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
836      */\r
837     @Test\r
838     public void testWithMatchEntryWithDstArbitraryBitMaskAndSrcCidrMask() {\r
839         final MatchBuilder builder = new MatchBuilder();\r
840         builder.setType(OxmMatchType.class);\r
841         final List<MatchEntry> entries = new ArrayList<>();\r
842         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
843         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
844         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
845         entriesBuilder.setHasMask(true);\r
846 \r
847         entriesBuilder = new MatchEntryBuilder();\r
848         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
849         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
850         entriesBuilder.setHasMask(true);\r
851         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
852         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
853         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
854         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 240, 0});\r
855         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
856         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
857         entries.add(entriesBuilder.build());\r
858 \r
859         entriesBuilder = new MatchEntryBuilder();\r
860         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
861         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
862         entriesBuilder.setHasMask(true);\r
863         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
864         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
865         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
866         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
867         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
868         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
869         entries.add(entriesBuilder.build());\r
870 \r
871         builder.setMatchEntry(entries);\r
872         final Match match = builder.build();\r
873 \r
874         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
875                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
876         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
877 \r
878         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
879         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1",\r
880                 ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
881         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1",\r
882                 ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
883     }\r
884 \r
885     /**\r
886      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
887      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
888      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
889      */\r
890     @Test\r
891     public void testWithMatchEntryWithDstCidrMaskAndSrcArbitraryBitMask() {\r
892         final MatchBuilder builder = new MatchBuilder();\r
893         builder.setType(OxmMatchType.class);\r
894         final List<MatchEntry> entries = new ArrayList<>();\r
895         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
896         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
897         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
898         entriesBuilder.setHasMask(true);\r
899 \r
900         entriesBuilder = new MatchEntryBuilder();\r
901         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
902         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
903         entriesBuilder.setHasMask(true);\r
904         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
905         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
906         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
907         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});\r
908         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
909         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
910         entries.add(entriesBuilder.build());\r
911 \r
912         entriesBuilder = new MatchEntryBuilder();\r
913         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
914         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
915         entriesBuilder.setHasMask(true);\r
916         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
917         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
918         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
919         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 0, (byte) 255, 0});\r
920         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
921         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
922         entries.add(entriesBuilder.build());\r
923 \r
924         builder.setMatchEntry(entries);\r
925         final Match match = builder.build();\r
926 \r
927         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
928                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
929         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
930 \r
931         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
932         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1",\r
933                 ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
934         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1",\r
935                 ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
936     }\r
937 \r
938     /**\r
939      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
940      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
941      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
942      */\r
943     @Test\r
944     public void testLayer4MatchUdp() {\r
945         final MatchBuilder builder = new MatchBuilder();\r
946         builder.setType(OxmMatchType.class);\r
947         final List<MatchEntry> entries = new ArrayList<>();\r
948         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
949         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
950         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc.class);\r
951         entriesBuilder.setHasMask(false);\r
952         final UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();\r
953         final UdpSrcBuilder portBuilder = new UdpSrcBuilder();\r
954         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
955                 .inet.types.rev130715.PortNumber(11));\r
956         udpSrcCaseBuilder.setUdpSrc(portBuilder.build());\r
957         entriesBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());\r
958         entries.add(entriesBuilder.build());\r
959 \r
960 \r
961         entriesBuilder = new MatchEntryBuilder();\r
962         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
963         entriesBuilder.setOxmMatchField(UdpDst.class);\r
964         entriesBuilder.setHasMask(false);\r
965         final UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();\r
966         final UdpDstBuilder udpDstBuilder = new UdpDstBuilder();\r
967         udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
968                 .inet.types.rev130715.PortNumber(12));\r
969         udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());\r
970         entriesBuilder.setMatchEntryValue(udpDstCaseBuilder.build());\r
971         entries.add(entriesBuilder.build());\r
972 \r
973         builder.setMatchEntry(entries);\r
974 \r
975         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
976                 .MatchBuilder builtMatch = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
977 \r
978         final UdpMatch udpMatch = (UdpMatch) builtMatch.getLayer4Match();\r
979         Assert.assertEquals("Wrong udp src port", 11, udpMatch.getUdpSourcePort().getValue().intValue());\r
980         Assert.assertEquals("Wrong udp dst port", 12, udpMatch.getUdpDestinationPort().getValue().intValue());\r
981     }\r
982 \r
983     /**\r
984      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
985      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
986      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
987      */\r
988     @Test\r
989     public void testLayer4MatchSctp() {\r
990         final MatchBuilder builder = new MatchBuilder();\r
991         builder.setType(OxmMatchType.class);\r
992         final List<MatchEntry> entries = new ArrayList<>();\r
993         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
994         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
995         entriesBuilder.setOxmMatchField(SctpSrc.class);\r
996         entriesBuilder.setHasMask(false);\r
997         final SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();\r
998         final SctpSrcBuilder portBuilder = new SctpSrcBuilder();\r
999         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
1000                 .inet.types.rev130715.PortNumber(13));\r
1001         sctpSrcCaseBuilder.setSctpSrc(portBuilder.build());\r
1002         entriesBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());\r
1003         entries.add(entriesBuilder.build());\r
1004 \r
1005 \r
1006         entriesBuilder = new MatchEntryBuilder();\r
1007         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1008         entriesBuilder.setOxmMatchField(SctpDst.class);\r
1009         entriesBuilder.setHasMask(false);\r
1010         final SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();\r
1011         final SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();\r
1012         sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
1013                 .inet.types.rev130715.PortNumber(14));\r
1014         sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());\r
1015         entriesBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());\r
1016         entries.add(entriesBuilder.build());\r
1017         builder.setMatchEntry(entries);\r
1018 \r
1019         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1020                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1021         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1022 \r
1023         final SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();\r
1024         Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());\r
1025         Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());\r
1026     }\r
1027 \r
1028     /**\r
1029      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1030      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1031      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1032      */\r
1033     @Test\r
1034     public void testLayer3MatchIpv6() {\r
1035         final MatchBuilder builder = new MatchBuilder();\r
1036         builder.setType(OxmMatchType.class);\r
1037         final List<MatchEntry> entries = new ArrayList<>();\r
1038         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1039         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1040         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1041         entriesBuilder.setHasMask(false);\r
1042         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1043         final Ipv6SrcBuilder ipv6AddressBuilder = new Ipv6SrcBuilder();\r
1044         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9657"));\r
1045         ipv6SrcCaseBuilder.setIpv6Src(ipv6AddressBuilder.build());\r
1046         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1047         entries.add(entriesBuilder.build());\r
1048 \r
1049         entriesBuilder = new MatchEntryBuilder();\r
1050         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1051         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1052         entriesBuilder.setHasMask(false);\r
1053         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1054         final Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();\r
1055         ipv6DstBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9658"));\r
1056         ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());\r
1057         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1058         entries.add(entriesBuilder.build());\r
1059 \r
1060         entriesBuilder = new MatchEntryBuilder();\r
1061         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1062         entriesBuilder.setOxmMatchField(Ipv6Flabel.class);\r
1063         entriesBuilder.setHasMask(false);\r
1064         final Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();\r
1065         final Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();\r
1066         ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(18L));\r
1067         ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());\r
1068         entriesBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());\r
1069         entries.add(entriesBuilder.build());\r
1070 \r
1071         entriesBuilder = new MatchEntryBuilder();\r
1072         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1073         entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);\r
1074         entriesBuilder.setHasMask(false);\r
1075         final Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();\r
1076         final Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();\r
1077         ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9659"));\r
1078         ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());\r
1079         entriesBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());\r
1080         entries.add(entriesBuilder.build());\r
1081 \r
1082         entriesBuilder = new MatchEntryBuilder();\r
1083         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1084         entriesBuilder.setOxmMatchField(Ipv6NdSll.class);\r
1085         entriesBuilder.setHasMask(false);\r
1086         final Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();\r
1087         final Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();\r
1088         ipv6NdSllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:05"));\r
1089         ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());\r
1090         entriesBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());\r
1091         entries.add(entriesBuilder.build());\r
1092 \r
1093         entriesBuilder = new MatchEntryBuilder();\r
1094         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1095         entriesBuilder.setOxmMatchField(Ipv6NdTll.class);\r
1096         entriesBuilder.setHasMask(false);\r
1097         final Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();\r
1098         final Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();\r
1099         ipv6NdTllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:06"));\r
1100         ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());\r
1101         entriesBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());\r
1102         entries.add(entriesBuilder.build());\r
1103 \r
1104         entriesBuilder = new MatchEntryBuilder();\r
1105         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1106         entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
1107         entriesBuilder.setHasMask(false);\r
1108         final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();\r
1109         final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();\r
1110         ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));\r
1111         ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());\r
1112         entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());\r
1113         builder.setMatchEntry(entries);\r
1114         entries.add(entriesBuilder.build());\r
1115 \r
1116         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1117                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1118         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1119 \r
1120         final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
1121         Assert.assertEquals("Wrong ipv6 src address", "2001:cdba::3257:9657/128",\r
1122                 ipv6Match.getIpv6Source().getValue());\r
1123         Assert.assertEquals("Wrong ipv6 dst address", "2001:cdba::3257:9658/128",\r
1124                 ipv6Match.getIpv6Destination().getValue());\r
1125         Assert.assertEquals("Wrong ipv6 nd target", "2001:cdba:0000:0000:0000:0000:3257:9659",\r
1126                 ipv6Match.getIpv6NdTarget().getValue());\r
1127         Assert.assertEquals("Wrong ipv6 flabel", 18, ipv6Match.getIpv6Label().getIpv6Flabel().getValue().intValue());\r
1128         Assert.assertEquals("Wrong ipv6 nd sll", new MacAddress("00:00:00:00:00:05"), ipv6Match.getIpv6NdSll());\r
1129         Assert.assertEquals("Wrong ipv6 nd tll", new MacAddress("00:00:00:00:00:06"), ipv6Match.getIpv6NdTll());\r
1130         Assert.assertEquals("Wrong ipv6 ext header", 358, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
1131     }\r
1132 \r
1133     /**\r
1134      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1135      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1136      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1137      */\r
1138     @Test\r
1139     public void testLayer3MatchIpv6ExtHeader2() {\r
1140         final MatchBuilder builder = new MatchBuilder();\r
1141         builder.setType(OxmMatchType.class);\r
1142         final List<MatchEntry> entries = new ArrayList<>();\r
1143         final MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1144         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1145         entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
1146         entriesBuilder.setHasMask(true);\r
1147         final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();\r
1148         final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();\r
1149         ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false));\r
1150         ipv6ExthdrBuilder.setMask(new byte[]{1, 2});\r
1151         ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());\r
1152         entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());\r
1153         entries.add(entriesBuilder.build());\r
1154         builder.setMatchEntry(entries);\r
1155 \r
1156         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1157                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1158         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1159 \r
1160         final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
1161         Assert.assertEquals("Wrong ipv6 ext header", 153, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
1162         Assert.assertEquals("Wrong ipv6 ext header mask", 258, ipv6Match.getIpv6ExtHeader().getIpv6ExthdrMask().intValue());\r
1163     }\r
1164 \r
1165     /**\r
1166      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1167      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1168      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1169      */\r
1170     @Test\r
1171     public void testLayer3MatchArp() {\r
1172         final MatchBuilder builder = new MatchBuilder();\r
1173         builder.setType(OxmMatchType.class);\r
1174         final List<MatchEntry> entries = new ArrayList<>();\r
1175         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1176         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1177         entriesBuilder.setOxmMatchField(ArpOp.class);\r
1178         entriesBuilder.setHasMask(false);\r
1179         final ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();\r
1180         final ArpOpBuilder arpOpBuilder = new ArpOpBuilder();\r
1181         arpOpBuilder.setOpCode(17);\r
1182         arpOpCaseBuilder.setArpOp(arpOpBuilder.build());\r
1183         entriesBuilder.setMatchEntryValue(arpOpCaseBuilder.build());\r
1184         entries.add(entriesBuilder.build());\r
1185 \r
1186         entriesBuilder = new MatchEntryBuilder();\r
1187         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1188         entriesBuilder.setOxmMatchField(ArpSpa.class);\r
1189         entriesBuilder.setHasMask(false);\r
1190         final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();\r
1191         final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();\r
1192         arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
1193         arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());\r
1194         entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());\r
1195         entries.add(entriesBuilder.build());\r
1196 \r
1197         entriesBuilder = new MatchEntryBuilder();\r
1198         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1199         entriesBuilder.setOxmMatchField(ArpTpa.class);\r
1200         entriesBuilder.setHasMask(false);\r
1201         final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();\r
1202         final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();\r
1203         arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
1204         arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());\r
1205         entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());\r
1206         entries.add(entriesBuilder.build());\r
1207 \r
1208         entriesBuilder = new MatchEntryBuilder();\r
1209         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1210         entriesBuilder.setOxmMatchField(ArpSha.class);\r
1211         entriesBuilder.setHasMask(false);\r
1212         final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();\r
1213         final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();\r
1214         arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
1215         arpShaCaseBuilder.setArpSha(arpShaBuilder.build());\r
1216         entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());\r
1217         entries.add(entriesBuilder.build());\r
1218 \r
1219         entriesBuilder = new MatchEntryBuilder();\r
1220         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1221         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);\r
1222         entriesBuilder.setHasMask(false);\r
1223         final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();\r
1224         final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();\r
1225         arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
1226         arpThaCaseBuilder.setArpTha(arpThaBuilder.build());\r
1227         entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());\r
1228         entries.add(entriesBuilder.build());\r
1229         builder.setMatchEntry(entries);\r
1230 \r
1231         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1232                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1233         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1234 \r
1235         final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
1236         Assert.assertEquals("Wrong arp op", 17, arpMatch.getArpOp().intValue());\r
1237         Assert.assertEquals("Wrong arp spa", "10.0.0.3/32", arpMatch.getArpSourceTransportAddress().getValue());\r
1238         Assert.assertEquals("Wrong arp tpa", "10.0.0.4/32", arpMatch.getArpTargetTransportAddress().getValue());\r
1239         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
1240         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
1241     }\r
1242 \r
1243     /**\r
1244      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1245      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1246      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1247      */\r
1248     @Test\r
1249     public void testLayer3MatchArpWithMasks() {\r
1250         final MatchBuilder builder = new MatchBuilder();\r
1251         builder.setType(OxmMatchType.class);\r
1252         final List<MatchEntry> entries = new ArrayList<>();\r
1253         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1254         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1255         entriesBuilder.setOxmMatchField(ArpSpa.class);\r
1256         entriesBuilder.setHasMask(true);\r
1257         final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();\r
1258         final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();\r
1259         arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
1260         arpSpaBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
1261         arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());\r
1262         entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());\r
1263         entries.add(entriesBuilder.build());\r
1264 \r
1265         entriesBuilder = new MatchEntryBuilder();\r
1266         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1267         entriesBuilder.setOxmMatchField(ArpTpa.class);\r
1268         entriesBuilder.setHasMask(true);\r
1269         final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();\r
1270         final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();\r
1271         arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
1272         arpTpaBuilder.setMask(new byte[]{(byte) 255, (byte) 128, 0, 0});\r
1273         arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());\r
1274         entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());\r
1275         entries.add(entriesBuilder.build());\r
1276 \r
1277         entriesBuilder = new MatchEntryBuilder();\r
1278         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1279         entriesBuilder.setOxmMatchField(ArpSha.class);\r
1280         entriesBuilder.setHasMask(true);\r
1281         final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();\r
1282         final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();\r
1283         arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
1284         arpShaBuilder.setMask(new byte[]{0, 0, 1, 0, 4, 0});\r
1285         arpShaCaseBuilder.setArpSha(arpShaBuilder.build());\r
1286         entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());\r
1287         entries.add(entriesBuilder.build());\r
1288 \r
1289         entriesBuilder = new MatchEntryBuilder();\r
1290         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1291         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);\r
1292         entriesBuilder.setHasMask(true);\r
1293         final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();\r
1294         final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();\r
1295         arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
1296         arpThaBuilder.setMask(new byte[]{1, 1, 1, 2, 2, 2});\r
1297         arpThaCaseBuilder.setArpTha(arpThaBuilder.build());\r
1298         entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());\r
1299         entries.add(entriesBuilder.build());\r
1300 \r
1301         builder.setMatchEntry(entries);\r
1302 \r
1303         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1304                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1305         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1306 \r
1307         final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
1308         Assert.assertEquals("Wrong arp spa", "10.0.0.3/24", arpMatch.getArpSourceTransportAddress().getValue());\r
1309         Assert.assertEquals("Wrong arp tpa", "10.0.0.0/9", arpMatch.getArpTargetTransportAddress().getValue());\r
1310         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
1311         Assert.assertEquals("Wrong arp sha mask", "00:00:01:00:04:00", arpMatch.getArpSourceHardwareAddress().getMask().getValue());\r
1312         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
1313         Assert.assertEquals("Wrong arp tha mask", "01:01:01:02:02:02", arpMatch.getArpTargetHardwareAddress().getMask().getValue());\r
1314     }\r
1315 \r
1316     /**\r
1317      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1318      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1319      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1320      */\r
1321     @Test\r
1322     public void testWithMatchEntryWithIpv6ArbitraryMasks() {\r
1323         final MatchBuilder builder = new MatchBuilder();\r
1324         builder.setType(OxmMatchType.class);\r
1325         final List<MatchEntry> entries = new ArrayList<>();\r
1326         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1327         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1328         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
1329         entriesBuilder.setHasMask(true);\r
1330 \r
1331         entriesBuilder = new MatchEntryBuilder();\r
1332         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1333         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1334         entriesBuilder.setHasMask(true);\r
1335         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1336         final Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();\r
1337         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("1001:1001:1001:1001:1001:1001:1001:1001"));\r
1338         ipv6SrcBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1339         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());\r
1340         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1341         entries.add(entriesBuilder.build());\r
1342 \r
1343         entriesBuilder = new MatchEntryBuilder();\r
1344         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1345         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1346         entriesBuilder.setHasMask(true);\r
1347         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1348         final Ipv6DstBuilder ipv6AddressBuilder = new Ipv6DstBuilder();\r
1349         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2002:2002:2002:2002:2002:2002:2002:2002"));\r
1350         ipv6AddressBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1351         ipv6DstCaseBuilder.setIpv6Dst(ipv6AddressBuilder.build());\r
1352         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1353         entries.add(entriesBuilder.build());\r
1354 \r
1355         builder.setMatchEntry(entries);\r
1356         final Match match = builder.build();\r
1357 \r
1358         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1359                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
1360         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
1361 \r
1362         final Ipv6MatchArbitraryBitMask ipv6MatchArbitraryBitMask = (Ipv6MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
1363         Assert.assertEquals("Wrong ipv6 src address", "1001:1001:1001:1001:1001:1001:1001:1001",\r
1364                 ipv6MatchArbitraryBitMask.getIpv6SourceAddressNoMask().getValue());\r
1365         Assert.assertEquals("Wrong ipv6 dst address", "2002:2002:2002:2002:2002:2002:2002:2002",\r
1366                 ipv6MatchArbitraryBitMask.getIpv6DestinationAddressNoMask().getValue());\r
1367     }\r
1368 \r
1369     /**\r
1370      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1371      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1372      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1373      */\r
1374     @Test\r
1375     public void testWithMatchEntryWithIpv6SrcCidrlMaskAndDstArbitraryBitMask() {\r
1376         final MatchBuilder builder = new MatchBuilder();\r
1377         builder.setType(OxmMatchType.class);\r
1378         final List<MatchEntry> entries = new ArrayList<>();\r
1379         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1380         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1381         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
1382         entriesBuilder.setHasMask(true);\r
1383 \r
1384         entriesBuilder = new MatchEntryBuilder();\r
1385         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1386         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1387         entriesBuilder.setHasMask(true);\r
1388         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1389         final Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();\r
1390         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("1001:1001:1001:1001:1001:1001:1001:1001"));\r
1391         ipv6SrcBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});\r
1392         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());\r
1393         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1394         entries.add(entriesBuilder.build());\r
1395 \r
1396         entriesBuilder = new MatchEntryBuilder();\r
1397         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1398         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1399         entriesBuilder.setHasMask(true);\r
1400         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1401         final Ipv6DstBuilder ipv6AddressBuilder = new Ipv6DstBuilder();\r
1402         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2002:2002:2002:2002:2002:2002:2002:2002"));\r
1403         ipv6AddressBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1404         ipv6DstCaseBuilder.setIpv6Dst(ipv6AddressBuilder.build());\r
1405         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1406         entries.add(entriesBuilder.build());\r
1407 \r
1408         builder.setMatchEntry(entries);\r
1409         final Match match = builder.build();\r
1410 \r
1411         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1412                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
1413         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
1414 \r
1415         final Ipv6MatchArbitraryBitMask ipv6MatchArbitraryBitMask = (Ipv6MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
1416         Assert.assertEquals("Wrong ipv6 src address", "1001:1001:1001:1001:1001:1001:1001:1001",\r
1417                 ipv6MatchArbitraryBitMask.getIpv6SourceAddressNoMask().getValue());\r
1418         Assert.assertEquals("Wrong ipv6 dst address", "2002:2002:2002:2002:2002:2002:2002:2002",\r
1419                 ipv6MatchArbitraryBitMask.getIpv6DestinationAddressNoMask().getValue());\r
1420     }\r
1421 \r
1422     /**\r
1423      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1424      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1425      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1426      */\r
1427     @Test\r
1428     public void testWithMatchEntryWithIpv6SrcArbitraryBitMaskAndDstCidrMask() {\r
1429         final MatchBuilder builder = new MatchBuilder();\r
1430         builder.setType(OxmMatchType.class);\r
1431         final List<MatchEntry> entries = new ArrayList<>();\r
1432         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1433         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1434         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
1435         entriesBuilder.setHasMask(true);\r
1436 \r
1437         entriesBuilder = new MatchEntryBuilder();\r
1438         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1439         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1440         entriesBuilder.setHasMask(true);\r
1441         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1442         final Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();\r
1443         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("1001:1001:1001:1001:1001:1001:1001:1001"));\r
1444         ipv6SrcBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1445         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());\r
1446         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1447         entries.add(entriesBuilder.build());\r
1448 \r
1449         entriesBuilder = new MatchEntryBuilder();\r
1450         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1451         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1452         entriesBuilder.setHasMask(true);\r
1453         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1454         final Ipv6DstBuilder ipv6AddressBuilder = new Ipv6DstBuilder();\r
1455         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2002:2002:2002:2002:2002:2002:2002:2002"));\r
1456         ipv6AddressBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});\r
1457         ipv6DstCaseBuilder.setIpv6Dst(ipv6AddressBuilder.build());\r
1458         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1459         entries.add(entriesBuilder.build());\r
1460 \r
1461         builder.setMatchEntry(entries);\r
1462         final Match match = builder.build();\r
1463 \r
1464         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1465                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
1466         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
1467 \r
1468         final Ipv6MatchArbitraryBitMask ipv6MatchArbitraryBitMask = (Ipv6MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
1469         Assert.assertEquals("Wrong ipv6 src address", "1001:1001:1001:1001:1001:1001:1001:1001",\r
1470                 ipv6MatchArbitraryBitMask.getIpv6SourceAddressNoMask().getValue());\r
1471         Assert.assertEquals("Wrong ipv6 dst address", "2002:2002:2002:2002:2002:2002:2002:2002",\r
1472                 ipv6MatchArbitraryBitMask.getIpv6DestinationAddressNoMask().getValue());\r
1473     }\r
1474 \r
1475 \r
1476     /**\r
1477      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1478      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1479      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1480      */\r
1481 \r
1482     @Test\r
1483     public void testWithMatchEntryWithIpv6DstArbitraryBitMaskAndSrcCidrMask() {\r
1484         final MatchBuilder builder = new MatchBuilder();\r
1485         builder.setType(OxmMatchType.class);\r
1486         final List<MatchEntry> entries = new ArrayList<>();\r
1487         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1488         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1489         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
1490         entriesBuilder.setHasMask(true);\r
1491 \r
1492         entriesBuilder = new MatchEntryBuilder();\r
1493         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1494         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1495         entriesBuilder.setHasMask(true);\r
1496         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1497         final Ipv6DstBuilder ipv6AddressBuilder = new Ipv6DstBuilder();\r
1498         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("1001:1001:1001:1001:1001:1001:1001:1001"));\r
1499         ipv6AddressBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1500         ipv6DstCaseBuilder.setIpv6Dst(ipv6AddressBuilder.build());\r
1501         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1502         entries.add(entriesBuilder.build());\r
1503 \r
1504         entriesBuilder = new MatchEntryBuilder();\r
1505         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1506         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1507         entriesBuilder.setHasMask(true);\r
1508         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1509         final Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();\r
1510         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("2002:2002:2002:2002:2002:2002:2002:2002"));\r
1511         ipv6SrcBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});\r
1512         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());\r
1513         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1514         entries.add(entriesBuilder.build());\r
1515 \r
1516         builder.setMatchEntry(entries);\r
1517         final Match match = builder.build();\r
1518 \r
1519         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1520                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
1521         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
1522 \r
1523         final Ipv6MatchArbitraryBitMask ipv6MatchArbitraryBitMask = (Ipv6MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
1524         Assert.assertEquals("Wrong ipv6 src address", "2002:2002:2002:2002:2002:2002:2002:2002",\r
1525                 ipv6MatchArbitraryBitMask.getIpv6SourceAddressNoMask().getValue());\r
1526         Assert.assertEquals("Wrong ipv6 dst address", "1001:1001:1001:1001:1001:1001:1001:1001",\r
1527                 ipv6MatchArbitraryBitMask.getIpv6DestinationAddressNoMask().getValue());\r
1528     }\r
1529 \r
1530 \r
1531     /**\r
1532      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(\r
1533      * org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger,\r
1534      * org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1535      */\r
1536 \r
1537     @Test\r
1538     public void testWithMatchEntryWithIpv6DstCidrMaskAndSrcArbitraryBitMask() {\r
1539         final MatchBuilder builder = new MatchBuilder();\r
1540         builder.setType(OxmMatchType.class);\r
1541         final List<MatchEntry> entries = new ArrayList<>();\r
1542         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1543         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1544         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
1545         entriesBuilder.setHasMask(true);\r
1546 \r
1547         entriesBuilder = new MatchEntryBuilder();\r
1548         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1549         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
1550         entriesBuilder.setHasMask(true);\r
1551         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
1552         final Ipv6DstBuilder ipv6AddressBuilder = new Ipv6DstBuilder();\r
1553         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("1001:1001:1001:1001:1001:1001:1001:1001"));\r
1554         ipv6AddressBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0});\r
1555         ipv6DstCaseBuilder.setIpv6Dst(ipv6AddressBuilder.build());\r
1556         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
1557         entries.add(entriesBuilder.build());\r
1558 \r
1559         entriesBuilder = new MatchEntryBuilder();\r
1560         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1561         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
1562         entriesBuilder.setHasMask(true);\r
1563         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
1564         final Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();\r
1565         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("2002:2002:2002:2002:2002:2002:2002:2002"));\r
1566         ipv6SrcBuilder.setMask(new byte[]{(byte) 255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(byte) 255});\r
1567         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());\r
1568         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
1569         entries.add(entriesBuilder.build());\r
1570 \r
1571         builder.setMatchEntry(entries);\r
1572         final Match match = builder.build();\r
1573 \r
1574         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1575                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF13);\r
1576         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
1577 \r
1578         final Ipv6MatchArbitraryBitMask ipv6MatchArbitraryBitMask = (Ipv6MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
1579         Assert.assertEquals("Wrong ipv6 src address", "2002:2002:2002:2002:2002:2002:2002:2002",\r
1580                 ipv6MatchArbitraryBitMask.getIpv6SourceAddressNoMask().getValue());\r
1581         Assert.assertEquals("Wrong ipv6 dst address", "1001:1001:1001:1001:1001:1001:1001:1001",\r
1582                 ipv6MatchArbitraryBitMask.getIpv6DestinationAddressNoMask().getValue());\r
1583     }\r
1584 \r
1585 \r
1586 }\r