6ed7c7e7ddfbe671f1f64951107267b98a856e0e
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / OF13MatchSerializer02Test.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.openflowjava.protocol.impl.util;\r
9 \r
10 import io.netty.buffer.ByteBuf;\r
11 import io.netty.buffer.UnpooledByteBufAllocator;\r
12 \r
13 import java.util.ArrayList;\r
14 import java.util.List;\r
15 \r
16 import org.junit.Assert;\r
17 import org.junit.Before;\r
18 import org.junit.Test;\r
19 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
21 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;\r
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;\r
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;\r
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;\r
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;\r
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;\r
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;\r
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;\r
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;\r
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;\r
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;\r
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;\r
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;\r
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;\r
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;\r
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;\r
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;\r
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;\r
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;\r
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;\r
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;\r
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;\r
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;\r
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;\r
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;\r
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;\r
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;\r
126 \r
127 /**\r
128  * @author michal.polkorab\r
129  *\r
130  */\r
131 public class OF13MatchSerializer02Test {\r
132 \r
133     private SerializerRegistry registry;\r
134     private OFSerializer<Match> matchSerializer;\r
135 \r
136     /**\r
137      * Initializes serializer table and stores correct factory in field\r
138      */\r
139     @Before\r
140     public void startUp() {\r
141         registry = new SerializerRegistryImpl();\r
142         registry.init();\r
143         matchSerializer = registry.getSerializer(\r
144                 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));\r
145     }\r
146 \r
147     /**\r
148      * Testing serialization of match\r
149      */\r
150     @Test\r
151     public void testEmptyMatch() {\r
152         MatchBuilder builder = new MatchBuilder();\r
153         builder.setType(OxmMatchType.class);\r
154         Match match = builder.build();\r
155         \r
156         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
157         matchSerializer.serialize(match, out);\r
158         \r
159         Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());\r
160         Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());\r
161         Assert.assertTrue("Wrong padding", out.readableBytes() == 4);\r
162     }\r
163     \r
164     /**\r
165      * Testing serialization of match\r
166      */\r
167     @Test\r
168     public void test() {\r
169         MatchBuilder builder = new MatchBuilder();\r
170         builder.setType(OxmMatchType.class);\r
171         List<MatchEntries> entries = new ArrayList<>();\r
172         MatchEntriesBuilder entryBuilder = new MatchEntriesBuilder();\r
173         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
174         entryBuilder.setOxmMatchField(InPort.class);\r
175         entryBuilder.setHasMask(false);\r
176         PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();\r
177         portNumberBuilder.setPortNumber(new PortNumber(42L));\r
178         entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
179         entries.add(entryBuilder.build());\r
180         entryBuilder = new MatchEntriesBuilder();\r
181         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
182         entryBuilder.setOxmMatchField(InPhyPort.class);\r
183         entryBuilder.setHasMask(false);\r
184         portNumberBuilder = new PortNumberMatchEntryBuilder();\r
185         portNumberBuilder.setPortNumber(new PortNumber(43L));\r
186         entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
187         entries.add(entryBuilder.build());\r
188         entryBuilder = new MatchEntriesBuilder();\r
189         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
190         entryBuilder.setOxmMatchField(Metadata.class);\r
191         entryBuilder.setHasMask(true);\r
192         MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();\r
193         metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});\r
194         entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
195         MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();\r
196         maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});\r
197         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
198         entries.add(entryBuilder.build());\r
199         entryBuilder = new MatchEntriesBuilder();\r
200         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
201         entryBuilder.setOxmMatchField(EthDst.class);\r
202         entryBuilder.setHasMask(true);\r
203         MacAddressMatchEntryBuilder macBuilder = new MacAddressMatchEntryBuilder();\r
204         macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));\r
205         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
206         maskBuilder = new MaskMatchEntryBuilder();\r
207         maskBuilder.setMask(new byte[]{0,0,0,0,0,5});\r
208         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
209         entries.add(entryBuilder.build());\r
210         entryBuilder = new MatchEntriesBuilder();\r
211         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
212         entryBuilder.setOxmMatchField(EthSrc.class);\r
213         entryBuilder.setHasMask(true);\r
214         macBuilder = new MacAddressMatchEntryBuilder();\r
215         macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));\r
216         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
217         maskBuilder = new MaskMatchEntryBuilder();\r
218         maskBuilder.setMask(new byte[]{0,0,0,0,0,2});\r
219         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
220         entries.add(entryBuilder.build());\r
221         entryBuilder = new MatchEntriesBuilder();\r
222         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
223         entryBuilder.setOxmMatchField(EthType.class);\r
224         entryBuilder.setHasMask(false);\r
225         EthTypeMatchEntryBuilder ethBuilder = new EthTypeMatchEntryBuilder();\r
226         ethBuilder.setEthType(new EtherType(46));\r
227         entryBuilder.addAugmentation(EthTypeMatchEntry.class, ethBuilder.build());\r
228         entries.add(entryBuilder.build());\r
229         entryBuilder = new MatchEntriesBuilder();\r
230         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
231         entryBuilder.setOxmMatchField(VlanVid.class);\r
232         entryBuilder.setHasMask(true);\r
233         VlanVidMatchEntryBuilder vidBuilder = new VlanVidMatchEntryBuilder();\r
234         vidBuilder.setCfiBit(true);\r
235         vidBuilder.setVlanVid(45);\r
236         entryBuilder.addAugmentation(VlanVidMatchEntry.class, vidBuilder.build());\r
237         maskBuilder = new MaskMatchEntryBuilder();\r
238         maskBuilder.setMask(new byte[]{0,9});\r
239         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
240         entries.add(entryBuilder.build());\r
241         entryBuilder = new MatchEntriesBuilder();\r
242         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
243         entryBuilder.setOxmMatchField(VlanPcp.class);\r
244         entryBuilder.setHasMask(false);\r
245         VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();\r
246         pcpBuilder.setVlanPcp((short) 14);\r
247         entryBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());\r
248         entries.add(entryBuilder.build());\r
249         entryBuilder = new MatchEntriesBuilder();\r
250         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
251         entryBuilder.setOxmMatchField(IpDscp.class);\r
252         entryBuilder.setHasMask(false);\r
253         DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();\r
254         dscpBuilder.setDscp(new Dscp((short) 48));\r
255         entryBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());\r
256         entries.add(entryBuilder.build());\r
257         entryBuilder = new MatchEntriesBuilder();\r
258         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
259         entryBuilder.setOxmMatchField(IpEcn.class);\r
260         entryBuilder.setHasMask(false);\r
261         EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();\r
262         ecnBuilder.setEcn((short) 49);\r
263         entryBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());\r
264         entries.add(entryBuilder.build());\r
265         entryBuilder = new MatchEntriesBuilder();\r
266         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
267         entryBuilder.setOxmMatchField(IpProto.class);\r
268         entryBuilder.setHasMask(false);\r
269         ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();\r
270         protoBuilder.setProtocolNumber((short) 50);\r
271         entryBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());\r
272         entries.add(entryBuilder.build());\r
273         entryBuilder = new MatchEntriesBuilder();\r
274         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
275         entryBuilder.setOxmMatchField(Ipv4Src.class);\r
276         entryBuilder.setHasMask(true);\r
277         Ipv4AddressMatchEntryBuilder ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
278         ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
279         entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
280         maskBuilder = new MaskMatchEntryBuilder();\r
281         maskBuilder.setMask(new byte[]{0,0,0,14});\r
282         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
283         entries.add(entryBuilder.build());\r
284         entryBuilder = new MatchEntriesBuilder();\r
285         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
286         entryBuilder.setOxmMatchField(Ipv4Dst.class);\r
287         entryBuilder.setHasMask(true);\r
288         ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
289         ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
290         entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
291         maskBuilder = new MaskMatchEntryBuilder();\r
292         maskBuilder.setMask(new byte[]{0,0,0,15});\r
293         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
294         entries.add(entryBuilder.build());\r
295         entryBuilder = new MatchEntriesBuilder();\r
296         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
297         entryBuilder.setOxmMatchField(TcpSrc.class);\r
298         entryBuilder.setHasMask(false);\r
299         PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();\r
300         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
301                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6653));\r
302         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
303         entries.add(entryBuilder.build());\r
304         entryBuilder = new MatchEntriesBuilder();\r
305         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
306         entryBuilder.setOxmMatchField(TcpDst.class);\r
307         entryBuilder.setHasMask(false);\r
308         portBuilder = new PortMatchEntryBuilder();\r
309         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
310                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6654));\r
311         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
312         entries.add(entryBuilder.build());\r
313         entryBuilder = new MatchEntriesBuilder();\r
314         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
315         entryBuilder.setOxmMatchField(UdpSrc.class);\r
316         entryBuilder.setHasMask(false);\r
317         portBuilder = new PortMatchEntryBuilder();\r
318         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
319                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6655));\r
320         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
321         entries.add(entryBuilder.build());\r
322         entryBuilder = new MatchEntriesBuilder();\r
323         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
324         entryBuilder.setOxmMatchField(UdpDst.class);\r
325         entryBuilder.setHasMask(false);\r
326         portBuilder = new PortMatchEntryBuilder();\r
327         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
328                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6656));\r
329         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
330         entries.add(entryBuilder.build());\r
331         entryBuilder = new MatchEntriesBuilder();\r
332         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
333         entryBuilder.setOxmMatchField(SctpSrc.class);\r
334         entryBuilder.setHasMask(false);\r
335         portBuilder = new PortMatchEntryBuilder();\r
336         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
337                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6657));\r
338         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
339         entries.add(entryBuilder.build());\r
340         entryBuilder = new MatchEntriesBuilder();\r
341         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
342         entryBuilder.setOxmMatchField(SctpDst.class);\r
343         entryBuilder.setHasMask(false);\r
344         portBuilder = new PortMatchEntryBuilder();\r
345         portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
346                 .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6658));\r
347         entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
348         entries.add(entryBuilder.build());\r
349         entryBuilder = new MatchEntriesBuilder();\r
350         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
351         entryBuilder.setOxmMatchField(Icmpv4Type.class);\r
352         entryBuilder.setHasMask(false);\r
353         Icmpv4TypeMatchEntryBuilder icmpv4typeBuilder = new Icmpv4TypeMatchEntryBuilder();\r
354         icmpv4typeBuilder.setIcmpv4Type((short) 51);\r
355         entryBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4typeBuilder.build());\r
356         entries.add(entryBuilder.build());\r
357         entryBuilder = new MatchEntriesBuilder();\r
358         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
359         entryBuilder.setOxmMatchField(Icmpv4Code.class);\r
360         entryBuilder.setHasMask(false);\r
361         Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();\r
362         icmpv4CodeBuilder.setIcmpv4Code((short) 52);\r
363         entryBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());\r
364         entries.add(entryBuilder.build());\r
365         entryBuilder = new MatchEntriesBuilder();\r
366         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
367         entryBuilder.setOxmMatchField(ArpOp.class);\r
368         entryBuilder.setHasMask(false);\r
369         OpCodeMatchEntryBuilder opBuilder = new OpCodeMatchEntryBuilder();\r
370         opBuilder.setOpCode(53);\r
371         entryBuilder.addAugmentation(OpCodeMatchEntry.class, opBuilder.build());\r
372         entries.add(entryBuilder.build());\r
373         entryBuilder = new MatchEntriesBuilder();\r
374         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
375         entryBuilder.setOxmMatchField(ArpSpa.class);\r
376         entryBuilder.setHasMask(true);\r
377         ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
378         ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
379         entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
380         maskBuilder = new MaskMatchEntryBuilder();\r
381         maskBuilder.setMask(new byte[]{0,0,0,16});\r
382         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
383         entries.add(entryBuilder.build());\r
384         entryBuilder = new MatchEntriesBuilder();\r
385         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
386         entryBuilder.setOxmMatchField(ArpTpa.class);\r
387         entryBuilder.setHasMask(true);\r
388         ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
389         ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.5"));\r
390         entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
391         maskBuilder = new MaskMatchEntryBuilder();\r
392         maskBuilder.setMask(new byte[]{0,0,0,17});\r
393         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
394         entries.add(entryBuilder.build());\r
395         entryBuilder = new MatchEntriesBuilder();\r
396         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
397         entryBuilder.setOxmMatchField(ArpSha.class);\r
398         entryBuilder.setHasMask(true);\r
399         macBuilder = new MacAddressMatchEntryBuilder();\r
400         macBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));\r
401         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
402         maskBuilder = new MaskMatchEntryBuilder();\r
403         maskBuilder.setMask(new byte[]{0,0,4,0,0,6});\r
404         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
405         entries.add(entryBuilder.build());\r
406         entryBuilder = new MatchEntriesBuilder();\r
407         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
408         entryBuilder.setOxmMatchField(ArpTha.class);\r
409         entryBuilder.setHasMask(true);\r
410         macBuilder = new MacAddressMatchEntryBuilder();\r
411         macBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
412         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
413         maskBuilder = new MaskMatchEntryBuilder();\r
414         maskBuilder.setMask(new byte[]{0,0,6,0,0,4});\r
415         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
416         entries.add(entryBuilder.build());\r
417         entryBuilder = new MatchEntriesBuilder();\r
418         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
419         entryBuilder.setOxmMatchField(Ipv6Src.class);\r
420         entryBuilder.setHasMask(true);\r
421         Ipv6AddressMatchEntryBuilder ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
422         ipv6Builder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));\r
423         entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
424         maskBuilder = new MaskMatchEntryBuilder();\r
425         maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});\r
426         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
427         entries.add(entryBuilder.build());\r
428         entryBuilder = new MatchEntriesBuilder();\r
429         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
430         entryBuilder.setOxmMatchField(Ipv6Dst.class);\r
431         entryBuilder.setHasMask(true);\r
432         ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
433         ipv6Builder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));\r
434         entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
435         maskBuilder = new MaskMatchEntryBuilder();\r
436         maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});\r
437         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
438         entries.add(entryBuilder.build());\r
439         entryBuilder = new MatchEntriesBuilder();\r
440         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
441         entryBuilder.setOxmMatchField(Ipv6Flabel.class);\r
442         entryBuilder.setHasMask(true);\r
443         Ipv6FlabelMatchEntryBuilder flabelBuilder = new Ipv6FlabelMatchEntryBuilder();\r
444         flabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));\r
445         entryBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, flabelBuilder.build());\r
446         maskBuilder = new MaskMatchEntryBuilder();\r
447         maskBuilder.setMask(new byte[]{0,1,0,2});\r
448         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
449         entries.add(entryBuilder.build());\r
450         entryBuilder = new MatchEntriesBuilder();\r
451         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
452         entryBuilder.setOxmMatchField(Icmpv6Type.class);\r
453         entryBuilder.setHasMask(false);\r
454         Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();\r
455         icmpv6TypeBuilder.setIcmpv6Type((short) 59);\r
456         entryBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());\r
457         entries.add(entryBuilder.build());\r
458         entryBuilder = new MatchEntriesBuilder();\r
459         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
460         entryBuilder.setOxmMatchField(Icmpv6Code.class);\r
461         entryBuilder.setHasMask(false);\r
462         Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();\r
463         icmpv6CodeBuilder.setIcmpv6Code((short) 60);\r
464         entryBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());\r
465         entries.add(entryBuilder.build());\r
466         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
467         entryBuilder.setOxmMatchField(Ipv6NdTarget.class);\r
468         entryBuilder.setHasMask(false);\r
469         ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
470         ipv6Builder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));\r
471         entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
472         entries.add(entryBuilder.build());\r
473         entryBuilder = new MatchEntriesBuilder();\r
474         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
475         entryBuilder.setOxmMatchField(Ipv6NdSll.class);\r
476         entryBuilder.setHasMask(false);\r
477         macBuilder = new MacAddressMatchEntryBuilder();\r
478         macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));\r
479         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
480         entries.add(entryBuilder.build());\r
481         entryBuilder = new MatchEntriesBuilder();\r
482         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
483         entryBuilder.setOxmMatchField(Ipv6NdTll.class);\r
484         entryBuilder.setHasMask(false);\r
485         macBuilder = new MacAddressMatchEntryBuilder();\r
486         macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));\r
487         entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
488         entries.add(entryBuilder.build());\r
489         entryBuilder = new MatchEntriesBuilder();\r
490         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
491         entryBuilder.setOxmMatchField(MplsLabel.class);\r
492         entryBuilder.setHasMask(false);\r
493         MplsLabelMatchEntryBuilder labelBuilder = new MplsLabelMatchEntryBuilder();\r
494         labelBuilder.setMplsLabel(61L);\r
495         entryBuilder.addAugmentation(MplsLabelMatchEntry.class, labelBuilder.build());\r
496         entries.add(entryBuilder.build());\r
497         entryBuilder = new MatchEntriesBuilder();\r
498         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
499         entryBuilder.setOxmMatchField(MplsTc.class);\r
500         entryBuilder.setHasMask(false);\r
501         TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();\r
502         tcBuilder.setTc((short) 62);\r
503         entryBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());\r
504         entries.add(entryBuilder.build());\r
505         entryBuilder = new MatchEntriesBuilder();\r
506         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
507         entryBuilder.setOxmMatchField(MplsBos.class);\r
508         entryBuilder.setHasMask(false);\r
509         BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();\r
510         bosBuilder.setBos(true);\r
511         entryBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());\r
512         entries.add(entryBuilder.build());\r
513         \r
514         entryBuilder = new MatchEntriesBuilder();\r
515         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
516         entryBuilder.setOxmMatchField(PbbIsid.class);\r
517         entryBuilder.setHasMask(true);\r
518         IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();\r
519         isidBuilder.setIsid(64L);\r
520         entryBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());\r
521         maskBuilder = new MaskMatchEntryBuilder();\r
522         maskBuilder.setMask(new byte[]{0,1,2});\r
523         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
524         entries.add(entryBuilder.build());\r
525         \r
526         entryBuilder = new MatchEntriesBuilder();\r
527         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
528         entryBuilder.setOxmMatchField(TunnelId.class);\r
529         entryBuilder.setHasMask(true);\r
530         metadataBuilder = new MetadataMatchEntryBuilder();\r
531         metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});\r
532         entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
533         maskBuilder = new MaskMatchEntryBuilder();\r
534         maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});\r
535         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
536         entries.add(entryBuilder.build());\r
537         \r
538         entryBuilder = new MatchEntriesBuilder();\r
539         entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
540         entryBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
541         entryBuilder.setHasMask(true);\r
542         PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();\r
543         pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));\r
544         entryBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());\r
545         maskBuilder = new MaskMatchEntryBuilder();\r
546         maskBuilder.setMask(new byte[]{0,2});\r
547         entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
548         entries.add(entryBuilder.build());\r
549         \r
550         \r
551         \r
552         builder.setMatchEntries(entries);\r
553         Match match = builder.build();\r
554         \r
555         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
556         matchSerializer.serialize(match, out);\r
557         \r
558         Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());\r
559         Assert.assertEquals("Wrong match length", 428, out.readUnsignedShort());\r
560         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
561         Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());\r
562         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
563         Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());\r
564         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
565         Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());\r
566         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
567         Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());\r
568         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
569         Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());\r
570         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
571         Assert.assertEquals("Wrong match entry value", 1L, out.readLong());\r
572         Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());\r
573         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
574         Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());\r
575         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
576         byte[] array = new byte[6];\r
577         out.readBytes(array);\r
578         Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);\r
579         array = new byte[6];\r
580         out.readBytes(array);\r
581         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);\r
582         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
583         Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());\r
584         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
585         array = new byte[6];\r
586         out.readBytes(array);\r
587         Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);\r
588         array = new byte[6];\r
589         out.readBytes(array);\r
590         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);\r
591         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
592         Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());\r
593         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
594         Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());\r
595         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
596         Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());\r
597         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
598         Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());\r
599         array = new byte[2];\r
600         out.readBytes(array);\r
601         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);\r
602         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
603         Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());\r
604         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
605         Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());\r
606         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
607         Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());\r
608         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
609         Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());\r
610         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
611         Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());\r
612         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
613         Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());\r
614         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
615         Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());\r
616         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
617         Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());\r
618         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
619         Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());\r
620         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
621         array = new byte[4];\r
622         out.readBytes(array);\r
623         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);\r
624         array = new byte[4];\r
625         out.readBytes(array);\r
626         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);\r
627         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
628         Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());\r
629         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
630         array = new byte[4];\r
631         out.readBytes(array);\r
632         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);\r
633         array = new byte[4];\r
634         out.readBytes(array);\r
635         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);\r
636         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
637         Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());\r
638         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
639         Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());\r
640         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
641         Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());\r
642         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
643         Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());\r
644         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
645         Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());\r
646         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
647         Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());\r
648         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
649         Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());\r
650         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
651         Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());\r
652         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
653         Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());\r
654         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
655         Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());\r
656         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
657         Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());\r
658         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
659         Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());\r
660         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
661         Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());\r
662         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
663         Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());\r
664         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
665         Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());\r
666         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
667         Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());\r
668         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
669         Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());\r
670         Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
671         Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());\r
672         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
673         Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());\r
674         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
675         array = new byte[4];\r
676         out.readBytes(array);\r
677         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);\r
678         array = new byte[4];\r
679         out.readBytes(array);\r
680         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);\r
681         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
682         Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());\r
683         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
684         array = new byte[4];\r
685         out.readBytes(array);\r
686         Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);\r
687         array = new byte[4];\r
688         out.readBytes(array);\r
689         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);\r
690         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
691         Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());\r
692         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
693         array = new byte[6];\r
694         out.readBytes(array);\r
695         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);\r
696         array = new byte[6];\r
697         out.readBytes(array);\r
698         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);\r
699         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
700         Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());\r
701         Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
702         array = new byte[6];\r
703         out.readBytes(array);\r
704         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);\r
705         array = new byte[6];\r
706         out.readBytes(array);\r
707         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);\r
708         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
709         Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());\r
710         Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());\r
711         array = new byte[16];\r
712         out.readBytes(array);\r
713         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);\r
714         array = new byte[16];\r
715         out.readBytes(array);\r
716         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);\r
717         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
718         Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());\r
719         Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());\r
720         array = new byte[16];\r
721         out.readBytes(array);\r
722         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);\r
723         array = new byte[16];\r
724         out.readBytes(array);\r
725         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);\r
726         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
727         Assert.assertEquals("Wrong match entry field & hasMask", 57, out.readUnsignedByte());\r
728         Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
729         Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());\r
730         array = new byte[4];\r
731         out.readBytes(array);\r
732         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,0,2}, array);\r
733         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
734         Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());\r
735         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
736         Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());\r
737         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
738         Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());\r
739         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
740         Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());\r
741         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
742         Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());\r
743         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
744         array = new byte[16];\r
745         out.readBytes(array);\r
746         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);\r
747         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
748         Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());\r
749         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
750         array = new byte[6];\r
751         out.readBytes(array);\r
752         Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);\r
753         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
754         Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());\r
755         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
756         array = new byte[6];\r
757         out.readBytes(array);\r
758         Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);\r
759         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
760         Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());\r
761         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
762         Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());\r
763         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
764         Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());\r
765         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
766         Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());\r
767         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
768         Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());\r
769         Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
770         Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());\r
771         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
772         Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());\r
773         Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
774         Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());\r
775         array = new byte[3];\r
776         out.readBytes(array);\r
777         Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);\r
778         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
779         Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());\r
780         Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
781         Assert.assertEquals("Wrong match entry value", 1L, out.readLong());\r
782         Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());\r
783         Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
784         Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());\r
785         Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
786         Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());\r
787         array = new byte[2];\r
788         out.readBytes(array);\r
789         Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);\r
790         Assert.assertTrue("Wrong padding", out.readableBytes() == 4);\r
791     }\r
792 \r
793 }\r