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