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