Mass replace CRLF->LF
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / OF13MatchSerializer02Test.java
index 6ed7c7e7ddfbe671f1f64951107267b98a856e0e..e607d0fce8ff1f187c6737b573ec429cb568d9a0 100644 (file)
-/*\r
- * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.openflowjava.protocol.impl.util;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-import io.netty.buffer.UnpooledByteBufAllocator;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
-import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;\r
-\r
-/**\r
- * @author michal.polkorab\r
- *\r
- */\r
-public class OF13MatchSerializer02Test {\r
-\r
-    private SerializerRegistry registry;\r
-    private OFSerializer<Match> matchSerializer;\r
-\r
-    /**\r
-     * Initializes serializer table and stores correct factory in field\r
-     */\r
-    @Before\r
-    public void startUp() {\r
-        registry = new SerializerRegistryImpl();\r
-        registry.init();\r
-        matchSerializer = registry.getSerializer(\r
-                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));\r
-    }\r
-\r
-    /**\r
-     * Testing serialization of match\r
-     */\r
-    @Test\r
-    public void testEmptyMatch() {\r
-        MatchBuilder builder = new MatchBuilder();\r
-        builder.setType(OxmMatchType.class);\r
-        Match match = builder.build();\r
-        \r
-        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        matchSerializer.serialize(match, out);\r
-        \r
-        Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());\r
-        Assert.assertTrue("Wrong padding", out.readableBytes() == 4);\r
-    }\r
-    \r
-    /**\r
-     * Testing serialization of match\r
-     */\r
-    @Test\r
-    public void test() {\r
-        MatchBuilder builder = new MatchBuilder();\r
-        builder.setType(OxmMatchType.class);\r
-        List<MatchEntries> entries = new ArrayList<>();\r
-        MatchEntriesBuilder entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(InPort.class);\r
-        entryBuilder.setHasMask(false);\r
-        PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();\r
-        portNumberBuilder.setPortNumber(new PortNumber(42L));\r
-        entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(InPhyPort.class);\r
-        entryBuilder.setHasMask(false);\r
-        portNumberBuilder = new PortNumberMatchEntryBuilder();\r
-        portNumberBuilder.setPortNumber(new PortNumber(43L));\r
-        entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Metadata.class);\r
-        entryBuilder.setHasMask(true);\r
-        MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();\r
-        metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});\r
-        entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
-        MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(EthDst.class);\r
-        entryBuilder.setHasMask(true);\r
-        MacAddressMatchEntryBuilder macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,5});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(EthSrc.class);\r
-        entryBuilder.setHasMask(true);\r
-        macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(EthType.class);\r
-        entryBuilder.setHasMask(false);\r
-        EthTypeMatchEntryBuilder ethBuilder = new EthTypeMatchEntryBuilder();\r
-        ethBuilder.setEthType(new EtherType(46));\r
-        entryBuilder.addAugmentation(EthTypeMatchEntry.class, ethBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(VlanVid.class);\r
-        entryBuilder.setHasMask(true);\r
-        VlanVidMatchEntryBuilder vidBuilder = new VlanVidMatchEntryBuilder();\r
-        vidBuilder.setCfiBit(true);\r
-        vidBuilder.setVlanVid(45);\r
-        entryBuilder.addAugmentation(VlanVidMatchEntry.class, vidBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,9});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(VlanPcp.class);\r
-        entryBuilder.setHasMask(false);\r
-        VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();\r
-        pcpBuilder.setVlanPcp((short) 14);\r
-        entryBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(IpDscp.class);\r
-        entryBuilder.setHasMask(false);\r
-        DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();\r
-        dscpBuilder.setDscp(new Dscp((short) 48));\r
-        entryBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(IpEcn.class);\r
-        entryBuilder.setHasMask(false);\r
-        EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();\r
-        ecnBuilder.setEcn((short) 49);\r
-        entryBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(IpProto.class);\r
-        entryBuilder.setHasMask(false);\r
-        ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();\r
-        protoBuilder.setProtocolNumber((short) 50);\r
-        entryBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv4Src.class);\r
-        entryBuilder.setHasMask(true);\r
-        Ipv4AddressMatchEntryBuilder ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
-        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.1"));\r
-        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,14});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv4Dst.class);\r
-        entryBuilder.setHasMask(true);\r
-        ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
-        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.2"));\r
-        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,15});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(TcpSrc.class);\r
-        entryBuilder.setHasMask(false);\r
-        PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6653));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(TcpDst.class);\r
-        entryBuilder.setHasMask(false);\r
-        portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6654));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(UdpSrc.class);\r
-        entryBuilder.setHasMask(false);\r
-        portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6655));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(UdpDst.class);\r
-        entryBuilder.setHasMask(false);\r
-        portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6656));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(SctpSrc.class);\r
-        entryBuilder.setHasMask(false);\r
-        portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6657));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(SctpDst.class);\r
-        entryBuilder.setHasMask(false);\r
-        portBuilder = new PortMatchEntryBuilder();\r
-        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params\r
-                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6658));\r
-        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Icmpv4Type.class);\r
-        entryBuilder.setHasMask(false);\r
-        Icmpv4TypeMatchEntryBuilder icmpv4typeBuilder = new Icmpv4TypeMatchEntryBuilder();\r
-        icmpv4typeBuilder.setIcmpv4Type((short) 51);\r
-        entryBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4typeBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Icmpv4Code.class);\r
-        entryBuilder.setHasMask(false);\r
-        Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();\r
-        icmpv4CodeBuilder.setIcmpv4Code((short) 52);\r
-        entryBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(ArpOp.class);\r
-        entryBuilder.setHasMask(false);\r
-        OpCodeMatchEntryBuilder opBuilder = new OpCodeMatchEntryBuilder();\r
-        opBuilder.setOpCode(53);\r
-        entryBuilder.addAugmentation(OpCodeMatchEntry.class, opBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(ArpSpa.class);\r
-        entryBuilder.setHasMask(true);\r
-        ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
-        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.4"));\r
-        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,16});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(ArpTpa.class);\r
-        entryBuilder.setHasMask(true);\r
-        ipv4Builder = new Ipv4AddressMatchEntryBuilder();\r
-        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.5"));\r
-        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,17});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(ArpSha.class);\r
-        entryBuilder.setHasMask(true);\r
-        macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,4,0,0,6});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(ArpTha.class);\r
-        entryBuilder.setHasMask(true);\r
-        macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,6,0,0,4});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6Src.class);\r
-        entryBuilder.setHasMask(true);\r
-        Ipv6AddressMatchEntryBuilder ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
-        ipv6Builder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));\r
-        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6Dst.class);\r
-        entryBuilder.setHasMask(true);\r
-        ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
-        ipv6Builder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));\r
-        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6Flabel.class);\r
-        entryBuilder.setHasMask(true);\r
-        Ipv6FlabelMatchEntryBuilder flabelBuilder = new Ipv6FlabelMatchEntryBuilder();\r
-        flabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));\r
-        entryBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, flabelBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,1,0,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Icmpv6Type.class);\r
-        entryBuilder.setHasMask(false);\r
-        Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();\r
-        icmpv6TypeBuilder.setIcmpv6Type((short) 59);\r
-        entryBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Icmpv6Code.class);\r
-        entryBuilder.setHasMask(false);\r
-        Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();\r
-        icmpv6CodeBuilder.setIcmpv6Code((short) 60);\r
-        entryBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6NdTarget.class);\r
-        entryBuilder.setHasMask(false);\r
-        ipv6Builder = new Ipv6AddressMatchEntryBuilder();\r
-        ipv6Builder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));\r
-        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6NdSll.class);\r
-        entryBuilder.setHasMask(false);\r
-        macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6NdTll.class);\r
-        entryBuilder.setHasMask(false);\r
-        macBuilder = new MacAddressMatchEntryBuilder();\r
-        macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));\r
-        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(MplsLabel.class);\r
-        entryBuilder.setHasMask(false);\r
-        MplsLabelMatchEntryBuilder labelBuilder = new MplsLabelMatchEntryBuilder();\r
-        labelBuilder.setMplsLabel(61L);\r
-        entryBuilder.addAugmentation(MplsLabelMatchEntry.class, labelBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(MplsTc.class);\r
-        entryBuilder.setHasMask(false);\r
-        TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();\r
-        tcBuilder.setTc((short) 62);\r
-        entryBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(MplsBos.class);\r
-        entryBuilder.setHasMask(false);\r
-        BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();\r
-        bosBuilder.setBos(true);\r
-        entryBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        \r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(PbbIsid.class);\r
-        entryBuilder.setHasMask(true);\r
-        IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();\r
-        isidBuilder.setIsid(64L);\r
-        entryBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,1,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        \r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(TunnelId.class);\r
-        entryBuilder.setHasMask(true);\r
-        metadataBuilder = new MetadataMatchEntryBuilder();\r
-        metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});\r
-        entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        \r
-        entryBuilder = new MatchEntriesBuilder();\r
-        entryBuilder.setOxmClass(OpenflowBasicClass.class);\r
-        entryBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
-        entryBuilder.setHasMask(true);\r
-        PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();\r
-        pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));\r
-        entryBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());\r
-        maskBuilder = new MaskMatchEntryBuilder();\r
-        maskBuilder.setMask(new byte[]{0,2});\r
-        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());\r
-        entries.add(entryBuilder.build());\r
-        \r
-        \r
-        \r
-        builder.setMatchEntries(entries);\r
-        Match match = builder.build();\r
-        \r
-        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        matchSerializer.serialize(match, out);\r
-        \r
-        Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match length", 428, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 1L, out.readLong());\r
-        Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
-        byte[] array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());\r
-        array = new byte[2];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());\r
-        array = new byte[16];\r
-        out.readBytes(array);\r
-        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
-        array = new byte[16];\r
-        out.readBytes(array);\r
-        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
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());\r
-        array = new byte[16];\r
-        out.readBytes(array);\r
-        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
-        array = new byte[16];\r
-        out.readBytes(array);\r
-        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
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 57, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());\r
-        array = new byte[4];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,0,2}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
-        array = new byte[16];\r
-        out.readBytes(array);\r
-        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
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
-        array = new byte[6];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());\r
-        array = new byte[3];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 1L, out.readLong());\r
-        Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());\r
-        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());\r
-        array = new byte[2];\r
-        out.readBytes(array);\r
-        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);\r
-        Assert.assertTrue("Wrong padding", out.readableBytes() == 4);\r
-    }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowjava.protocol.impl.util;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.UnpooledByteBufAllocator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6FlowLabel;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.BosMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.DscpMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EcnMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthTypeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4CodeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv4TypeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6CodeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Icmpv6TypeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6FlabelMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IsidMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MacAddressMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaskMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MetadataMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsLabelMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OpCodeMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ProtocolNumberMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PseudoFieldMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.TcMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanPcpMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.VlanVidMatchEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Ipv6ExthdrFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpOp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSha;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpSpa;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTha;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpTpa;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Type;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpDscp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Flabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdSll;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTarget;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6NdTll;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Metadata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.SctpSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TunnelId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;
+
+/**
+ * @author michal.polkorab
+ *
+ */
+public class OF13MatchSerializer02Test {
+
+    private SerializerRegistry registry;
+    private OFSerializer<Match> matchSerializer;
+
+    /**
+     * Initializes serializer table and stores correct factory in field
+     */
+    @Before
+    public void startUp() {
+        registry = new SerializerRegistryImpl();
+        registry.init();
+        matchSerializer = registry.getSerializer(
+                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, Match.class));
+    }
+
+    /**
+     * Testing serialization of match
+     */
+    @Test
+    public void testEmptyMatch() {
+        MatchBuilder builder = new MatchBuilder();
+        builder.setType(OxmMatchType.class);
+        Match match = builder.build();
+        
+        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+        matchSerializer.serialize(match, out);
+        
+        Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match length", 4, out.readUnsignedShort());
+        Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
+    }
+    
+    /**
+     * Testing serialization of match
+     */
+    @Test
+    public void test() {
+        MatchBuilder builder = new MatchBuilder();
+        builder.setType(OxmMatchType.class);
+        List<MatchEntries> entries = new ArrayList<>();
+        MatchEntriesBuilder entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(InPort.class);
+        entryBuilder.setHasMask(false);
+        PortNumberMatchEntryBuilder portNumberBuilder = new PortNumberMatchEntryBuilder();
+        portNumberBuilder.setPortNumber(new PortNumber(42L));
+        entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(InPhyPort.class);
+        entryBuilder.setHasMask(false);
+        portNumberBuilder = new PortNumberMatchEntryBuilder();
+        portNumberBuilder.setPortNumber(new PortNumber(43L));
+        entryBuilder.addAugmentation(PortNumberMatchEntry.class, portNumberBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Metadata.class);
+        entryBuilder.setHasMask(true);
+        MetadataMatchEntryBuilder metadataBuilder = new MetadataMatchEntryBuilder();
+        metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
+        entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
+        MaskMatchEntryBuilder maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(EthDst.class);
+        entryBuilder.setHasMask(true);
+        MacAddressMatchEntryBuilder macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,5});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(EthSrc.class);
+        entryBuilder.setHasMask(true);
+        macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(EthType.class);
+        entryBuilder.setHasMask(false);
+        EthTypeMatchEntryBuilder ethBuilder = new EthTypeMatchEntryBuilder();
+        ethBuilder.setEthType(new EtherType(46));
+        entryBuilder.addAugmentation(EthTypeMatchEntry.class, ethBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(VlanVid.class);
+        entryBuilder.setHasMask(true);
+        VlanVidMatchEntryBuilder vidBuilder = new VlanVidMatchEntryBuilder();
+        vidBuilder.setCfiBit(true);
+        vidBuilder.setVlanVid(45);
+        entryBuilder.addAugmentation(VlanVidMatchEntry.class, vidBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,9});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(VlanPcp.class);
+        entryBuilder.setHasMask(false);
+        VlanPcpMatchEntryBuilder pcpBuilder = new VlanPcpMatchEntryBuilder();
+        pcpBuilder.setVlanPcp((short) 14);
+        entryBuilder.addAugmentation(VlanPcpMatchEntry.class, pcpBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(IpDscp.class);
+        entryBuilder.setHasMask(false);
+        DscpMatchEntryBuilder dscpBuilder = new DscpMatchEntryBuilder();
+        dscpBuilder.setDscp(new Dscp((short) 48));
+        entryBuilder.addAugmentation(DscpMatchEntry.class, dscpBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(IpEcn.class);
+        entryBuilder.setHasMask(false);
+        EcnMatchEntryBuilder ecnBuilder = new EcnMatchEntryBuilder();
+        ecnBuilder.setEcn((short) 49);
+        entryBuilder.addAugmentation(EcnMatchEntry.class, ecnBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(IpProto.class);
+        entryBuilder.setHasMask(false);
+        ProtocolNumberMatchEntryBuilder protoBuilder = new ProtocolNumberMatchEntryBuilder();
+        protoBuilder.setProtocolNumber((short) 50);
+        entryBuilder.addAugmentation(ProtocolNumberMatchEntry.class, protoBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv4Src.class);
+        entryBuilder.setHasMask(true);
+        Ipv4AddressMatchEntryBuilder ipv4Builder = new Ipv4AddressMatchEntryBuilder();
+        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.1"));
+        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,14});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv4Dst.class);
+        entryBuilder.setHasMask(true);
+        ipv4Builder = new Ipv4AddressMatchEntryBuilder();
+        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.2"));
+        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,15});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(TcpSrc.class);
+        entryBuilder.setHasMask(false);
+        PortMatchEntryBuilder portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6653));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(TcpDst.class);
+        entryBuilder.setHasMask(false);
+        portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6654));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(UdpSrc.class);
+        entryBuilder.setHasMask(false);
+        portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6655));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(UdpDst.class);
+        entryBuilder.setHasMask(false);
+        portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6656));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(SctpSrc.class);
+        entryBuilder.setHasMask(false);
+        portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6657));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(SctpDst.class);
+        entryBuilder.setHasMask(false);
+        portBuilder = new PortMatchEntryBuilder();
+        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params
+                .xml.ns.yang.ietf.inet.types.rev100924.PortNumber(6658));
+        entryBuilder.addAugmentation(PortMatchEntry.class, portBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Icmpv4Type.class);
+        entryBuilder.setHasMask(false);
+        Icmpv4TypeMatchEntryBuilder icmpv4typeBuilder = new Icmpv4TypeMatchEntryBuilder();
+        icmpv4typeBuilder.setIcmpv4Type((short) 51);
+        entryBuilder.addAugmentation(Icmpv4TypeMatchEntry.class, icmpv4typeBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Icmpv4Code.class);
+        entryBuilder.setHasMask(false);
+        Icmpv4CodeMatchEntryBuilder icmpv4CodeBuilder = new Icmpv4CodeMatchEntryBuilder();
+        icmpv4CodeBuilder.setIcmpv4Code((short) 52);
+        entryBuilder.addAugmentation(Icmpv4CodeMatchEntry.class, icmpv4CodeBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(ArpOp.class);
+        entryBuilder.setHasMask(false);
+        OpCodeMatchEntryBuilder opBuilder = new OpCodeMatchEntryBuilder();
+        opBuilder.setOpCode(53);
+        entryBuilder.addAugmentation(OpCodeMatchEntry.class, opBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(ArpSpa.class);
+        entryBuilder.setHasMask(true);
+        ipv4Builder = new Ipv4AddressMatchEntryBuilder();
+        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.4"));
+        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,16});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(ArpTpa.class);
+        entryBuilder.setHasMask(true);
+        ipv4Builder = new Ipv4AddressMatchEntryBuilder();
+        ipv4Builder.setIpv4Address(new Ipv4Address("10.0.0.5"));
+        entryBuilder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,17});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(ArpSha.class);
+        entryBuilder.setHasMask(true);
+        macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("00:01:02:03:04:05"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,4,0,0,6});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(ArpTha.class);
+        entryBuilder.setHasMask(true);
+        macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("00:00:00:00:00:03"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,6,0,0,4});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6Src.class);
+        entryBuilder.setHasMask(true);
+        Ipv6AddressMatchEntryBuilder ipv6Builder = new Ipv6AddressMatchEntryBuilder();
+        ipv6Builder.setIpv6Address(new Ipv6Address("0:0:0:0:0:0:0:1"));
+        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6Dst.class);
+        entryBuilder.setHasMask(true);
+        ipv6Builder = new Ipv6AddressMatchEntryBuilder();
+        ipv6Builder.setIpv6Address(new Ipv6Address("0:0:1:0:1:0:0:1"));
+        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6Flabel.class);
+        entryBuilder.setHasMask(true);
+        Ipv6FlabelMatchEntryBuilder flabelBuilder = new Ipv6FlabelMatchEntryBuilder();
+        flabelBuilder.setIpv6Flabel(new Ipv6FlowLabel(58L));
+        entryBuilder.addAugmentation(Ipv6FlabelMatchEntry.class, flabelBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,1,0,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Icmpv6Type.class);
+        entryBuilder.setHasMask(false);
+        Icmpv6TypeMatchEntryBuilder icmpv6TypeBuilder = new Icmpv6TypeMatchEntryBuilder();
+        icmpv6TypeBuilder.setIcmpv6Type((short) 59);
+        entryBuilder.addAugmentation(Icmpv6TypeMatchEntry.class, icmpv6TypeBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Icmpv6Code.class);
+        entryBuilder.setHasMask(false);
+        Icmpv6CodeMatchEntryBuilder icmpv6CodeBuilder = new Icmpv6CodeMatchEntryBuilder();
+        icmpv6CodeBuilder.setIcmpv6Code((short) 60);
+        entryBuilder.addAugmentation(Icmpv6CodeMatchEntry.class, icmpv6CodeBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6NdTarget.class);
+        entryBuilder.setHasMask(false);
+        ipv6Builder = new Ipv6AddressMatchEntryBuilder();
+        ipv6Builder.setIpv6Address(new Ipv6Address("F:0:0::0:0:0:1"));
+        entryBuilder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6Builder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6NdSll.class);
+        entryBuilder.setHasMask(false);
+        macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("01:00:03:00:00:06"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6NdTll.class);
+        entryBuilder.setHasMask(false);
+        macBuilder = new MacAddressMatchEntryBuilder();
+        macBuilder.setMacAddress(new MacAddress("04:00:02:00:00:08"));
+        entryBuilder.addAugmentation(MacAddressMatchEntry.class, macBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(MplsLabel.class);
+        entryBuilder.setHasMask(false);
+        MplsLabelMatchEntryBuilder labelBuilder = new MplsLabelMatchEntryBuilder();
+        labelBuilder.setMplsLabel(61L);
+        entryBuilder.addAugmentation(MplsLabelMatchEntry.class, labelBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(MplsTc.class);
+        entryBuilder.setHasMask(false);
+        TcMatchEntryBuilder tcBuilder = new TcMatchEntryBuilder();
+        tcBuilder.setTc((short) 62);
+        entryBuilder.addAugmentation(TcMatchEntry.class, tcBuilder.build());
+        entries.add(entryBuilder.build());
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(MplsBos.class);
+        entryBuilder.setHasMask(false);
+        BosMatchEntryBuilder bosBuilder = new BosMatchEntryBuilder();
+        bosBuilder.setBos(true);
+        entryBuilder.addAugmentation(BosMatchEntry.class, bosBuilder.build());
+        entries.add(entryBuilder.build());
+        
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(PbbIsid.class);
+        entryBuilder.setHasMask(true);
+        IsidMatchEntryBuilder isidBuilder = new IsidMatchEntryBuilder();
+        isidBuilder.setIsid(64L);
+        entryBuilder.addAugmentation(IsidMatchEntry.class, isidBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,1,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(TunnelId.class);
+        entryBuilder.setHasMask(true);
+        metadataBuilder = new MetadataMatchEntryBuilder();
+        metadataBuilder.setMetadata(new byte[]{0,0,0,0,0,0,0,1});
+        entryBuilder.addAugmentation(MetadataMatchEntry.class, metadataBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,0,0,0,0,0,0,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        
+        entryBuilder = new MatchEntriesBuilder();
+        entryBuilder.setOxmClass(OpenflowBasicClass.class);
+        entryBuilder.setOxmMatchField(Ipv6Exthdr.class);
+        entryBuilder.setHasMask(true);
+        PseudoFieldMatchEntryBuilder pseudoBuilder = new PseudoFieldMatchEntryBuilder();
+        pseudoBuilder.setPseudoField(new Ipv6ExthdrFlags(true, false, true, false, true, false, true, false, true));
+        entryBuilder.addAugmentation(PseudoFieldMatchEntry.class, pseudoBuilder.build());
+        maskBuilder = new MaskMatchEntryBuilder();
+        maskBuilder.setMask(new byte[]{0,2});
+        entryBuilder.addAugmentation(MaskMatchEntry.class, maskBuilder.build());
+        entries.add(entryBuilder.build());
+        
+        
+        
+        builder.setMatchEntries(entries);
+        Match match = builder.build();
+        
+        ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+        matchSerializer.serialize(match, out);
+        
+        Assert.assertEquals("Wrong match type", 1, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match length", 428, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 0, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 42, out.readUnsignedInt());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 43, out.readUnsignedInt());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 5, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
+        Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 7, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
+        byte[] array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,5}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 9, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,0,0,2}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 10, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 46, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 13, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 4141, out.readUnsignedShort());
+        array = new byte[2];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,9}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 14, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 14, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 16, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 48, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 18, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 49, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 20, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 50, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 23, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,1}, array);
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,14}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 25, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,2}, array);
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,15}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 26, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6653, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 28, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6654, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 30, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6655, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 32, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6656, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 34, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6657, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 36, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 6658, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 38, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 51, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 40, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 52, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 42, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 2, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 53, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 45, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,4}, array);
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,16}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 47, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{10,0,0,5}, array);
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,0,17}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 49, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,1,2,3,4,5}, array);
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,4,0,0,6}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 51, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 12, out.readUnsignedByte());
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,0,0,0,0,3}, array);
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,0,6,0,0,4}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 53, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
+        array = new byte[16];
+        out.readBytes(array);
+        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);
+        array = new byte[16];
+        out.readBytes(array);
+        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);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 55, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 32, out.readUnsignedByte());
+        array = new byte[16];
+        out.readBytes(array);
+        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);
+        array = new byte[16];
+        out.readBytes(array);
+        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);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 57, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 8, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 58, out.readUnsignedInt());
+        array = new byte[4];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,0,2}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 58, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 59, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 60, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 60, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 62, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
+        array = new byte[16];
+        out.readBytes(array);
+        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);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 64, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{1,0,3,0,0,6}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 66, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
+        array = new byte[6];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{4,0,2,0,0,8}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 68, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 61, out.readUnsignedInt());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 70, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 62, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 72, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 1, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 75, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 6, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 64, out.readUnsignedMedium());
+        array = new byte[3];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry mask", new byte[]{0,1,2}, array);
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 77, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 16, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 1L, out.readLong());
+        Assert.assertEquals("Wrong match entry mask", 2L, out.readLong());
+        Assert.assertEquals("Wrong match entry class", 0x8000, out.readUnsignedShort());
+        Assert.assertEquals("Wrong match entry field & hasMask", 79, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry length", 4, out.readUnsignedByte());
+        Assert.assertEquals("Wrong match entry value", 358, out.readUnsignedShort());
+        array = new byte[2];
+        out.readBytes(array);
+        Assert.assertArrayEquals("Wrong match entry value", new byte[]{0,2}, array);
+        Assert.assertTrue("Wrong padding", out.readableBytes() == 4);
+    }
+
+}