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