Increased unit test coverage for the rest of deserialization factories
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MultipartReplyMessageFactoryTest.java
index b37d51b350c9150a8661965833b2e9ea7183e810..11322641c7ac7087cb9035955601f77c9e3693dc 100644 (file)
@@ -13,10 +13,14 @@ import io.netty.buffer.ByteBuf;
 import java.math.BigInteger;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
-import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-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.EthertypeAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
@@ -42,46 +46,29 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
 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.protocol.rev130731.MultipartReplyMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfigCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDesc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.MultipartReplyMeterConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeatures;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.desc._case.MultipartReplyPortDesc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTable;
@@ -94,6 +81,19 @@ import org.slf4j.LoggerFactory;
  */
 public class MultipartReplyMessageFactoryTest {
 
+    private OFDeserializer<MultipartReplyMessage> multipartFactory;
+
+    /**
+     * Initializes deserializer registry and lookups correct deserializer
+     */
+    @Before
+    public void startUp() {
+        DeserializerRegistry registry = new DeserializerRegistryImpl();
+        registry.init();
+        multipartFactory = registry.getDeserializer(
+                new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 19, MultipartReplyMessage.class));
+    }
+
     private static final Logger LOGGER = LoggerFactory
             .getLogger(MultipartReplyMessageFactoryTest.class);
     
@@ -110,33 +110,33 @@ public class MultipartReplyMessageFactoryTest {
         byte[] mfrDescBytes = new byte[256];
         mfrDescBytes = mfrDesc.getBytes();
         bb.writeBytes(mfrDescBytes);
-        ByteBufUtils.padBuffer((DESC_STR_LEN - mfrDescBytes.length), bb);
+        bb.writeZero(DESC_STR_LEN - mfrDescBytes.length);
         
         String hwDesc = "Hardware description";
         byte[] hwDescBytes = new byte[256];
         hwDescBytes = hwDesc.getBytes();
         bb.writeBytes(hwDescBytes);
-        ByteBufUtils.padBuffer((DESC_STR_LEN - hwDescBytes.length), bb);
+        bb.writeZero(DESC_STR_LEN - hwDescBytes.length);
         
         String swDesc = "Software description";
         byte[] swDescBytes = new byte[256];
         swDescBytes = swDesc.getBytes();
         bb.writeBytes(swDescBytes);
-        ByteBufUtils.padBuffer((DESC_STR_LEN - swDescBytes.length), bb);
+        bb.writeZero(DESC_STR_LEN - swDescBytes.length);
         
         String serialNum = "SN0123456789";
         byte[] serialNumBytes = new byte[32];
         serialNumBytes = serialNum.getBytes();
         bb.writeBytes(serialNumBytes);
-        ByteBufUtils.padBuffer((SERIAL_NUM_LEN - serialNumBytes.length), bb);
+        bb.writeZero(SERIAL_NUM_LEN - serialNumBytes.length);
         
         String dpDesc = "switch3 in room 3120";
         byte[] dpDescBytes = new byte[256];
         dpDescBytes = dpDesc.getBytes();
         bb.writeBytes(dpDescBytes);
-        ByteBufUtils.padBuffer((DESC_STR_LEN - dpDescBytes.length), bb);
+        bb.writeZero(DESC_STR_LEN - dpDescBytes.length);
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x00, builtByFactory.getType().getIntValue());
@@ -149,74 +149,7 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong serialNum", "SN0123456789", message.getSerialNum());
         Assert.assertEquals("Wrong dpDesc", "switch3 in room 3120", message.getDpDesc());
     }
