e1e763a7762d21b7e54021256fb1d79e931d26d0
[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.rev100924.Dscp;\r
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.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._4.match.SctpMatch;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatch;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatch;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;\r
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;\r
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;\r
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;\r
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;\r
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;\r
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;\r
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;\r
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;\r
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;\r
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;\r
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;\r
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;\r
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;\r
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;\r
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;\r
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;\r
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;\r
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;\r
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;\r
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;\r
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;\r
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;\r
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;\r
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;\r
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;\r
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;\r
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;\r
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;\r
154 \r
155 /**\r
156  * @author michal.polkorab\r
157  */\r
158 public class MatchConvertorImplV13Test {\r
159 \r
160     /**\r
161      * Initializes OpenflowPortsUtil\r
162      */\r
163     @Before\r
164     public void startUp() {\r
165         OpenflowPortsUtil.init();\r
166     }\r
167 \r
168     /**\r
169      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
170      */\r
171     @Test(expected = NullPointerException.class)\r
172     public void testEmptyMatch() {\r
173         final MatchBuilder builder = new MatchBuilder();\r
174 \r
175         MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF10);\r
176     }\r
177 \r
178     /**\r
179      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
180      */\r
181     @Test\r
182     public void testEmptyMatchEntry() {\r
183 \r
184         final MatchBuilder builder = new MatchBuilder();\r
185         builder.setType(OxmMatchType.class);\r
186         final List<MatchEntry> entries = new ArrayList<>();\r
187         builder.setMatchEntry(entries);\r
188         final Match match = builder.build();\r
189 \r
190         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
191                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
192         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
193 \r
194         Assert.assertEquals("Wrong match entries", null, builtMatch.getEthernetMatch());\r
195         Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv4Match());\r
196         Assert.assertEquals("Wrong match entries", null, builtMatch.getIcmpv6Match());\r
197         Assert.assertEquals("Wrong match entries", null, builtMatch.getInPhyPort());\r
198         Assert.assertEquals("Wrong match entries", null, builtMatch.getInPort());\r
199         Assert.assertEquals("Wrong match entries", null, builtMatch.getIpMatch());\r
200         Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer3Match());\r
201         Assert.assertEquals("Wrong match entries", null, builtMatch.getLayer4Match());\r
202         Assert.assertEquals("Wrong match entries", null, builtMatch.getMetadata());\r
203         Assert.assertEquals("Wrong match entries", null, builtMatch.getProtocolMatchFields());\r
204         Assert.assertEquals("Wrong match entries", null, builtMatch.getVlanMatch());\r
205         Assert.assertEquals("Wrong match entries", null, builtMatch.getTunnel());\r
206 \r
207     }\r
208 \r
209     /**\r
210      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
211      */\r
212     @Test\r
213     public void testWithMatchEntryNoMasks() {\r
214         final List<MatchEntry> entries = new ArrayList<>();\r
215         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
216         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
217         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort.class);\r
218         entriesBuilder.setHasMask(false);\r
219         final InPortCaseBuilder caseBuilder = new InPortCaseBuilder();\r
220         final InPortBuilder portBuilder = new InPortBuilder();\r
221         portBuilder.setPortNumber(new PortNumber(1L));\r
222         caseBuilder.setInPort(portBuilder.build());\r
223         entriesBuilder.setMatchEntryValue(caseBuilder.build());\r
224         entries.add(entriesBuilder.build());\r
225 \r
226         final InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();\r
227         entriesBuilder = new MatchEntryBuilder();\r
228         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
229         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort.class);\r
230         entriesBuilder.setHasMask(false);\r
231         final InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();\r
232         inPhyPortBuilder.setPortNumber(new PortNumber(2L));\r
233         inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());\r
234         entriesBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());\r
235         entries.add(entriesBuilder.build());\r
236 \r
237         entriesBuilder = new MatchEntryBuilder();\r
238         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
239         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
240         entriesBuilder.setHasMask(false);\r
241         final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();\r
242         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
243         metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
244         metadataCaseBuilder.setMetadata(metadataBuilder.build());\r
245         entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());\r
246         entries.add(entriesBuilder.build());\r
247 \r
248         entriesBuilder = new MatchEntryBuilder();\r
249         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
250         entriesBuilder.setOxmMatchField(EthDst.class);\r
251         entriesBuilder.setHasMask(false);\r
252         final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();\r
253         final EthDstBuilder ethDstBuilder = new EthDstBuilder();\r
254         ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
255         ethDstCaseBuilder.setEthDst(ethDstBuilder.build());\r
256         entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());\r
257         entries.add(entriesBuilder.build());\r
258 \r
259         entriesBuilder = new MatchEntryBuilder();\r
260         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
261         entriesBuilder.setOxmMatchField(EthSrc.class);\r
262         entriesBuilder.setHasMask(false);\r
263         final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();\r
264         final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();\r
265         ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
266         ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());\r
267         entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());\r
268         entries.add(entriesBuilder.build());\r
269 \r
270 \r
271         entriesBuilder = new MatchEntryBuilder();\r
272         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
273         entriesBuilder.setOxmMatchField(EthType.class);\r
274         entriesBuilder.setHasMask(false);\r
275         final EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();\r
276 \r
277         final EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();\r
278         ethTypeBuilder.setEthType(new EtherType(3));\r
279         ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());\r
280         entriesBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());\r
281         entries.add(entriesBuilder.build());\r
282 \r
283 \r
284         entriesBuilder = new MatchEntryBuilder();\r
285         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
286         entriesBuilder.setOxmMatchField(VlanVid.class);\r
287         final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();\r
288         entriesBuilder.setHasMask(false);\r
289         final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();\r
290         vlanVidBuilder.setVlanVid(4);\r
291         vlanVidBuilder.setCfiBit(true);\r
292         vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());\r
293         entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());\r
294         entries.add(entriesBuilder.build());\r
295 \r
296         entriesBuilder = new MatchEntryBuilder();\r
297         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
298         entriesBuilder.setOxmMatchField(VlanPcp.class);\r
299         final VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();\r
300         entriesBuilder.setHasMask(false);\r
301         final VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();\r
302         vlanPcpBuilder.setVlanPcp((short) 5);\r
303         vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());\r
304         entriesBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());\r
305         entries.add(entriesBuilder.build());\r
306 \r
307 \r
308         entriesBuilder = new MatchEntryBuilder();\r
309         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
310         entriesBuilder.setOxmMatchField(IpDscp.class);\r
311         entriesBuilder.setHasMask(false);\r
312         final IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();\r
313         final IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();\r
314         ipDscpBuilder.setDscp(new Dscp((short) 6));\r
315         ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());\r
316         entriesBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());\r
317         entries.add(entriesBuilder.build());\r
318 \r
319 \r
320         entriesBuilder = new MatchEntryBuilder();\r
321         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
322         entriesBuilder.setOxmMatchField(IpEcn.class);\r
323         entriesBuilder.setHasMask(false);\r
324         final IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();\r
325         final IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();\r
326         ipEcnBuilder.setEcn((short) 7);\r
327         ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());\r
328         entriesBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());\r
329         entries.add(entriesBuilder.build());\r
330 \r
331 \r
332         entriesBuilder = new MatchEntryBuilder();\r
333         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
334         entriesBuilder.setOxmMatchField(IpProto.class);\r
335         final IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();\r
336         entriesBuilder.setHasMask(false);\r
337         final IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();\r
338         ipProtoBuilder.setProtocolNumber((short) 8);\r
339         ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());\r
340         entriesBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());\r
341         entries.add(entriesBuilder.build());\r
342 \r
343 \r
344         entriesBuilder = new MatchEntryBuilder();\r
345         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
346         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
347         entriesBuilder.setHasMask(false);\r
348         final Ipv4SrcCaseBuilder ipv4AddressBuilder = new Ipv4SrcCaseBuilder();\r
349         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
350         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
351         ipv4AddressBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
352         entriesBuilder.setMatchEntryValue(ipv4AddressBuilder.build());\r
353         entries.add(entriesBuilder.build());\r
354 \r
355         entriesBuilder = new MatchEntryBuilder();\r
356         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
357         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
358         entriesBuilder.setHasMask(false);\r
359         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
360         final Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();\r
361         ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
362         ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());\r
363         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
364         entries.add(entriesBuilder.build());\r
365 \r
366         entriesBuilder = new MatchEntryBuilder();\r
367         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
368         entriesBuilder.setOxmMatchField(TcpSrc.class);\r
369         entriesBuilder.setHasMask(false);\r
370         final TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();\r
371         final TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();\r
372         tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
373                 .inet.types.rev100924.PortNumber(9));\r
374         tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());\r
375         entriesBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());\r
376         entries.add(entriesBuilder.build());\r
377 \r
378         entriesBuilder = new MatchEntryBuilder();\r
379         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
380         entriesBuilder.setOxmMatchField(TcpDst.class);\r
381         entriesBuilder.setHasMask(false);\r
382         final TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();\r
383         final TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();\r
384         tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
385                 .inet.types.rev100924.PortNumber(10));\r
386         tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());\r
387         entriesBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());\r
388         entries.add(entriesBuilder.build());\r
389 \r
390         entriesBuilder = new MatchEntryBuilder();\r
391         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
392         entriesBuilder.setOxmMatchField(Icmpv4Type.class);\r
393         entriesBuilder.setHasMask(false);\r
394         final Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();\r
395         final Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();\r
396         icmpv4TypeBuilder.setIcmpv4Type((short) 15);\r
397         icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());\r
398         entriesBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());\r
399         entries.add(entriesBuilder.build());\r
400 \r
401         entriesBuilder = new MatchEntryBuilder();\r
402         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
403         entriesBuilder.setOxmMatchField(Icmpv4Code.class);\r
404         entriesBuilder.setHasMask(false);\r
405         final Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();\r
406         final Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();\r
407         icmpv4CodeBuilder.setIcmpv4Code((short) 16);\r
408         icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());\r
409         entriesBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());\r
410         entries.add(entriesBuilder.build());\r
411 \r
412         entriesBuilder = new MatchEntryBuilder();\r
413         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
414         entriesBuilder.setOxmMatchField(Icmpv6Type.class);\r
415         entriesBuilder.setHasMask(false);\r
416         final Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();\r
417         final Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();\r
418         icmpv6TypeBuilder.setIcmpv6Type((short) 19);\r
419         icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());\r
420         entriesBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());\r
421         entries.add(entriesBuilder.build());\r
422 \r
423         entriesBuilder = new MatchEntryBuilder();\r
424         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
425         entriesBuilder.setOxmMatchField(Icmpv6Code.class);\r
426         entriesBuilder.setHasMask(false);\r
427         final Icmpv6CodeCaseBuilder icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();\r
428         final Icmpv6CodeBuilder icmpv6CodeBuilder = new Icmpv6CodeBuilder();\r
429         icmpv6CodeBuilder.setIcmpv6Code((short) 20);\r
430         icmpv6CodeCaseBuilder.setIcmpv6Code(icmpv6CodeBuilder.build());\r
431         entriesBuilder.setMatchEntryValue(icmpv6CodeCaseBuilder.build());\r
432         entries.add(entriesBuilder.build());\r
433 \r
434         entriesBuilder = new MatchEntryBuilder();\r
435         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
436         entriesBuilder.setOxmMatchField(MplsLabel.class);\r
437         entriesBuilder.setHasMask(false);\r
438         final MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();\r
439 \r
440         final MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();\r
441         mplsLabelBuilder.setMplsLabel(21L);\r
442         mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());\r
443         entriesBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());\r
444         entries.add(entriesBuilder.build());\r
445 \r
446         entriesBuilder = new MatchEntryBuilder();\r
447         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
448         entriesBuilder.setOxmMatchField(MplsTc.class);\r
449         entriesBuilder.setHasMask(false);\r
450         final MplsTcCaseBuilder mplsTcCaseBuilder = new MplsTcCaseBuilder();\r
451         final MplsTcBuilder mplsTcBuilder = new MplsTcBuilder();\r
452         mplsTcBuilder.setTc((short) 22);\r
453         mplsTcCaseBuilder.setMplsTc(mplsTcBuilder.build());\r
454         entriesBuilder.setMatchEntryValue(mplsTcCaseBuilder.build());\r
455         entries.add(entriesBuilder.build());\r
456 \r
457         entriesBuilder = new MatchEntryBuilder();\r
458         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
459         entriesBuilder.setOxmMatchField(MplsBos.class);\r
460         entriesBuilder.setHasMask(false);\r
461         final MplsBosCaseBuilder mplsBosCaseBuilder = new MplsBosCaseBuilder();\r
462         final MplsBosBuilder mplsBosBuilder = new MplsBosBuilder();\r
463         mplsBosBuilder.setBos(true);\r
464         mplsBosCaseBuilder.setMplsBos(mplsBosBuilder.build());\r
465         entriesBuilder.setMatchEntryValue(mplsBosCaseBuilder.build());\r
466         entries.add(entriesBuilder.build());\r
467 \r
468         entriesBuilder = new MatchEntryBuilder();\r
469         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
470         entriesBuilder.setOxmMatchField(PbbIsid.class);\r
471         entriesBuilder.setHasMask(false);\r
472         final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();\r
473         final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();\r
474         pbbIsidBuilder.setIsid(23L);\r
475         pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());\r
476         entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());\r
477 \r
478         entries.add(entriesBuilder.build());\r
479         entriesBuilder = new MatchEntryBuilder();\r
480         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
481         entriesBuilder.setOxmMatchField(TunnelId.class);\r
482         entriesBuilder.setHasMask(false);\r
483         final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();\r
484         final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();\r
485         tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
486         tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());\r
487         entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());\r
488         entries.add(entriesBuilder.build());\r
489 \r
490         final MatchBuilder builder = new MatchBuilder();\r
491         builder.setMatchEntry(entries);\r
492 \r
493         final Match match = builder.build();\r
494 \r
495         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
496                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
497         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
498 \r
499         Assert.assertEquals("Wrong in port", "openflow:42:1", builtMatch.getInPort().getValue());\r
500         Assert.assertEquals("Wrong in phy port", "openflow:42:2", builtMatch.getInPhyPort().getValue());\r
501         Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
502         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
503         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
504         Assert.assertEquals("Wrong eth type", 3, builtMatch.getEthernetMatch().getEthernetType().getType().getValue().intValue());\r
505         Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
506         Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
507         Assert.assertEquals("Wrong vlan pcp", 5, builtMatch.getVlanMatch().getVlanPcp().getValue().intValue());\r
508         Assert.assertEquals("Wrong ip dscp", 6, builtMatch.getIpMatch().getIpDscp().getValue().intValue());\r
509         Assert.assertEquals("Wrong ip ecn", 7, builtMatch.getIpMatch().getIpEcn().intValue());\r
510         Assert.assertEquals("Wrong ip proto", null, builtMatch.getIpMatch().getIpProto());\r
511         Assert.assertEquals("Wrong ip protocol", 8, builtMatch.getIpMatch().getIpProtocol().intValue());\r
512 \r
513         final TcpMatch tcpMatch = (TcpMatch) builtMatch.getLayer4Match();\r
514         Assert.assertEquals("Wrong tcp src port", 9, tcpMatch.getTcpSourcePort().getValue().intValue());\r
515         Assert.assertEquals("Wrong tcp dst port", 10, tcpMatch.getTcpDestinationPort().getValue().intValue());\r
516         Assert.assertEquals("Wrong icmpv4 type", 15, builtMatch.getIcmpv4Match().getIcmpv4Type().intValue());\r
517         Assert.assertEquals("Wrong icmpv4 code", 16, builtMatch.getIcmpv4Match().getIcmpv4Code().intValue());\r
518         Assert.assertEquals("Wrong icmpv6 type", 19, builtMatch.getIcmpv6Match().getIcmpv6Type().intValue());\r
519         Assert.assertEquals("Wrong icmpv6 code", 20, builtMatch.getIcmpv6Match().getIcmpv6Code().intValue());\r
520 \r
521         final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
522         Assert.assertEquals("Wrong ipv4 src address", "10.0.0.1/32", ipv4Match.getIpv4Source().getValue());\r
523         Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.2/32", ipv4Match.getIpv4Destination().getValue());\r
524         Assert.assertEquals("Wrong mpls label", 21, builtMatch.getProtocolMatchFields().getMplsLabel().intValue());\r
525         Assert.assertEquals("Wrong mpls bos", 1, builtMatch.getProtocolMatchFields().getMplsBos().intValue());\r
526         Assert.assertEquals("Wrong mpls tc", 22, builtMatch.getProtocolMatchFields().getMplsTc().intValue());\r
527         Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
528         Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
529                 builtMatch.getTunnel().getTunnelId());\r
530     }\r
531 \r
532     /**\r
533      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
534      */\r
535     @Test\r
536     public void testWithMatchEntryWithMasks() {\r
537         final MatchBuilder builder = new MatchBuilder();\r
538         builder.setType(OxmMatchType.class);\r
539         final List<MatchEntry> entries = new ArrayList<>();\r
540         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
541         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
542         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
543         entriesBuilder.setHasMask(true);\r
544 \r
545 \r
546         final MetadataCaseBuilder metadataCaseBuilder = new MetadataCaseBuilder();\r
547         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
548         metadataBuilder.setMetadata(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});\r
549         metadataBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 1});\r
550         metadataCaseBuilder.setMetadata(metadataBuilder.build());\r
551         entriesBuilder.setMatchEntryValue(metadataCaseBuilder.build());\r
552         entries.add(entriesBuilder.build());\r
553 \r
554         entriesBuilder = new MatchEntryBuilder();\r
555         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
556         entriesBuilder.setOxmMatchField(EthDst.class);\r
557         entriesBuilder.setHasMask(true);\r
558         final EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();\r
559         final EthDstBuilder ethDstBuilder = new EthDstBuilder();\r
560         ethDstBuilder.setMacAddress(new MacAddress("00:00:00:00:00:01"));\r
561         ethDstBuilder.setMask(new byte[]{0, 0, 0, 0, 1, 1});\r
562         ethDstCaseBuilder.setEthDst(ethDstBuilder.build());\r
563         entriesBuilder.setMatchEntryValue(ethDstCaseBuilder.build());\r
564         entries.add(entriesBuilder.build());\r
565 \r
566         entriesBuilder = new MatchEntryBuilder();\r
567         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
568         entriesBuilder.setOxmMatchField(EthSrc.class);\r
569         entriesBuilder.setHasMask(true);\r
570         final EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();\r
571         final EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();\r
572         ethSrcBuilder.setMacAddress(new MacAddress("00:00:00:00:00:02"));\r
573         ethSrcBuilder.setMask(new byte[]{0, 0, 0, 0, 2, 2});\r
574         ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());\r
575         entriesBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());\r
576         entries.add(entriesBuilder.build());\r
577 \r
578         entriesBuilder = new MatchEntryBuilder();\r
579         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
580         entriesBuilder.setOxmMatchField(VlanVid.class);\r
581         entriesBuilder.setHasMask(true);\r
582         final VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();\r
583         final VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();\r
584         vlanVidBuilder.setVlanVid(4);\r
585         vlanVidBuilder.setCfiBit(true);\r
586         vlanVidBuilder.setMask(new byte[]{0, 4});\r
587         vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());\r
588         entriesBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());\r
589         entries.add(entriesBuilder.build());\r
590 \r
591         entriesBuilder = new MatchEntryBuilder();\r
592         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
593         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
594         entriesBuilder.setHasMask(true);\r
595         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
596         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
597         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
598         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
599         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
600         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
601         entries.add(entriesBuilder.build());\r
602 \r
603         entriesBuilder = new MatchEntryBuilder();\r
604         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
605         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
606         entriesBuilder.setHasMask(true);\r
607         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
608         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
609         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
610         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 240, 0});\r
611         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
612         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
613         entries.add(entriesBuilder.build());\r
614 \r
615         entriesBuilder = new MatchEntryBuilder();\r
616         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
617         entriesBuilder.setOxmMatchField(PbbIsid.class);\r
618         entriesBuilder.setHasMask(true);\r
619         final PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();\r
620 \r
621         final PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();\r
622         pbbIsidBuilder.setIsid(23L);\r
623         pbbIsidBuilder.setMask(new byte[]{0, 0, 7});\r
624         pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());\r
625         entriesBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());\r
626         entries.add(entriesBuilder.build());\r
627 \r
628         entriesBuilder = new MatchEntryBuilder();\r
629         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
630         entriesBuilder.setOxmMatchField(TunnelId.class);\r
631         entriesBuilder.setHasMask(true);\r
632         final TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();\r
633         final TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();\r
634         tunnelIdBuilder.setTunnelId(new byte[]{1, 2, 3, 4, 5, 6, 7, 8});\r
635         tunnelIdBuilder.setMask(new byte[]{0, 0, 0, 0, 0, 0, 0, 8});\r
636         tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());\r
637         entriesBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());\r
638         entries.add(entriesBuilder.build());\r
639         builder.setMatchEntry(entries);\r
640         final Match match = builder.build();\r
641 \r
642         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
643                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
644         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
645 \r
646         Assert.assertEquals("Wrong metadata", new BigInteger(1, new byte[]{0, 1, 2, 3, 4, 5, 6, 7}), builtMatch.getMetadata().getMetadata());\r
647         Assert.assertEquals("Wrong metadata mask", new BigInteger(1, new byte[]{0, 0, 0, 0, 0, 0, 0, 1}),\r
648                 builtMatch.getMetadata().getMetadataMask());\r
649         Assert.assertEquals("Wrong eth dst", new MacAddress("00:00:00:00:00:01"), builtMatch.getEthernetMatch().getEthernetDestination().getAddress());\r
650         Assert.assertEquals("Wrong eth dst mask", new MacAddress("00:00:00:00:01:01"), builtMatch.getEthernetMatch().getEthernetDestination().getMask());\r
651         Assert.assertEquals("Wrong eth src", new MacAddress("00:00:00:00:00:02"), builtMatch.getEthernetMatch().getEthernetSource().getAddress());\r
652         Assert.assertEquals("Wrong eth src mask", new MacAddress("00:00:00:00:02:02"), builtMatch.getEthernetMatch().getEthernetSource().getMask());\r
653         Assert.assertEquals("Wrong vlan id", 4, builtMatch.getVlanMatch().getVlanId().getVlanId().getValue().intValue());\r
654         Assert.assertEquals("Wrong vlan id entries", true, builtMatch.getVlanMatch().getVlanId().isVlanIdPresent());\r
655         final Ipv4Match ipv4Match = (Ipv4Match) builtMatch.getLayer3Match();\r
656         Assert.assertEquals("Wrong ipv4 src address", "10.0.0.0/24", ipv4Match.getIpv4Source().getValue());\r
657         Assert.assertEquals("Wrong ipv4 dst address", "10.0.0.0/20", ipv4Match.getIpv4Destination().getValue());\r
658         Assert.assertEquals("Wrong pbb isid", 23, builtMatch.getProtocolMatchFields().getPbb().getPbbIsid().intValue());\r
659         Assert.assertEquals("Wrong tunnel id", new BigInteger(1, new byte[]{1, 2, 3, 4, 5, 6, 7, 8}),\r
660                 builtMatch.getTunnel().getTunnelId());\r
661     }\r
662 \r
663     /**\r
664      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
665      */\r
666     @Test\r
667     public void testWithMatchEntryWithArbitraryMasks() {\r
668         final MatchBuilder builder = new MatchBuilder();\r
669         builder.setType(OxmMatchType.class);\r
670         final List<MatchEntry> entries = new ArrayList<>();\r
671         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
672         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
673         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata.class);\r
674         entriesBuilder.setHasMask(true);\r
675 \r
676         entriesBuilder = new MatchEntryBuilder();\r
677         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
678         entriesBuilder.setOxmMatchField(Ipv4Src.class);\r
679         entriesBuilder.setHasMask(true);\r
680         final Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();\r
681         final Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();\r
682         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.1.1.1"));\r
683         ipv4SrcBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 255, 0});\r
684         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());\r
685         entriesBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());\r
686         entries.add(entriesBuilder.build());\r
687 \r
688         entriesBuilder = new MatchEntryBuilder();\r
689         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
690         entriesBuilder.setOxmMatchField(Ipv4Dst.class);\r
691         entriesBuilder.setHasMask(true);\r
692         final Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();\r
693         final Ipv4DstBuilder ipv4AddressBuilder = new Ipv4DstBuilder();\r
694         ipv4AddressBuilder.setIpv4Address(new Ipv4Address("10.0.1.1"));\r
695         ipv4AddressBuilder.setMask(new byte[]{(byte) 255, 0, (byte) 240, 0});\r
696         ipv4DstCaseBuilder.setIpv4Dst(ipv4AddressBuilder.build());\r
697         entriesBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());\r
698         entries.add(entriesBuilder.build());\r
699 \r
700         builder.setMatchEntry(entries);\r
701         final Match match = builder.build();\r
702 \r
703         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
704                 .MatchBuilder salMatch = MatchConvertorImpl.fromOFMatchToSALMatch(match, new BigInteger("42"), OpenflowVersion.OF10);\r
705         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatch.build();\r
706 \r
707         final Ipv4MatchArbitraryBitMask ipv4MatchArbitraryBitMask = (Ipv4MatchArbitraryBitMask) builtMatch.getLayer3Match();\r
708         Assert.assertEquals("Wrong ipv4 src address", "10.1.1.1", ipv4MatchArbitraryBitMask.getIpv4SourceAddressNoMask().getValue());\r
709         Assert.assertEquals("Wrong ipv4 dst address", "10.0.1.1", ipv4MatchArbitraryBitMask.getIpv4DestinationAddressNoMask().getValue());\r
710     }\r
711 \r
712     /**\r
713      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
714      */\r
715     @Test\r
716     public void testLayer4MatchUdp() {\r
717         final MatchBuilder builder = new MatchBuilder();\r
718         builder.setType(OxmMatchType.class);\r
719         final List<MatchEntry> entries = new ArrayList<>();\r
720         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
721         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
722         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc.class);\r
723         entriesBuilder.setHasMask(false);\r
724         final UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();\r
725         final UdpSrcBuilder portBuilder = new UdpSrcBuilder();\r
726         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
727                 .inet.types.rev100924.PortNumber(11));\r
728         udpSrcCaseBuilder.setUdpSrc(portBuilder.build());\r
729         entriesBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());\r
730         entries.add(entriesBuilder.build());\r
731 \r
732 \r
733         entriesBuilder = new MatchEntryBuilder();\r
734         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
735         entriesBuilder.setOxmMatchField(UdpDst.class);\r
736         entriesBuilder.setHasMask(false);\r
737         final UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();\r
738         final UdpDstBuilder udpDstBuilder = new UdpDstBuilder();\r
739         udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
740                 .inet.types.rev100924.PortNumber(12));\r
741         udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());\r
742         entriesBuilder.setMatchEntryValue(udpDstCaseBuilder.build());\r
743         entries.add(entriesBuilder.build());\r
744 \r
745         builder.setMatchEntry(entries);\r
746 \r
747         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
748                 .MatchBuilder builtMatch = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
749 \r
750         final UdpMatch udpMatch = (UdpMatch) builtMatch.getLayer4Match();\r
751         Assert.assertEquals("Wrong udp src port", 11, udpMatch.getUdpSourcePort().getValue().intValue());\r
752         Assert.assertEquals("Wrong udp dst port", 12, udpMatch.getUdpDestinationPort().getValue().intValue());\r
753     }\r
754 \r
755     /**\r
756      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
757      */\r
758     @Test\r
759     public void testLayer4MatchSctp() {\r
760         final MatchBuilder builder = new MatchBuilder();\r
761         builder.setType(OxmMatchType.class);\r
762         final List<MatchEntry> entries = new ArrayList<>();\r
763         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
764         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
765         entriesBuilder.setOxmMatchField(SctpSrc.class);\r
766         entriesBuilder.setHasMask(false);\r
767         final SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();\r
768         final SctpSrcBuilder portBuilder = new SctpSrcBuilder();\r
769         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
770                 .inet.types.rev100924.PortNumber(13));\r
771         sctpSrcCaseBuilder.setSctpSrc(portBuilder.build());\r
772         entriesBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());\r
773         entries.add(entriesBuilder.build());\r
774 \r
775 \r
776         entriesBuilder = new MatchEntryBuilder();\r
777         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
778         entriesBuilder.setOxmMatchField(SctpDst.class);\r
779         entriesBuilder.setHasMask(false);\r
780         final SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();\r
781         final SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();\r
782         sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf\r
783                 .inet.types.rev100924.PortNumber(14));\r
784         sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());\r
785         entriesBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());\r
786         entries.add(entriesBuilder.build());\r
787         builder.setMatchEntry(entries);\r
788 \r
789         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
790                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
791         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
792 \r
793         final SctpMatch udpMatch = (SctpMatch) builtMatch.getLayer4Match();\r
794         Assert.assertEquals("Wrong sctp src port", 13, udpMatch.getSctpSourcePort().getValue().intValue());\r
795         Assert.assertEquals("Wrong sctp dst port", 14, udpMatch.getSctpDestinationPort().getValue().intValue());\r
796     }\r
797 \r
798     /**\r
799      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
800      */\r
801     @Test\r
802     public void testLayer3MatchIpv6() {\r
803         final MatchBuilder builder = new MatchBuilder();\r
804         builder.setType(OxmMatchType.class);\r
805         final List<MatchEntry> entries = new ArrayList<>();\r
806         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
807         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
808         entriesBuilder.setOxmMatchField(Ipv6Src.class);\r
809         entriesBuilder.setHasMask(false);\r
810         final Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();\r
811         final Ipv6SrcBuilder ipv6AddressBuilder = new Ipv6SrcBuilder();\r
812         ipv6AddressBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9657"));\r
813         ipv6SrcCaseBuilder.setIpv6Src(ipv6AddressBuilder.build());\r
814         entriesBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());\r
815         entries.add(entriesBuilder.build());\r
816 \r
817         entriesBuilder = new MatchEntryBuilder();\r
818         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
819         entriesBuilder.setOxmMatchField(Ipv6Dst.class);\r
820         entriesBuilder.setHasMask(false);\r
821         final Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();\r
822         final Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();\r
823         ipv6DstBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9658"));\r
824         ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());\r
825         entriesBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());\r
826         entries.add(entriesBuilder.build());\r
827 \r
828         entriesBuilder = new MatchEntryBuilder();\r
829         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
830         entriesBuilder.setOxmMatchField(Ipv6Flabel.class);\r
831         entriesBuilder.setHasMask(false);\r
832         final Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();\r
833         final Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();\r
834         ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(18L));\r
835         ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());\r
836         entriesBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());\r
837         entries.add(entriesBuilder.build());\r
838 \r
839         entriesBuilder = new MatchEntryBuilder();\r
840         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
841         entriesBuilder.setOxmMatchField(Ipv6NdTarget.class);\r
842         entriesBuilder.setHasMask(false);\r
843         final Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();\r
844         final Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();\r
845         ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("2001:cdba:0000:0000:0000:0000:3257:9659"));\r
846         ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());\r
847         entriesBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());\r
848         entries.add(entriesBuilder.build());\r
849 \r
850         entriesBuilder = new MatchEntryBuilder();\r
851         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
852         entriesBuilder.setOxmMatchField(Ipv6NdSll.class);\r
853         entriesBuilder.setHasMask(false);\r
854         final Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();\r
855         final Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();\r
856         ipv6NdSllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:05"));\r
857         ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());\r
858         entriesBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());\r
859         entries.add(entriesBuilder.build());\r
860 \r
861         entriesBuilder = new MatchEntryBuilder();\r
862         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
863         entriesBuilder.setOxmMatchField(Ipv6NdTll.class);\r
864         entriesBuilder.setHasMask(false);\r
865         final Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();\r
866         final Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();\r
867         ipv6NdTllBuilder.setMacAddress(new MacAddress("00:00:00:00:00:06"));\r
868         ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());\r
869         entriesBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());\r
870         entries.add(entriesBuilder.build());\r
871 \r
872         entriesBuilder = new MatchEntryBuilder();\r
873         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
874         entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
875         entriesBuilder.setHasMask(false);\r
876         final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();\r
877         final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();\r
878         ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));\r
879         ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());\r
880         entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());\r
881         builder.setMatchEntry(entries);\r
882         entries.add(entriesBuilder.build());\r
883 \r
884         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
885                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
886         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
887 \r
888         final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
889         Assert.assertEquals("Wrong ipv6 src address", "2001:cdba:0000:0000:0000:0000:3257:9657/128",\r
890                 ipv6Match.getIpv6Source().getValue());\r
891         Assert.assertEquals("Wrong ipv6 dst address", "2001:cdba:0000:0000:0000:0000:3257:9658/128",\r
892                 ipv6Match.getIpv6Destination().getValue());\r
893         Assert.assertEquals("Wrong ipv6 nd target", "2001:cdba:0000:0000:0000:0000:3257:9659",\r
894                 ipv6Match.getIpv6NdTarget().getValue());\r
895         Assert.assertEquals("Wrong ipv6 flabel", 18, ipv6Match.getIpv6Label().getIpv6Flabel().getValue().intValue());\r
896         Assert.assertEquals("Wrong ipv6 nd sll", new MacAddress("00:00:00:00:00:05"), ipv6Match.getIpv6NdSll());\r
897         Assert.assertEquals("Wrong ipv6 nd tll", new MacAddress("00:00:00:00:00:06"), ipv6Match.getIpv6NdTll());\r
898         Assert.assertEquals("Wrong ipv6 ext header", 358, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
899     }\r
900 \r
901     /**\r
902      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
903      */\r
904     @Test\r
905     public void testLayer3MatchIpv6ExtHeader2() {\r
906         final MatchBuilder builder = new MatchBuilder();\r
907         builder.setType(OxmMatchType.class);\r
908         final List<MatchEntry> entries = new ArrayList<>();\r
909         final MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
910         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
911         entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
912         entriesBuilder.setHasMask(true);\r
913         final Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();\r
914         final Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();\r
915         ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(false, true, false, true, false, true, false, true, false));\r
916         ipv6ExthdrBuilder.setMask(new byte[]{1, 2});\r
917         ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());\r
918         entriesBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());\r
919         entries.add(entriesBuilder.build());\r
920         builder.setMatchEntry(entries);\r
921 \r
922         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
923                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
924         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
925 \r
926         final Ipv6Match ipv6Match = (Ipv6Match) builtMatch.getLayer3Match();\r
927         Assert.assertEquals("Wrong ipv6 ext header", 153, ipv6Match.getIpv6ExtHeader().getIpv6Exthdr().intValue());\r
928         Assert.assertEquals("Wrong ipv6 ext header mask", 258, ipv6Match.getIpv6ExtHeader().getIpv6ExthdrMask().intValue());\r
929     }\r
930 \r
931     /**\r
932      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
933      */\r
934     @Test\r
935     public void testLayer3MatchArp() {\r
936         final MatchBuilder builder = new MatchBuilder();\r
937         builder.setType(OxmMatchType.class);\r
938         final List<MatchEntry> entries = new ArrayList<>();\r
939         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
940         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
941         entriesBuilder.setOxmMatchField(ArpOp.class);\r
942         entriesBuilder.setHasMask(false);\r
943         final ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();\r
944         final ArpOpBuilder arpOpBuilder = new ArpOpBuilder();\r
945         arpOpBuilder.setOpCode(17);\r
946         arpOpCaseBuilder.setArpOp(arpOpBuilder.build());\r
947         entriesBuilder.setMatchEntryValue(arpOpCaseBuilder.build());\r
948         entries.add(entriesBuilder.build());\r
949 \r
950         entriesBuilder = new MatchEntryBuilder();\r
951         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
952         entriesBuilder.setOxmMatchField(ArpSpa.class);\r
953         entriesBuilder.setHasMask(false);\r
954         final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();\r
955         final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();\r
956         arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
957         arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());\r
958         entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());\r
959         entries.add(entriesBuilder.build());\r
960 \r
961         entriesBuilder = new MatchEntryBuilder();\r
962         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
963         entriesBuilder.setOxmMatchField(ArpTpa.class);\r
964         entriesBuilder.setHasMask(false);\r
965         final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();\r
966         final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();\r
967         arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
968         arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());\r
969         entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());\r
970         entries.add(entriesBuilder.build());\r
971 \r
972         entriesBuilder = new MatchEntryBuilder();\r
973         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
974         entriesBuilder.setOxmMatchField(ArpSha.class);\r
975         entriesBuilder.setHasMask(false);\r
976         final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();\r
977         final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();\r
978         arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
979         arpShaCaseBuilder.setArpSha(arpShaBuilder.build());\r
980         entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());\r
981         entries.add(entriesBuilder.build());\r
982 \r
983         entriesBuilder = new MatchEntryBuilder();\r
984         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
985         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);\r
986         entriesBuilder.setHasMask(false);\r
987         final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();\r
988         final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();\r
989         arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
990         arpThaCaseBuilder.setArpTha(arpThaBuilder.build());\r
991         entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());\r
992         entries.add(entriesBuilder.build());\r
993         builder.setMatchEntry(entries);\r
994 \r
995         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
996                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
997         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
998 \r
999         final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
1000         Assert.assertEquals("Wrong arp op", 17, arpMatch.getArpOp().intValue());\r
1001         Assert.assertEquals("Wrong arp spa", "10.0.0.3/32", arpMatch.getArpSourceTransportAddress().getValue());\r
1002         Assert.assertEquals("Wrong arp tpa", "10.0.0.4/32", arpMatch.getArpTargetTransportAddress().getValue());\r
1003         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
1004         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
1005     }\r
1006 \r
1007     /**\r
1008      * Test {@link MatchConvertorImpl#fromOFMatchToSALMatch(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match, java.math.BigInteger, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion)}\r
1009      */\r
1010     @Test\r
1011     public void testLayer3MatchArpWithMasks() {\r
1012         final MatchBuilder builder = new MatchBuilder();\r
1013         builder.setType(OxmMatchType.class);\r
1014         final List<MatchEntry> entries = new ArrayList<>();\r
1015         MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();\r
1016         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1017         entriesBuilder.setOxmMatchField(ArpSpa.class);\r
1018         entriesBuilder.setHasMask(true);\r
1019         final ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();\r
1020         final ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();\r
1021         arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.3"));\r
1022         arpSpaBuilder.setMask(new byte[]{(byte) 255, (byte) 255, (byte) 255, 0});\r
1023         arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());\r
1024         entriesBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());\r
1025         entries.add(entriesBuilder.build());\r
1026 \r
1027         entriesBuilder = new MatchEntryBuilder();\r
1028         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1029         entriesBuilder.setOxmMatchField(ArpTpa.class);\r
1030         entriesBuilder.setHasMask(true);\r
1031         final ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();\r
1032         final ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();\r
1033         arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.0"));\r
1034         arpTpaBuilder.setMask(new byte[]{(byte) 255, (byte) 128, 0, 0});\r
1035         arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());\r
1036         entriesBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());\r
1037         entries.add(entriesBuilder.build());\r
1038 \r
1039         entriesBuilder = new MatchEntryBuilder();\r
1040         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1041         entriesBuilder.setOxmMatchField(ArpSha.class);\r
1042         entriesBuilder.setHasMask(true);\r
1043         final ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();\r
1044         final ArpShaBuilder arpShaBuilder = new ArpShaBuilder();\r
1045         arpShaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
1046         arpShaBuilder.setMask(new byte[]{0, 0, 1, 0, 4, 0});\r
1047         arpShaCaseBuilder.setArpSha(arpShaBuilder.build());\r
1048         entriesBuilder.setMatchEntryValue(arpShaCaseBuilder.build());\r
1049         entries.add(entriesBuilder.build());\r
1050 \r
1051         entriesBuilder = new MatchEntryBuilder();\r
1052         entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
1053         entriesBuilder.setOxmMatchField(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha.class);\r
1054         entriesBuilder.setHasMask(true);\r
1055         final ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();\r
1056         final ArpThaBuilder arpThaBuilder = new ArpThaBuilder();\r
1057         arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:04"));\r
1058         arpThaBuilder.setMask(new byte[]{1, 1, 1, 2, 2, 2});\r
1059         arpThaCaseBuilder.setArpTha(arpThaBuilder.build());\r
1060         entriesBuilder.setMatchEntryValue(arpThaCaseBuilder.build());\r
1061         entries.add(entriesBuilder.build());\r
1062 \r
1063         builder.setMatchEntry(entries);\r
1064 \r
1065         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow\r
1066                 .MatchBuilder salMatchBuilder = MatchConvertorImpl.fromOFMatchToSALMatch(builder.build(), new BigInteger("42"), OpenflowVersion.OF13);\r
1067         final org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match builtMatch = salMatchBuilder.build();\r
1068 \r
1069         final ArpMatch arpMatch = (ArpMatch) builtMatch.getLayer3Match();\r
1070         Assert.assertEquals("Wrong arp spa", "10.0.0.3/24", arpMatch.getArpSourceTransportAddress().getValue());\r
1071         Assert.assertEquals("Wrong arp tpa", "10.0.0.0/9", arpMatch.getArpTargetTransportAddress().getValue());\r
1072         Assert.assertEquals("Wrong arp sha", "00:00:00:00:00:03", arpMatch.getArpSourceHardwareAddress().getAddress().getValue());\r
1073         Assert.assertEquals("Wrong arp sha mask", "00:00:01:00:04:00", arpMatch.getArpSourceHardwareAddress().getMask().getValue());\r
1074         Assert.assertEquals("Wrong arp tha", "00:00:00:00:00:04", arpMatch.getArpTargetHardwareAddress().getAddress().getValue());\r
1075         Assert.assertEquals("Wrong arp tha mask", "01:01:01:02:02:02", arpMatch.getArpTargetHardwareAddress().getMask().getValue());\r
1076     }\r
1077 }\r