Bug 2756 - Match model update
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / OF13MatchSerializer02Test.java
1 /*
2  * Copyright (c) 2013 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.openflowjava.protocol.impl.util;
9
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.UnpooledByteBufAllocator;
12
13 import java.util.ArrayList;
14 import java.util.List;
15
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
21 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpOp;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSha;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpSpa;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTha;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ArpTpa;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthType;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Code;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv4Type;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Code;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Icmpv6Type;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Flabel;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdSll;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTarget;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6NdTll;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Metadata;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsBos;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsLabel;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MplsTc;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.PbbIsid;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpDst;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.SctpSrc;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TunnelId;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpOpCaseBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpShaCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpSpaCaseBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpThaCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ArpTpaCaseBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCaseBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthTypeCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4CodeCaseBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv4TypeCaseBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6CodeCaseBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Icmpv6TypeCaseBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPhyPortCaseBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCaseBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpEcnCaseBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpProtoCaseBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCaseBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCaseBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCaseBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6ExthdrCaseBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6FlabelCaseBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdSllCaseBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTargetCaseBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6NdTllCaseBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCaseBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MetadataCaseBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsBosCaseBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsLabelCaseBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.MplsTcCaseBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.PbbIsidCaseBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpDstCaseBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.SctpSrcCaseBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TunnelIdCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpDstCaseBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.UdpSrcCaseBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCaseBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCaseBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.op._case.ArpOpBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.sha._case.ArpShaBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.spa._case.ArpSpaBuilder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tha._case.ArpThaBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.arp.tpa._case.ArpTpaBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.dst._case.EthDstBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.src._case.EthSrcBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.eth.type._case.EthTypeBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.code._case.Icmpv4CodeBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv4.type._case.Icmpv4TypeBuilder;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.code._case.Icmpv6CodeBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.icmpv6.type._case.Icmpv6TypeBuilder;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.phy.port._case.InPhyPortBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.dscp._case.IpDscpBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.ecn._case.IpEcnBuilder;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ip.proto._case.IpProtoBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.dst._case.Ipv4DstBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv4.src._case.Ipv4SrcBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.dst._case.Ipv6DstBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.exthdr._case.Ipv6ExthdrBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.flabel._case.Ipv6FlabelBuilder;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.sll._case.Ipv6NdSllBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.target._case.Ipv6NdTargetBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.nd.tll._case.Ipv6NdTllBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.ipv6.src._case.Ipv6SrcBuilder;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.metadata._case.MetadataBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.bos._case.MplsBosBuilder;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.label._case.MplsLabelBuilder;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.mpls.tc._case.MplsTcBuilder;
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.pbb.isid._case.PbbIsidBuilder;
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.dst._case.SctpDstBuilder;
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.sctp.src._case.SctpSrcBuilder;
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.dst._case.TcpDstBuilder;
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tcp.src._case.TcpSrcBuilder;
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.tunnel.id._case.TunnelIdBuilder;
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.dst._case.UdpDstBuilder;
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.udp.src._case.UdpSrcBuilder;
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.pcp._case.VlanPcpBuilder;
155 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.vlan.vid._case.VlanVidBuilder;
156 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
157 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;
158
159 /**
160  * @author michal.polkorab
161  *
162  */
163 public class OF13MatchSerializer02Test {
164
165     private SerializerRegistry registry;
166     private OFSerializer<Match> matchSerializer;
167
168     /**
169      * Initializes serializer table and stores correct factory in field
170      */
171     @Before
172     public void startUp() {
173         registry = new SerializerRegistryImpl();
174         registry.init();
175         matchSerializer = registry.getSerializer(
176                 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));
177     }
178
179     /**
180      * Testing serialization of match
181      */
182     @Test
183     public void testEmptyMatch() {
184         MatchBuilder builder = new MatchBuilder();
185         builder.setType(OxmMatchType.class);
186         Match match = builder.build();
187
188         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
189         matchSerializer.serialize(match, out);
190
191         Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
192         Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());
193         Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
194     }
195
196     /**
197      * Testing serialization of match
198      */
199     @Test
200     public void test() {
201         MatchBuilder builder = new MatchBuilder();
202         builder.setType(OxmMatchType.class);
203         List<MatchEntry> entries = new ArrayList<>();
204         MatchEntryBuilder entryBuilder = new MatchEntryBuilder();
205         entryBuilder.setOxmClass(OpenflowBasicClass.class);
206         entryBuilder.setOxmMatchField(InPort.class);
207         entryBuilder.setHasMask(false);
208         InPortCaseBuilder inPortCaseBuilder = new InPortCaseBuilder();
209         InPortBuilder inPortBuilder = new InPortBuilder();
210         inPortBuilder.setPortNumber(new PortNumber(42L));
211         inPortCaseBuilder.setInPort(inPortBuilder.build());
212         entryBuilder.setMatchEntryValue(inPortCaseBuilder.build());
213         entries.add(entryBuilder.build());
214         entryBuilder = new MatchEntryBuilder();
215         entryBuilder.setOxmClass(OpenflowBasicClass.class);
216         entryBuilder.setOxmMatchField(InPhyPort.class);
217         entryBuilder.setHasMask(false);
218         InPhyPortCaseBuilder inPhyPortCaseBuilder = new InPhyPortCaseBuilder();
219         InPhyPortBuilder inPhyPortBuilder = new InPhyPortBuilder();
220         inPhyPortBuilder.setPortNumber(new PortNumber(43L));
221         inPhyPortCaseBuilder.setInPhyPort(inPhyPortBuilder.build());
222         entryBuilder.setMatchEntryValue(inPhyPortCaseBuilder.build());
223         entries.add(entryBuilder.build());
224         entryBuilder = new MatchEntryBuilder();
225         entryBuilder.setOxmClass(OpenflowBasicClass.class);
226         entryBuilder.setOxmMatchField(Metadata.class);
227         entryBuilder.setHasMask(true);
228         MetadataCaseBuilder metaCaseBuilder = new MetadataCaseBuilder();
229         MetadataBuilder metadataBuilder = new MetadataBuilder();
230         metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
231         metadataBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
232         metaCaseBuilder.setMetadata(metadataBuilder.build());
233         entryBuilder.setMatchEntryValue(metaCaseBuilder.build());
234         entries.add(entryBuilder.build());
235         entryBuilder = new MatchEntryBuilder();
236         entryBuilder.setOxmClass(OpenflowBasicClass.class);
237         entryBuilder.setOxmMatchField(EthDst.class);
238         entryBuilder.setHasMask(true);
239         EthDstCaseBuilder ethDstCaseBuilder = new EthDstCaseBuilder();
240         EthDstBuilder ethDstBuilder = new EthDstBuilder();
241         ethDstBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
242         ethDstBuilder.setMask(new byte[]{0,0,0,0,0,5});
243         ethDstCaseBuilder.setEthDst(ethDstBuilder.build());
244         entryBuilder.setMatchEntryValue(ethDstCaseBuilder.build());
245         entries.add(entryBuilder.build());
246         entryBuilder = new MatchEntryBuilder();
247         entryBuilder.setOxmClass(OpenflowBasicClass.class);
248         entryBuilder.setOxmMatchField(EthSrc.class);
249         entryBuilder.setHasMask(true);
250         EthSrcCaseBuilder ethSrcCaseBuilder = new EthSrcCaseBuilder();
251         EthSrcBuilder ethSrcBuilder = new EthSrcBuilder();
252         ethSrcBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
253         ethSrcBuilder.setMask(new byte[]{0,0,0,0,0,2});
254         ethSrcCaseBuilder.setEthSrc(ethSrcBuilder.build());
255         entryBuilder.setMatchEntryValue(ethSrcCaseBuilder.build());
256         entries.add(entryBuilder.build());
257         entryBuilder = new MatchEntryBuilder();
258         entryBuilder.setOxmClass(OpenflowBasicClass.class);
259         entryBuilder.setOxmMatchField(EthType.class);
260         entryBuilder.setHasMask(false);
261         EthTypeCaseBuilder ethTypeCaseBuilder = new EthTypeCaseBuilder();
262         EthTypeBuilder ethTypeBuilder = new EthTypeBuilder();
263         ethTypeBuilder.setEthType(new EtherType(46));
264         ethTypeCaseBuilder.setEthType(ethTypeBuilder.build());
265         entryBuilder.setMatchEntryValue(ethTypeCaseBuilder.build());
266         entries.add(entryBuilder.build());
267         entryBuilder = new MatchEntryBuilder();
268         entryBuilder.setOxmClass(OpenflowBasicClass.class);
269         entryBuilder.setOxmMatchField(VlanVid.class);
270         entryBuilder.setHasMask(true);
271         VlanVidCaseBuilder vlanVidCaseBuilder = new VlanVidCaseBuilder();
272         VlanVidBuilder vlanVidBuilder = new VlanVidBuilder();
273         vlanVidBuilder.setVlanVid(45);
274         vlanVidBuilder.setCfiBit(true);
275         vlanVidBuilder.setMask(new byte[]{0,9});
276         vlanVidCaseBuilder.setVlanVid(vlanVidBuilder.build());
277         entryBuilder.setMatchEntryValue(vlanVidCaseBuilder.build());
278         entries.add(entryBuilder.build());
279         entryBuilder = new MatchEntryBuilder();
280         entryBuilder.setOxmClass(OpenflowBasicClass.class);
281         entryBuilder.setOxmMatchField(VlanPcp.class);
282         entryBuilder.setHasMask(false);
283         VlanPcpCaseBuilder vlanPcpCaseBuilder = new VlanPcpCaseBuilder();
284         VlanPcpBuilder vlanPcpBuilder = new VlanPcpBuilder();
285         vlanPcpBuilder.setVlanPcp((short) 14);
286         vlanPcpCaseBuilder.setVlanPcp(vlanPcpBuilder.build());
287         entryBuilder.setMatchEntryValue(vlanPcpCaseBuilder.build());
288         entries.add(entryBuilder.build());
289         entryBuilder = new MatchEntryBuilder();
290         entryBuilder.setOxmClass(OpenflowBasicClass.class);
291         entryBuilder.setOxmMatchField(IpDscp.class);
292         entryBuilder.setHasMask(false);
293         IpDscpCaseBuilder ipDscpCaseBuilder = new IpDscpCaseBuilder();
294         IpDscpBuilder ipDscpBuilder = new IpDscpBuilder();
295         ipDscpBuilder.setDscp(new Dscp((short) 48));
296         ipDscpCaseBuilder.setIpDscp(ipDscpBuilder.build());
297         entryBuilder.setMatchEntryValue(ipDscpCaseBuilder.build());
298         entries.add(entryBuilder.build());
299         entryBuilder = new MatchEntryBuilder();
300         entryBuilder.setOxmClass(OpenflowBasicClass.class);
301         entryBuilder.setOxmMatchField(IpEcn.class);
302         entryBuilder.setHasMask(false);
303         IpEcnCaseBuilder ipEcnCaseBuilder = new IpEcnCaseBuilder();
304         IpEcnBuilder ipEcnBuilder = new IpEcnBuilder();
305         ipEcnBuilder.setEcn((short) 49);
306         ipEcnCaseBuilder.setIpEcn(ipEcnBuilder.build());
307         entryBuilder.setMatchEntryValue(ipEcnCaseBuilder.build());
308         entries.add(entryBuilder.build());
309         entryBuilder = new MatchEntryBuilder();
310         entryBuilder.setOxmClass(OpenflowBasicClass.class);
311         entryBuilder.setOxmMatchField(IpProto.class);
312         entryBuilder.setHasMask(false);
313         IpProtoCaseBuilder ipProtoCaseBuilder = new IpProtoCaseBuilder();
314         IpProtoBuilder ipProtoBuilder = new IpProtoBuilder();
315         ipProtoBuilder.setProtocolNumber((short) 50);
316         ipProtoCaseBuilder.setIpProto(ipProtoBuilder.build());
317         entryBuilder.setMatchEntryValue(ipProtoCaseBuilder.build());
318         entries.add(entryBuilder.build());
319         entryBuilder = new MatchEntryBuilder();
320         entryBuilder.setOxmClass(OpenflowBasicClass.class);
321         entryBuilder.setOxmMatchField(Ipv4Src.class);
322         entryBuilder.setHasMask(true);
323         Ipv4SrcCaseBuilder ipv4SrcCaseBuilder = new Ipv4SrcCaseBuilder();
324         Ipv4SrcBuilder ipv4SrcBuilder = new Ipv4SrcBuilder();
325         ipv4SrcBuilder.setIpv4Address(new Ipv4Address("10.0.0.1"));
326         ipv4SrcBuilder.setMask(new byte[]{0,0,0,14});
327         ipv4SrcCaseBuilder.setIpv4Src(ipv4SrcBuilder.build());
328         entryBuilder.setMatchEntryValue(ipv4SrcCaseBuilder.build());
329         entries.add(entryBuilder.build());
330         entryBuilder = new MatchEntryBuilder();
331         entryBuilder.setOxmClass(OpenflowBasicClass.class);
332         entryBuilder.setOxmMatchField(Ipv4Dst.class);
333         entryBuilder.setHasMask(true);
334         Ipv4DstCaseBuilder ipv4DstCaseBuilder = new Ipv4DstCaseBuilder();
335         Ipv4DstBuilder ipv4DstBuilder = new Ipv4DstBuilder();
336         ipv4DstBuilder.setIpv4Address(new Ipv4Address("10.0.0.2"));
337         ipv4DstBuilder.setMask(new byte[]{0,0,0,15});
338         ipv4DstCaseBuilder.setIpv4Dst(ipv4DstBuilder.build());
339         entryBuilder.setMatchEntryValue(ipv4DstCaseBuilder.build());
340         entries.add(entryBuilder.build());
341         entryBuilder = new MatchEntryBuilder();
342         entryBuilder.setOxmClass(OpenflowBasicClass.class);
343         entryBuilder.setOxmMatchField(TcpSrc.class);
344         entryBuilder.setHasMask(false);
345         TcpSrcCaseBuilder tcpSrcCaseBuilder = new TcpSrcCaseBuilder();
346         TcpSrcBuilder tcpSrcBuilder = new TcpSrcBuilder();
347         tcpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
348                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6653));
349         tcpSrcCaseBuilder.setTcpSrc(tcpSrcBuilder.build());
350         entryBuilder.setMatchEntryValue(tcpSrcCaseBuilder.build());
351         entries.add(entryBuilder.build());
352         entryBuilder = new MatchEntryBuilder();
353         entryBuilder.setOxmClass(OpenflowBasicClass.class);
354         entryBuilder.setOxmMatchField(TcpDst.class);
355         entryBuilder.setHasMask(false);
356         TcpDstCaseBuilder tcpDstCaseBuilder = new TcpDstCaseBuilder();
357         TcpDstBuilder tcpDstBuilder = new TcpDstBuilder();
358         tcpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
359                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6654));
360         tcpDstCaseBuilder.setTcpDst(tcpDstBuilder.build());
361         entryBuilder.setMatchEntryValue(tcpDstCaseBuilder.build());
362         entries.add(entryBuilder.build());
363         entryBuilder = new MatchEntryBuilder();
364         entryBuilder.setOxmClass(OpenflowBasicClass.class);
365         entryBuilder.setOxmMatchField(UdpSrc.class);
366         entryBuilder.setHasMask(false);
367         UdpSrcCaseBuilder udpSrcCaseBuilder = new UdpSrcCaseBuilder();
368         UdpSrcBuilder udpSrcBuilder = new UdpSrcBuilder();
369         udpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
370                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6655));
371         udpSrcCaseBuilder.setUdpSrc(udpSrcBuilder.build());
372         entryBuilder.setMatchEntryValue(udpSrcCaseBuilder.build());
373         entries.add(entryBuilder.build());
374         entryBuilder = new MatchEntryBuilder();
375         entryBuilder.setOxmClass(OpenflowBasicClass.class);
376         entryBuilder.setOxmMatchField(UdpDst.class);
377         entryBuilder.setHasMask(false);
378         UdpDstCaseBuilder udpDstCaseBuilder = new UdpDstCaseBuilder();
379         UdpDstBuilder udpDstBuilder = new UdpDstBuilder();
380         udpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
381                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6656));
382         udpDstCaseBuilder.setUdpDst(udpDstBuilder.build());
383         entryBuilder.setMatchEntryValue(udpDstCaseBuilder.build());
384         entries.add(entryBuilder.build());
385         entryBuilder = new MatchEntryBuilder();
386         entryBuilder.setOxmClass(OpenflowBasicClass.class);
387         entryBuilder.setOxmMatchField(SctpSrc.class);
388         entryBuilder.setHasMask(false);
389         SctpSrcCaseBuilder sctpSrcCaseBuilder = new SctpSrcCaseBuilder();
390         SctpSrcBuilder sctpSrcBuilder = new SctpSrcBuilder();
391         sctpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
392                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6657));
393         sctpSrcCaseBuilder.setSctpSrc(sctpSrcBuilder.build());
394         entryBuilder.setMatchEntryValue(sctpSrcCaseBuilder.build());
395         entries.add(entryBuilder.build());
396         entryBuilder = new MatchEntryBuilder();
397         entryBuilder.setOxmClass(OpenflowBasicClass.class);
398         entryBuilder.setOxmMatchField(SctpDst.class);
399         entryBuilder.setHasMask(false);
400         SctpDstCaseBuilder sctpDstCaseBuilder = new SctpDstCaseBuilder();
401         SctpDstBuilder sctpDstBuilder = new SctpDstBuilder();
402         sctpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
403                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6658));
404         sctpDstCaseBuilder.setSctpDst(sctpDstBuilder.build());
405         entryBuilder.setMatchEntryValue(sctpDstCaseBuilder.build());
406         entries.add(entryBuilder.build());
407         entryBuilder = new MatchEntryBuilder();
408         entryBuilder.setOxmClass(OpenflowBasicClass.class);
409         entryBuilder.setOxmMatchField(Icmpv4Type.class);
410         entryBuilder.setHasMask(false);
411         Icmpv4TypeCaseBuilder icmpv4TypeCaseBuilder = new Icmpv4TypeCaseBuilder();
412         Icmpv4TypeBuilder icmpv4TypeBuilder = new Icmpv4TypeBuilder();
413         icmpv4TypeBuilder.setIcmpv4Type((short) 51);
414         icmpv4TypeCaseBuilder.setIcmpv4Type(icmpv4TypeBuilder.build());
415         entryBuilder.setMatchEntryValue(icmpv4TypeCaseBuilder.build());
416         entries.add(entryBuilder.build());
417         entryBuilder = new MatchEntryBuilder();
418         entryBuilder.setOxmClass(OpenflowBasicClass.class);
419         entryBuilder.setOxmMatchField(Icmpv4Code.class);
420         entryBuilder.setHasMask(false);
421         Icmpv4CodeCaseBuilder icmpv4CodeCaseBuilder = new Icmpv4CodeCaseBuilder();
422         Icmpv4CodeBuilder icmpv4CodeBuilder = new Icmpv4CodeBuilder();
423         icmpv4CodeBuilder.setIcmpv4Code((short) 52);
424         icmpv4CodeCaseBuilder.setIcmpv4Code(icmpv4CodeBuilder.build());
425         entryBuilder.setMatchEntryValue(icmpv4CodeCaseBuilder.build());
426         entries.add(entryBuilder.build());
427         entryBuilder = new MatchEntryBuilder();
428         entryBuilder.setOxmClass(OpenflowBasicClass.class);
429         entryBuilder.setOxmMatchField(ArpOp.class);
430         entryBuilder.setHasMask(false);
431         ArpOpCaseBuilder arpOpCaseBuilder = new ArpOpCaseBuilder();
432         ArpOpBuilder arpOpBuilder = new ArpOpBuilder();
433         arpOpBuilder.setOpCode(53);
434         arpOpCaseBuilder.setArpOp(arpOpBuilder.build());
435         entryBuilder.setMatchEntryValue(arpOpCaseBuilder.build());
436         entries.add(entryBuilder.build());
437         entryBuilder = new MatchEntryBuilder();
438         entryBuilder.setOxmClass(OpenflowBasicClass.class);
439         entryBuilder.setOxmMatchField(ArpSpa.class);
440         entryBuilder.setHasMask(true);
441         ArpSpaCaseBuilder arpSpaCaseBuilder = new ArpSpaCaseBuilder();
442         ArpSpaBuilder arpSpaBuilder = new ArpSpaBuilder();
443         arpSpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.4"));
444         arpSpaBuilder.setMask(new byte[]{0,0,0,16});
445         arpSpaCaseBuilder.setArpSpa(arpSpaBuilder.build());
446         entryBuilder.setMatchEntryValue(arpSpaCaseBuilder.build());
447         entries.add(entryBuilder.build());
448         entryBuilder = new MatchEntryBuilder();
449         entryBuilder.setOxmClass(OpenflowBasicClass.class);
450         entryBuilder.setOxmMatchField(ArpTpa.class);
451         entryBuilder.setHasMask(true);
452         ArpTpaCaseBuilder arpTpaCaseBuilder = new ArpTpaCaseBuilder();
453         ArpTpaBuilder arpTpaBuilder = new ArpTpaBuilder();
454         arpTpaBuilder.setIpv4Address(new Ipv4Address("10.0.0.5"));
455         arpTpaBuilder.setMask(new byte[]{0,0,0,17});
456         arpTpaCaseBuilder.setArpTpa(arpTpaBuilder.build());
457         entryBuilder.setMatchEntryValue(arpTpaCaseBuilder.build());
458         entries.add(entryBuilder.build());
459         entryBuilder = new MatchEntryBuilder();
460         entryBuilder.setOxmClass(OpenflowBasicClass.class);
461         entryBuilder.setOxmMatchField(ArpSha.class);
462         entryBuilder.setHasMask(true);
463         ArpShaCaseBuilder arpShaCaseBuilder = new ArpShaCaseBuilder();
464         ArpShaBuilder arpShaBuilder = new ArpShaBuilder();
465         arpShaBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
466         arpShaBuilder.setMask(new byte[]{0,0,4,0,0,6});
467         arpShaCaseBuilder.setArpSha(arpShaBuilder.build());
468         entryBuilder.setMatchEntryValue(arpShaCaseBuilder.build());
469         entries.add(entryBuilder.build());
470         entryBuilder = new MatchEntryBuilder();
471         entryBuilder.setOxmClass(OpenflowBasicClass.class);
472         entryBuilder.setOxmMatchField(ArpTha.class);
473         entryBuilder.setHasMask(true);
474         ArpThaCaseBuilder arpThaCaseBuilder = new ArpThaCaseBuilder();
475         ArpThaBuilder arpThaBuilder = new ArpThaBuilder();
476         arpThaBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
477         arpThaBuilder.setMask(new byte[]{0,0,6,0,0,4});
478         arpThaCaseBuilder.setArpTha(arpThaBuilder.build());
479         entryBuilder.setMatchEntryValue(arpThaCaseBuilder.build());
480         entries.add(entryBuilder.build());
481         entryBuilder = new MatchEntryBuilder();
482         entryBuilder.setOxmClass(OpenflowBasicClass.class);
483         entryBuilder.setOxmMatchField(Ipv6Src.class);
484         entryBuilder.setHasMask(true);
485         Ipv6SrcCaseBuilder ipv6SrcCaseBuilder = new Ipv6SrcCaseBuilder();
486         Ipv6SrcBuilder ipv6SrcBuilder = new Ipv6SrcBuilder();
487         ipv6SrcBuilder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
488         ipv6SrcBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
489         ipv6SrcCaseBuilder.setIpv6Src(ipv6SrcBuilder.build());
490         entryBuilder.setMatchEntryValue(ipv6SrcCaseBuilder.build());
491         entries.add(entryBuilder.build());
492         entryBuilder = new MatchEntryBuilder();
493         entryBuilder.setOxmClass(OpenflowBasicClass.class);
494         entryBuilder.setOxmMatchField(Ipv6Dst.class);
495         entryBuilder.setHasMask(true);
496         Ipv6DstCaseBuilder ipv6DstCaseBuilder = new Ipv6DstCaseBuilder();
497         Ipv6DstBuilder ipv6DstBuilder = new Ipv6DstBuilder();
498         ipv6DstBuilder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
499         ipv6DstBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});
500         ipv6DstCaseBuilder.setIpv6Dst(ipv6DstBuilder.build());
501         entryBuilder.setMatchEntryValue(ipv6DstCaseBuilder.build());
502         entries.add(entryBuilder.build());
503         entryBuilder = new MatchEntryBuilder();
504         entryBuilder.setOxmClass(OpenflowBasicClass.class);
505         entryBuilder.setOxmMatchField(Ipv6Flabel.class);
506         entryBuilder.setHasMask(false);
507         Ipv6FlabelCaseBuilder ipv6FlabelCaseBuilder = new Ipv6FlabelCaseBuilder();
508         Ipv6FlabelBuilder ipv6FlabelBuilder = new Ipv6FlabelBuilder();
509         ipv6FlabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
510         ipv6FlabelCaseBuilder.setIpv6Flabel(ipv6FlabelBuilder.build());
511         entryBuilder.setMatchEntryValue(ipv6FlabelCaseBuilder.build());
512         entries.add(entryBuilder.build());
513         entryBuilder = new MatchEntryBuilder();
514         entryBuilder.setOxmClass(OpenflowBasicClass.class);
515         entryBuilder.setOxmMatchField(Icmpv6Type.class);
516         entryBuilder.setHasMask(false);
517         Icmpv6TypeCaseBuilder icmpv6TypeCaseBuilder = new Icmpv6TypeCaseBuilder();
518         Icmpv6TypeBuilder icmpv6TypeBuilder = new Icmpv6TypeBuilder();
519         icmpv6TypeBuilder.setIcmpv6Type((short) 59);
520         icmpv6TypeCaseBuilder.setIcmpv6Type(icmpv6TypeBuilder.build());
521         entryBuilder.setMatchEntryValue(icmpv6TypeCaseBuilder.build());
522         entries.add(entryBuilder.build());
523         entryBuilder = new MatchEntryBuilder();
524         entryBuilder.setOxmClass(OpenflowBasicClass.class);
525         entryBuilder.setOxmMatchField(Icmpv6Code.class);
526         entryBuilder.setHasMask(false);
527         Icmpv6CodeCaseBuilder Icmpv6CodeCaseBuilder = new Icmpv6CodeCaseBuilder();
528         Icmpv6CodeBuilder Icmpv6CodeBuilder = new Icmpv6CodeBuilder();
529         Icmpv6CodeBuilder.setIcmpv6Code((short) 60);
530         Icmpv6CodeCaseBuilder.setIcmpv6Code(Icmpv6CodeBuilder.build());
531         entryBuilder.setMatchEntryValue(Icmpv6CodeCaseBuilder.build());
532         entries.add(entryBuilder.build());
533         entryBuilder.setOxmClass(OpenflowBasicClass.class);
534         entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
535         entryBuilder.setHasMask(false);
536         Ipv6NdTargetCaseBuilder ipv6NdTargetCaseBuilder = new Ipv6NdTargetCaseBuilder();
537         Ipv6NdTargetBuilder ipv6NdTargetBuilder = new Ipv6NdTargetBuilder();
538         ipv6NdTargetBuilder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
539         ipv6NdTargetCaseBuilder.setIpv6NdTarget(ipv6NdTargetBuilder.build());
540         entryBuilder.setMatchEntryValue(ipv6NdTargetCaseBuilder.build());
541         entries.add(entryBuilder.build());
542         entryBuilder = new MatchEntryBuilder();
543         entryBuilder.setOxmClass(OpenflowBasicClass.class);
544         entryBuilder.setOxmMatchField(Ipv6NdSll.class);
545         entryBuilder.setHasMask(false);
546         Ipv6NdSllCaseBuilder ipv6NdSllCaseBuilder = new Ipv6NdSllCaseBuilder();
547         Ipv6NdSllBuilder ipv6NdSllBuilder = new Ipv6NdSllBuilder();
548         ipv6NdSllBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
549         ipv6NdSllCaseBuilder.setIpv6NdSll(ipv6NdSllBuilder.build());
550         entryBuilder.setMatchEntryValue(ipv6NdSllCaseBuilder.build());
551         entries.add(entryBuilder.build());
552         entryBuilder = new MatchEntryBuilder();
553         entryBuilder.setOxmClass(OpenflowBasicClass.class);
554         entryBuilder.setOxmMatchField(Ipv6NdTll.class);
555         entryBuilder.setHasMask(false);
556         Ipv6NdTllCaseBuilder ipv6NdTllCaseBuilder = new Ipv6NdTllCaseBuilder();
557         Ipv6NdTllBuilder ipv6NdTllBuilder = new Ipv6NdTllBuilder();
558         ipv6NdTllBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
559         ipv6NdTllCaseBuilder.setIpv6NdTll(ipv6NdTllBuilder.build());
560         entryBuilder.setMatchEntryValue(ipv6NdTllCaseBuilder.build());
561         entries.add(entryBuilder.build());
562         entryBuilder = new MatchEntryBuilder();
563         entryBuilder.setOxmClass(OpenflowBasicClass.class);
564         entryBuilder.setOxmMatchField(MplsLabel.class);
565         entryBuilder.setHasMask(false);
566         MplsLabelCaseBuilder mplsLabelCaseBuilder = new MplsLabelCaseBuilder();
567         MplsLabelBuilder mplsLabelBuilder = new MplsLabelBuilder();
568         mplsLabelBuilder.setMplsLabel(61L);
569         mplsLabelCaseBuilder.setMplsLabel(mplsLabelBuilder.build());
570         entryBuilder.setMatchEntryValue(mplsLabelCaseBuilder.build());
571         entries.add(entryBuilder.build());
572         entryBuilder = new MatchEntryBuilder();
573         entryBuilder.setOxmClass(OpenflowBasicClass.class);
574         entryBuilder.setOxmMatchField(MplsTc.class);
575         entryBuilder.setHasMask(false);
576         MplsTcCaseBuilder MplsTcCaseBuilder = new MplsTcCaseBuilder();
577         MplsTcBuilder MplsTcBuilder = new MplsTcBuilder();
578         MplsTcBuilder.setTc((short) 62);
579         MplsTcCaseBuilder.setMplsTc(MplsTcBuilder.build());
580         entryBuilder.setMatchEntryValue(MplsTcCaseBuilder.build());
581         entries.add(entryBuilder.build());
582         entryBuilder = new MatchEntryBuilder();
583         entryBuilder.setOxmClass(OpenflowBasicClass.class);
584         entryBuilder.setOxmMatchField(MplsBos.class);
585         entryBuilder.setHasMask(false);
586         MplsBosCaseBuilder MplsBosCaseBuilder = new MplsBosCaseBuilder();
587         MplsBosBuilder MplsBosBuilder = new MplsBosBuilder();
588         MplsBosBuilder.setBos(true);
589         MplsBosCaseBuilder.setMplsBos(MplsBosBuilder.build());
590         entryBuilder.setMatchEntryValue(MplsBosCaseBuilder.build());
591         entries.add(entryBuilder.build());
592         entryBuilder = new MatchEntryBuilder();
593         entryBuilder.setOxmClass(OpenflowBasicClass.class);
594         entryBuilder.setOxmMatchField(PbbIsid.class);
595         entryBuilder.setHasMask(true);
596         PbbIsidCaseBuilder pbbIsidCaseBuilder = new PbbIsidCaseBuilder();
597         PbbIsidBuilder pbbIsidBuilder = new PbbIsidBuilder();
598         pbbIsidBuilder.setIsid(64L);
599         pbbIsidBuilder.setMask(new byte[]{0,1,2});
600         pbbIsidCaseBuilder.setPbbIsid(pbbIsidBuilder.build());
601         entryBuilder.setMatchEntryValue(pbbIsidCaseBuilder.build());
602         entries.add(entryBuilder.build());
603         entryBuilder = new MatchEntryBuilder();
604         entryBuilder.setOxmClass(OpenflowBasicClass.class);
605         entryBuilder.setOxmMatchField(TunnelId.class);
606         entryBuilder.setHasMask(true);
607         TunnelIdCaseBuilder tunnelIdCaseBuilder = new TunnelIdCaseBuilder();
608         TunnelIdBuilder tunnelIdBuilder = new TunnelIdBuilder();
609         tunnelIdBuilder.setTunnelId(new byte[]{0,0,0,0,0,0,0,1});
610         tunnelIdBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
611         tunnelIdCaseBuilder.setTunnelId(tunnelIdBuilder.build());
612         entryBuilder.setMatchEntryValue(tunnelIdCaseBuilder.build());
613         entries.add(entryBuilder.build());
614         entryBuilder = new MatchEntryBuilder();
615         entryBuilder.setOxmClass(OpenflowBasicClass.class);
616         entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
617         entryBuilder.setHasMask(true);
618         Ipv6ExthdrCaseBuilder ipv6ExthdrCaseBuilder = new Ipv6ExthdrCaseBuilder();
619         Ipv6ExthdrBuilder ipv6ExthdrBuilder = new Ipv6ExthdrBuilder();
620         ipv6ExthdrBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true,
621                 false, true, false, true, false, true));
622         ipv6ExthdrBuilder.setMask(new byte[]{0,2});
623         ipv6ExthdrCaseBuilder.setIpv6Exthdr(ipv6ExthdrBuilder.build());
624         entryBuilder.setMatchEntryValue(ipv6ExthdrCaseBuilder.build());
625         entries.add(entryBuilder.build());
626
627
628         builder.setMatchEntry(entries);
629         Match match = builder.build();
630
631         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
632         matchSerializer.serialize(match, out);
633
634         Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
635         Assert.assertEquals("Wrong match length", 424, out.readUnsignedShort());
636         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
637         Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
638         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
639         Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
640         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
641         Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
642         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
643         Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
644         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
645         Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
646         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
647         Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
648         Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
649         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
650         Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
651         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
652         byte[] array = new byte[6];
653         out.readBytes(array);
654         Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
655         array = new byte[6];
656         out.readBytes(array);
657         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);
658         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
659         Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
660         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
661         array = new byte[6];
662         out.readBytes(array);
663         Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
664         array = new byte[6];
665         out.readBytes(array);
666         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);
667         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
668         Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
669         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
670         Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
671         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
672         Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
673         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
674         Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
675         array = new byte[2];
676         out.readBytes(array);
677         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);
678         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
679         Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
680         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
681         Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
682         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
683         Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
684         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
685         Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
686         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
687         Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
688         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
689         Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
690         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
691         Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
692         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
693         Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
694         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
695         Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
696         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
697         array = new byte[4];
698         out.readBytes(array);
699         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);
700         array = new byte[4];
701         out.readBytes(array);
702         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);
703         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
704         Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
705         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
706         array = new byte[4];
707         out.readBytes(array);
708         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);
709         array = new byte[4];
710         out.readBytes(array);
711         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);
712         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
713         Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
714         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
715         Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
716         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
717         Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
718         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
719         Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
720         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
721         Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
722         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
723         Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
724         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
725         Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
726         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
727         Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
728         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
729         Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
730         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
731         Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
732         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
733         Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
734         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
735         Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
736         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
737         Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
738         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
739         Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
740         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
741         Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
742         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
743         Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
744         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
745         Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
746         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
747         Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
748         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
749         Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
750         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
751         array = new byte[4];
752         out.readBytes(array);
753         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);
754         array = new byte[4];
755         out.readBytes(array);
756         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);
757         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
758         Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
759         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
760         array = new byte[4];
761         out.readBytes(array);
762         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);
763         array = new byte[4];
764         out.readBytes(array);
765         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);
766         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
767         Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
768         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
769         array = new byte[6];
770         out.readBytes(array);
771         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);
772         array = new byte[6];
773         out.readBytes(array);
774         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);
775         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
776         Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
777         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
778         array = new byte[6];
779         out.readBytes(array);
780         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);
781         array = new byte[6];
782         out.readBytes(array);
783         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);
784         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
785         Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
786         Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
787         array = new byte[16];
788         out.readBytes(array);
789         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
790         array = new byte[16];
791         out.readBytes(array);
792         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
793         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
794         Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
795         Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
796         array = new byte[16];
797         out.readBytes(array);
798         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1}, array);
799         array = new byte[16];
800         out.readBytes(array);
801         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1}, array);
802         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
803         Assert.assertEquals("Wrong match entry field & hasMask", 56, out.readUnsignedByte());
804         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte()); //8, out.readUnsignedByte());
805         Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
806         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
807         Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
808         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
809         Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
810         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
811         Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
812         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
813         Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
814         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
815         Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
816         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
817         array = new byte[16];
818         out.readBytes(array);
819         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, array);
820         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
821         Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
822         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
823         array = new byte[6];
824         out.readBytes(array);
825         Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
826         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
827         Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
828         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
829         array = new byte[6];
830         out.readBytes(array);
831         Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
832         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
833         Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
834         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
835         Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
836         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
837         Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
838         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
839         Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
840         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
841         Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
842         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
843         Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
844         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
845         Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
846         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
847         Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
848         array = new byte[3];
849         out.readBytes(array);
850         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);
851         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
852         Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
853         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
854         Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
855         Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
856         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
857         Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
858         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
859         Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
860         array = new byte[2];
861         out.readBytes(array);
862         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);
863         Assert.assertTrue("Wrong padding", out.readableBytes() == 0);
864     }
865
866 }