-    
-    /**
-     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
-     */
-    @Test
-    public void testMultipartReplyFlowBody(){
-        ByteBuf bb = BufferHelper.buildBuffer("00 01 00 01 00 00 00 00 "+
-                                              "00 48 "+//length
-                                              "08 "+//tableId
-                                              "00 "+//pad_01
-                                              "00 00 00 09 "+//durationSec
-                                              "00 00 00 07 "+//durationNsec
-                                              "00 0C "+//priority
-                                              "00 0E "+//idleTimeout
-                                              "00 0F "+//hardTimeout
-                                              "00 0B "+//flags
-                                              "00 00 00 00 "+//pad_02
-                                              "FF 01 01 01 01 01 01 01 "+//cookie
-                                              "EF 01 01 01 01 01 01 01 "+//packetCount
-                                              "7F 01 01 01 01 01 01 01 "+//byteCount
-                                              "00 01 00 04 00 00 00 00 "+//empty match
-                                              "00 01 00 08 06 00 00 00 "+
-                                              "00 01 00 08 06 00 00 00 "+
-                                              "00 48 "+//length
-                                              "08 "+//tableId
-                                              "00 "+//pad_01
-                                              "00 00 00 09 "+//durationSec
-                                              "00 00 00 07 "+//durationNsec
-                                              "00 0C "+//priority
-                                              "00 0E "+//idleTimeout
-                                              "00 0F "+//hardTimeout
-                                              "00 0B "+//flags
-                                              "00 00 00 00 "+//pad_02
-                                              "FF 01 01 01 01 01 01 01 "+//cookie
-                                              "EF 01 01 01 01 01 01 01 "+//packetCount
-                                              "7F 01 01 01 01 01 01 01 "+//byteCount
-                                              "00 01 00 04 00 00 00 00 "+//empty match
-                                              "00 01 00 08 06 00 00 00 "+
-                                              "00 01 00 08 06 00 00 00");
-        
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
-        
-        BufferHelper.checkHeaderV13(builtByFactory);
-        Assert.assertEquals("Wrong type", 0x01, builtByFactory.getType().getIntValue());
-        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
-        MultipartReplyFlowCase messageCase = (MultipartReplyFlowCase) builtByFactory.getMultipartReplyBody();
-        MultipartReplyFlow message = messageCase.getMultipartReplyFlow();
-        FlowStats flowStats1 = message.getFlowStats().get(0);
-        Assert.assertEquals("Wrong tableId", 8, flowStats1.getTableId().intValue());
-        Assert.assertEquals("Wrong durationSec", 9, flowStats1.getDurationSec().intValue());
-        Assert.assertEquals("Wrong durationNsec", 7, flowStats1.getDurationNsec().intValue());
-        Assert.assertEquals("Wrong priority", 12, flowStats1.getPriority().intValue());
-        Assert.assertEquals("Wrong idleTimeOut", 14, flowStats1.getIdleTimeout().intValue());
-        Assert.assertEquals("Wrong hardTimeOut", 15, flowStats1.getHardTimeout().intValue());
-        Assert.assertEquals("Wrong flags", new FlowModFlags(true, false, true, false, true), 
-                flowStats1.getFlags());
-        Assert.assertEquals("Wrong cookie", 
-                new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), 
-                flowStats1.getCookie());
-        Assert.assertEquals("Wrong packetCount", 
-                new BigInteger(1, new byte[]{(byte) 0xEF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), 
-                flowStats1.getPacketCount());
-        Assert.assertEquals("Wrong byteCount", 
-                new BigInteger(1, new byte[]{(byte) 0x7F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), 
-                flowStats1.getByteCount());
-        Assert.assertEquals("Wrong match type", OxmMatchType.class, flowStats1.getMatch().getType());
-    }
-    
+
     /**
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
      */
@@ -229,7 +162,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 00"//pad
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x02, builtByFactory.getType().getIntValue());
@@ -260,7 +193,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "AF 01 01 01 01 01 01 01"//matchedCount
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x03, builtByFactory.getType().getIntValue());
@@ -302,7 +235,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 04"//durationNsec
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x04, builtByFactory.getType().getIntValue());
@@ -365,7 +298,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 04"//durationNsec
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x05, builtByFactory.getType().getIntValue());
@@ -421,7 +354,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "FF 02 02 02 02 02 02 02"//byteCountBucket_2.2
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 0x06, builtByFactory.getType().getIntValue());
@@ -474,36 +407,7 @@ public class MultipartReplyMessageFactoryTest {
                 new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), 
                 message.getGroupStats().get(1).getBucketStats().get(1).getByteCount());
     }
-    
-    /**
-     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
-     */
-    @Test
-    public void testMultipartReplyMeterFeaturesBody(){
-        ByteBuf bb = BufferHelper.buildBuffer("00 0B 00 01 00 00 00 00 "+
-                                              "00 00 00 09 "+//maxMeter
-                                              "00 00 00 01 "+//bandTypes
-                                              "00 00 00 03 "+//capabilities
-                                              "03 "+//maxBands
-                                              "04 "+//maxColor
-                                              "00 00"//pad
-                                              );
-        
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
-        
-        BufferHelper.checkHeaderV13(builtByFactory);
-        Assert.assertEquals("Wrong type", 11, builtByFactory.getType().getIntValue());
-        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
-        MultipartReplyMeterFeaturesCase messageCase = (MultipartReplyMeterFeaturesCase) builtByFactory.getMultipartReplyBody();
-        MultipartReplyMeterFeatures message = messageCase.getMultipartReplyMeterFeatures();        
-        Assert.assertEquals("Wrong maxMeter", 9, message.getMaxMeter().intValue());
-        Assert.assertEquals("Wrong bandTypes", new MeterBandTypeBitmap(true, false), message.getBandTypes());
-        Assert.assertEquals("Wrong capabilities", new MeterFlags(false, true, true, false), 
-                                                      message.getCapabilities());
-        Assert.assertEquals("Wrong maxBands", 3, message.getMaxBands().intValue());
-        Assert.assertEquals("Wrong maxColor", 4, message.getMaxColor().intValue());
-    }
-    
+
     /**
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
      */
@@ -526,7 +430,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "FF 03 03 03 03 03 03 03"//byteBandCount_03
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());
@@ -603,7 +507,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "FF 03 03 03 03 03 03 03"//byteBandCount_13
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());
@@ -683,7 +587,7 @@ public class MultipartReplyMessageFactoryTest {
     @Test
     public void testMultipartReplyMeterConfigBody(){
         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
-                                              "00 38 "+//len
+                                              "00 28 "+//len
                                               "00 0A "+//flags
                                               "00 00 00 09 "+//meterId
                                               "00 01 "+//meterBandDrop.type
@@ -696,15 +600,9 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 11 "+//meterBandDscp.rate
                                               "00 00 00 20 "+//meterBandDscp.burstSize
                                               "04 "+//meterBandDscp.precLevel
-                                              "00 00 00 "+//meterBandDscp.pad
-                                              "FF FF "+//meterBandExperimenter.type
-                                              "00 10 "+//meterBandExperimenter.len
-                                              "00 00 00 11 "+//meterBandExperimenter.rate
-                                              "00 00 00 20 "+//meterBandExperimenter.burstSize
-                                              "00 00 00 04"//meterBandExperimenter.experimenter
-                                              );
+                                              "00 00 00");//meterBandDscp.pad
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());
@@ -728,13 +626,6 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());
         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
-        
-        MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); 
-        MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
-        Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); 
-        Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
     }
     
     /**
@@ -743,7 +634,7 @@ public class MultipartReplyMessageFactoryTest {
     @Test
     public void testMultipartReplyMeterConfigBodyMulti(){
         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
-                                              "00 38 "+//len
+                                              "00 28 "+//len
                                               "00 06 "+//flags
                                               "00 00 00 09 "+//meterId
                                               "00 01 "+//meterBandDrop.type
@@ -757,11 +648,6 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 20 "+//meterBandDscp.burstSize
                                               "04 "+//meterBandDscp.precLevel
                                               "00 00 00 "+//meterBandDscp.pad
-                                              "FF FF "+//meterBandExperimenter.type
-                                              "00 10 "+//meterBandExperimenter.len
-                                              "00 00 00 11 "+//meterBandExperimenter.rate
-                                              "00 00 00 20 "+//meterBandExperimenter.burstSize
-                                              "00 00 00 04 "+//meterBandExperimenter.experimenter
                                               
                                               "00 18 "+//len01
                                               "00 03 "+//flags01
@@ -774,7 +660,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00"//meterBandDscp01.pad
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());
@@ -799,13 +685,6 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
         
-        MeterBandExperimenterCase experimenterCase = (MeterBandExperimenterCase) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); 
-        MeterBandExperimenter meterBandExperimenter = experimenterCase.getMeterBandExperimenter();
-        Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); 
-        Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());
-        Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());
-        
         LOGGER.info(message.getMeterConfig().get(0).getFlags().toString());
         Assert.assertEquals("Wrong flags01", new MeterFlags(false, true, true, false),
                              message.getMeterConfig().get(1).getFlags());
@@ -820,103 +699,7 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong meterBandDscp01.precLevel", 4, meterBandDscp01.getPrecLevel().intValue());
         
     }
-    
-    /**
-     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
-     */
-    @Test
-    public void testMultipartReplyExperimenterBody(){
-        ByteBuf bb = BufferHelper.buildBuffer("FF FF 00 01 00 00 00 00 "+
-                                              "00 00 00 0F "+//experimenterId
-                                              "00 00 00 FF "+//expType
-                                              "00 00 01 01 00 00 01 01"
-                                              );
-        
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
-        
-        BufferHelper.checkHeaderV13(builtByFactory);
-        Assert.assertEquals("Wrong type", 0xFFFF, builtByFactory.getType().getIntValue());
-        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
-        MultipartReplyExperimenterCase messageCase = (MultipartReplyExperimenterCase) builtByFactory.getMultipartReplyBody();
-        MultipartReplyExperimenter message = messageCase.getMultipartReplyExperimenter();        
-        Assert.assertEquals("Wrong experimenterId", 15, message.getExperimenter().intValue());
-        Assert.assertEquals("Wrong expType", 255, message.getExpType().intValue());
-        Assert.assertArrayEquals("Wrong data", new byte[]{0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}, 
-                             message.getData());
-    }
-    
-    /**
-     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
-     */
-    @Test
-    public void testMultipartReplyPortDescBody(){
-        final byte MAX_PORT_NAME_LEN = 16;
-        ByteBuf bb = BufferHelper.buildBuffer("00 0D 00 01 00 00 00 00 "+
-                                              "00 01 02 03 "+ //portNo
-                                              "00 00 00 00 "+ //padding01
-                                              "08 00 27 00 B0 EB " + //mac address
-                                              "00 00 "); //padding02
-        //port name
-        String portName = "SampleText";
-        byte[] portNameBytes = new byte[MAX_PORT_NAME_LEN];
-        portNameBytes = portName.getBytes();
-        bb.writeBytes(portNameBytes);
-        ByteBufUtils.padBuffer((MAX_PORT_NAME_LEN - portNameBytes.length), bb);
-        
-        ByteBuf bb2 =  BufferHelper.buildBuffer("00 00 00 41 " + //port config
-                                                "00 00 00 05 " + //port state
-                                                "00 00 00 81 " + //current features
-                                                "00 00 81 81 " + //advertised features
-                                                "00 00 C1 89 " + //supported features
-                                                "00 00 C5 8D " + //peer features
-                                                "00 00 00 81 " + //curr speed
-                                                "00 00 00 80" //max speed
-                                                );
-        bb.writeBytes(bb2.copy(4, bb2.readableBytes()-4));//excluding version and xid
-        
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
-        
-        BufferHelper.checkHeaderV13(builtByFactory);
-        Assert.assertEquals("Wrong type", 13, builtByFactory.getType().getIntValue());
-        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
-        MultipartReplyPortDescCase messageCase = (MultipartReplyPortDescCase) builtByFactory.getMultipartReplyBody();
-        MultipartReplyPortDesc message = messageCase.getMultipartReplyPortDesc();
-        Assert.assertEquals("Wrong portNo", 66051L, message.getPorts().get(0).getPortNo().longValue());
-        Assert.assertEquals("Wrong macAddress", new MacAddress("08:00:27:00:B0:EB"), 
-                                                message.getPorts().get(0).getHwAddr());
-        Assert.assertEquals("Wrong portName", "SampleText", 
-                                                message.getPorts().get(0).getName());
-        Assert.assertEquals("Wrong portConfig", new PortConfig(false, true, false, true), 
-                message.getPorts().get(0).getConfig());
-        Assert.assertEquals("Wrong portState", new PortState(false, true, true),
-                                               message.getPorts().get(0).getState());
-        Assert.assertEquals("Wrong currentFeatures", new PortFeatures(false, false, false, false,
-                                                                      false, true, false, false, 
-                                                                      false, true, false, false, 
-                                                                      false, false, false, false), 
-                                                  message.getPorts().get(0).getCurrentFeatures());
-        Assert.assertEquals("Wrong advertisedFeatures", 
-                                            new PortFeatures(true, false, false, false,
-                                                            false, true, false, false, 
-                                                            false, true, false, false, 
-                                                            false, false, false, true), 
-                                              message.getPorts().get(0).getAdvertisedFeatures());
-        Assert.assertEquals("Wrong supportedFeatures", 
-                                            new PortFeatures(true, true, false, false,
-                                                            false, true, false, false, 
-                                                            false, true, false, false, 
-                                                            false, false, true, true), 
-                                              message.getPorts().get(0).getSupportedFeatures());
-        Assert.assertEquals("Wrong peerFeatures", 
-                                            new PortFeatures(true, true, true, false,
-                                                    false, true, false, false, 
-                                                    false, true, false, false, 
-                                                    false, true, true, true), 
-                                              message.getPorts().get(0).getPeerFeatures());
-        Assert.assertEquals("Wrong currSpeed", 129L, message.getPorts().get(0).getCurrSpeed().longValue());
-        Assert.assertEquals("Wrong maxSpeed", 128L, message.getPorts().get(0).getMaxSpeed().longValue());
-    }
-    
+
     /**
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
      * Test covers bodies of actions Output, Copy TTL Out, Copy TTL In
@@ -945,7 +728,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 08 "+//copyTTLIntLen
                                               "00 00 00 00"//copyTTLInPad
                                               );
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
@@ -965,26 +748,26 @@ public class MultipartReplyMessageFactoryTest {
                 message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
         
         Assert.assertEquals("Wrong outputType", Output.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getType());
         
         Assert.assertEquals("Wrong outputPort", 4351, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getAugmentation(PortAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getAugmentation(PortAction.class).
                 getPort().getValue().intValue());
         
         Assert.assertEquals("Wrong outputMaxLen", 65535, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getAugmentation(MaxLengthAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getAugmentation(MaxLengthAction.class).
                 getMaxLength().intValue());
         
         Assert.assertEquals("Wrong copyTtlOutType", CopyTtlOut.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getType());
         
         Assert.assertEquals("Wrong copyTtlInType", CopyTtlIn.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(2)
+                .getType());
     }
     
     /**
@@ -1024,7 +807,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00"//pushPbbPad
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
@@ -1042,35 +825,35 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong bucketWatchGroup", 4, 
                 message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
         Assert.assertEquals("Wrong setMplsTtlType", SetMplsTtl.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getType());
         Assert.assertEquals("Wrong setMplsTtlMPLS_TTL", 9, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getAugmentation(MplsTtlAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getAugmentation(MplsTtlAction.class).
                 getMplsTtl().intValue());
         Assert.assertEquals("Wrong decMplsTtlType", DecMplsTtl.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getType());
         Assert.assertEquals("Wrong pushVlanType", PushVlan.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(2)
+                .getType());
         Assert.assertEquals("Wrong pushVlanEthertype", 32, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).
-                getAction().getAugmentation(EthertypeAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(2)
+                .getAugmentation(EthertypeAction.class).
                 getEthertype().getValue().intValue());
         Assert.assertEquals("Wrong pushMplsType", PushMpls.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(3)
+                .getType());
         Assert.assertEquals("Wrong pushMplsEthertype", 255, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).
-                getAction().getAugmentation(EthertypeAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(3).
+                getAugmentation(EthertypeAction.class).
                 getEthertype().getValue().intValue());
         Assert.assertEquals("Wrong pushPbbType", PushPbb.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(4)
+                .getType());
         Assert.assertEquals("Wrong pushPbbEthertype", 4095, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).
-                getAction().getAugmentation(EthertypeAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(4)
+                .getAugmentation(EthertypeAction.class).
                 getEthertype().getValue().intValue());
     }
     
@@ -1111,7 +894,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 00"//decNwTtlPad
                                               );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
@@ -1127,35 +910,35 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong bucketWatchGroup", 4, 
                 message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
         Assert.assertEquals("Wrong popVlanType", PopVlan.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getType());
         Assert.assertEquals("Wrong popPbbType", PopPbb.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getType());
         Assert.assertEquals("Wrong popMplsType", PopMpls.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(2)
+                .getType());
         Assert.assertEquals("Wrong popMplsEthertype", 207, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).
-                getAction().getAugmentation(EthertypeAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(2)
+                .getAugmentation(EthertypeAction.class).
                 getEthertype().getValue().intValue());
         Assert.assertEquals("Wrong setQueueType", SetQueue.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(3)
+                .getType());
         Assert.assertEquals("Wrong setQueueQueueId", 13565952, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).
-                getAction().getAugmentation(QueueIdAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(3)
+                .getAugmentation(QueueIdAction.class).
                 getQueueId().intValue());
         Assert.assertEquals("Wrong groupType", Group.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(4)
+                .getType());
         Assert.assertEquals("Wrong groupGroupId", 13565952, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).
-                getAction().getAugmentation(GroupIdAction.class).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(4)
+                .getAugmentation(GroupIdAction.class).
                 getGroupId().intValue());
         Assert.assertEquals("Wrong decNwTtlType", DecNwTtl.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(5).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(5)
+                .getType());
     }
     
     /**
@@ -1187,7 +970,7 @@ public class MultipartReplyMessageFactoryTest {
                                               "00 00 00 00"
                 );
         
-        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);
+        MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
         
         BufferHelper.checkHeaderV13(builtByFactory);
         Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
@@ -1207,28 +990,28 @@ public class MultipartReplyMessageFactoryTest {
                 message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
         
         Assert.assertEquals("Wrong nwTTlType", SetNwTtl.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getType());
         
         Assert.assertEquals("Wrong nwTTlnwTTL", 14, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).
-                getAction().getAugmentation(NwTtlAction.class).getNwTtl().intValue());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(0)
+                .getAugmentation(NwTtlAction.class).getNwTtl().intValue());
         
         Assert.assertEquals("Wrong setFieldType", SetField.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getType());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getType());
         
         Assert.assertEquals("Wrong setFieldOXMClass", OpenflowBasicClass.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmClass());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmClass());
         
         Assert.assertEquals("Wrong setFieldOXMField", InPort.class, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmMatchField());
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmMatchField());
         
         Assert.assertEquals("Wrong setFieldOXMValue", 255, 
-                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).
-                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).
+                message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+                .getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).
                 getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue().intValue());
     }
 }