multipart reply message updated
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MultipartReplyMessageFactoryTest.java
index af700bbba83467e99733d71ff6e6c37b253728f8..e96b05b8b13930efc2adebe0ae4dd33468c07cb7 100644 (file)
@@ -10,11 +10,41 @@ import org.junit.Test;
 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\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.EthertypeAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MplsTtlAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NwTtlAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;\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.QueueIdAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Experimenter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;\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.OpenflowBasicClass;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDrop;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemark;\r
@@ -24,6 +54,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlow;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroup;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDesc;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeter;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfig;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeatures;\r
@@ -40,7 +71,7 @@ public class MultipartReplyMessageFactoryTest {
 \r
     /**\r
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
-     */\r
+     *//*\r
     @Test\r
     public void test(){\r
         ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 01 02 03 04");\r
@@ -51,7 +82,7 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong type", 0x07, builtByFactory.getType().getIntValue());\r
         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
         //Assert.assertArrayEquals("Wrong body", new byte[]{0x01, 0x02, 0x03, 0x04}, builtByFactory.getBody());\r
-    }\r
+    }*/\r
     \r
     /**\r
      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
@@ -847,4 +878,377 @@ public class MultipartReplyMessageFactoryTest {
         Assert.assertEquals("Wrong currSpeed", 129L, message.getPorts().get(0).getCurrSpeed().longValue());\r
         Assert.assertEquals("Wrong maxSpeed", 128L, message.getPorts().get(0).getMaxSpeed().longValue());\r
     }\r
+    \r
+    /**\r
+     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
+     * Test covers bodies of actions Output, Copy TTL Out, Copy TTL In\r
+     */\r
+    @Test\r
+    public void testMultipartReplyGroupDescBody01(){\r
+        ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+\r
+                                              "00 38 "+//len\r
+                                              "01 "+//type\r
+                                              "00 "+//pad\r
+                                              "00 00 00 08 "+//groupId\r
+                                              "00 30 "+//bucketLen\r
+                                              "00 06 "+//bucketWeight\r
+                                              "00 00 00 05 "+//bucketWatchPort\r
+                                              "00 00 00 04 "+//bucketWatchGroup\r
+                                              "00 00 00 00 "+//bucketPad\r
+                                              "00 00 "+//outputType\r
+                                              "00 10 "+//outputLen\r
+                                              "00 00 10 FF "+//outputPort\r
+                                              "FF FF "+//outputMaxLen\r
+                                              "00 00 00 00 00 00 "+//outputPad\r
+                                              "00 0B "+//copyTTLOutType\r
+                                              "00 08 "+//copyTTLOutLen\r
+                                              "00 00 00 00 "+//copyTTLOutPad\r
+                                              "00 0C "+//copyTTLIntType\r
+                                              "00 08 "+//copyTTLIntLen\r
+                                              "00 00 00 00"//copyTTLInPad\r
+                                              );\r
+        \r
+        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
+        \r
+        BufferHelper.checkHeaderV13(builtByFactory);\r
+        Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());\r
+        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
+        \r
+        MultipartReplyGroupDesc message = (MultipartReplyGroupDesc) builtByFactory.getMultipartReplyBody();\r
+        \r
+        Assert.assertEquals("Wrong type", 1, \r
+                             message.getGroupDesc().get(0).getType().getIntValue());\r
+        Assert.assertEquals("Wrong groupId", 8, \r
+                             message.getGroupDesc().get(0).getGroupId().intValue());\r
+        Assert.assertEquals("Wrong bucketWeight", 6, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchPort", 5, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().\r
+                                                                        getValue().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchGroup", 4, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());\r
+        \r
+        Assert.assertEquals("Wrong outputType", Output.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong outputPort", 4351, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getAugmentation(PortAction.class).\r
+                getPort().getPortNumber().getValue().intValue());\r
+        \r
+        Assert.assertEquals("Wrong outputMaxLen", 65535, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getAugmentation(MaxLengthAction.class).\r
+                getMaxLength().intValue());\r
+        \r
+        Assert.assertEquals("Wrong copyTtlOutType", CopyTtlOut.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong copyTtlInType", CopyTtlIn.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getType());\r
+    }\r
+    \r
+    /**\r
+     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
+     * Test covers bodies of actions Set MPLS TTL , Dec MPLS TTL, Push VLAN. Push MPLS, Push PBB\r
+     */\r
+    @Test\r
+    public void testMultipartReplyGroupDescBody02(){\r
+        ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+\r
+                                              "00 40 "+//len\r
+                                              "01 "+//type\r
+                                              "00 "+//pad\r
+                                              "00 00 00 08 "+//groupId\r
+                                              "00 38 "+//bucketLen\r
+                                              "00 06 "+//bucketWeight\r
+                                              "00 00 00 05 "+//bucketWatchPort\r
+                                              "00 00 00 04 "+//bucketWatchGroup\r
+                                              "00 00 00 00 "+//bucketPad\r
+                                              "00 0F "+//setMplsTtlType\r
+                                              "00 08 "+//setMplsTtlLen\r
+                                              "09 "+//setMplsTtlMPLS_TTL\r
+                                              "00 00 00 "+//setMplsTtlPad\r
+                                              "00 10 "+//decMplsTtlType\r
+                                              "00 08 "+//decMplsTtlLen\r
+                                              "00 00 00 00 "+//decMplsTtlPad\r
+                                              "00 11 "+//pushVlanType\r
+                                              "00 08 "+//pushVlanLen\r
+                                              "00 20 "+//pushVlanEthertype\r
+                                              "00 00 "+//pushVlanPad\r
+                                              "00 13 "+//pushMplsType\r
+                                              "00 08 "+//pushMplsLen\r
+                                              "00 FF "+//pushMplsEthertype\r
+                                              "00 00 "+//pushMplsPad\r
+                                              "00 1A "+//pushPbbType\r
+                                              "00 08 "+//pushPbbLen\r
+                                              "0F FF "+//pushPbbEthertype\r
+                                              "00 00"//pushPbbPad\r
+                                              );\r
+        \r
+        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
+        \r
+        BufferHelper.checkHeaderV13(builtByFactory);\r
+        Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());\r
+        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
+        \r
+        MultipartReplyGroupDesc message = (MultipartReplyGroupDesc) builtByFactory.getMultipartReplyBody();\r
+        \r
+        Assert.assertEquals("Wrong type", 1, \r
+                             message.getGroupDesc().get(0).getType().getIntValue());\r
+        Assert.assertEquals("Wrong groupId", 8, \r
+                             message.getGroupDesc().get(0).getGroupId().intValue());\r
+        Assert.assertEquals("Wrong bucketWeight", 6, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchPort", 5, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().\r
+                                                                        getValue().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchGroup", 4, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());\r
+        \r
+        \r
+        Assert.assertEquals("Wrong setMplsTtlType", SetMplsTtl.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong setMplsTtlMPLS_TTL", 9, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getAugmentation(MplsTtlAction.class).\r
+                getMplsTtl().intValue());\r
+        \r
+        Assert.assertEquals("Wrong decMplsTtlType", DecMplsTtl.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong pushVlanType", PushVlan.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong pushVlanEthertype", 32, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(EthertypeAction.class).\r
+                getEthertype().getValue().intValue());\r
+        \r
+        Assert.assertEquals("Wrong pushMplsType", PushMpls.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong pushMplsEthertype", 255, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).\r
+                getAction().getAugmentation(EthertypeAction.class).\r
+                getEthertype().getValue().intValue());\r
+        \r
+        Assert.assertEquals("Wrong pushPbbType", PushPbb.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong pushPbbEthertype", 4095, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).\r
+                getAction().getAugmentation(EthertypeAction.class).\r
+                getEthertype().getValue().intValue());\r
+        \r
+    }\r
+    \r
+    /**\r
+     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
+     * Test covers bodies of actions Pop VLAN, Pop PBB, Pop MPLS, Group, Dec NW TTL\r
+     */\r
+    @Test\r
+    public void testMultipartReplyGroupDescBody03(){\r
+        ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+\r
+                                              "00 48 "+//len\r
+                                              "01 "+//type\r
+                                              "00 "+//pad\r
+                                              "00 00 00 08 "+//groupId\r
+                                              "00 40 "+//bucketLen\r
+                                              "00 06 "+//bucketWeight\r
+                                              "00 00 00 05 "+//bucketWatchPort\r
+                                              "00 00 00 04 "+//bucketWatchGroup\r
+                                              "00 00 00 00 "+//bucketPad\r
+                                              "00 12 "+//popVlanType\r
+                                              "00 08 "+//popVlanLen\r
+                                              "00 00 00 00 "+//popVlanPad\r
+                                              "00 1B "+//popPbbType\r
+                                              "00 08 "+//popPbbLen\r
+                                              "00 00 00 00 "+//popPbbPad\r
+                                              "00 14 "+//popMplsType\r
+                                              "00 08 "+//popMplsLen\r
+                                              "00 CF "+//popMplsEthertype\r
+                                              "00 00 "+//popMplsPad\r
+                                              "00 15 "+//setQueueType\r
+                                              "00 08 "+//setQueueLen\r
+                                              "00 CF 00 00 "+//setQueueQueueId\r
+                                              "00 16 "+//groupType\r
+                                              "00 08 "+//groupLen\r
+                                              "00 CF 00 00 "+//groupGroupId\r
+                                              "00 18 "+//decNwTtlType\r
+                                              "00 08 "+//decNwTtlLen\r
+                                              "00 00 00 00"//decNwTtlPad\r
+                                              );\r
+        \r
+        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
+        \r
+        BufferHelper.checkHeaderV13(builtByFactory);\r
+        Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());\r
+        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
+        \r
+        MultipartReplyGroupDesc message = (MultipartReplyGroupDesc) builtByFactory.getMultipartReplyBody();\r
+        \r
+        Assert.assertEquals("Wrong type", 1, \r
+                             message.getGroupDesc().get(0).getType().getIntValue());\r
+        Assert.assertEquals("Wrong groupId", 8, \r
+                             message.getGroupDesc().get(0).getGroupId().intValue());\r
+        Assert.assertEquals("Wrong bucketWeight", 6, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchPort", 5, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().\r
+                                                                        getValue().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchGroup", 4, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());\r
+        \r
+        Assert.assertEquals("Wrong popVlanType", PopVlan.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong popPbbType", PopPbb.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong popMplsType", PopMpls.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong popMplsEthertype", 207, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(EthertypeAction.class).\r
+                getEthertype().getValue().intValue());\r
+        \r
+        Assert.assertEquals("Wrong setQueueType", SetQueue.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong setQueueQueueId", 13565952, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(3).\r
+                getAction().getAugmentation(QueueIdAction.class).\r
+                getQueueId().intValue());\r
+        \r
+        Assert.assertEquals("Wrong groupType", Group.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong groupGroupId", 13565952, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(4).\r
+                getAction().getAugmentation(GroupIdAction.class).\r
+                getGroupId().intValue());\r
+        \r
+        Assert.assertEquals("Wrong decNwTtlType", DecNwTtl.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(5).\r
+                getAction().getType());\r
+    }\r
+    \r
+    /**\r
+     * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
+     * Test covers bodies of actions NW TTL, Experimenter\r
+     */\r
+    @Test\r
+    public void testMultipartReplyGroupDescBody04(){\r
+        ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+\r
+                                              "00 3C "+//len\r
+                                              "01 "+//type\r
+                                              "00 "+//pad\r
+                                              "00 00 00 08 "+//groupId\r
+                                              "00 34 "+//bucketLen\r
+                                              "00 06 "+//bucketWeight\r
+                                              "00 00 00 05 "+//bucketWatchPort\r
+                                              "00 00 00 04 "+//bucketWatchGroup\r
+                                              "00 00 00 00 "+//bucketPad\r
+                                              "00 17 "+//nwTTlType\r
+                                              "00 08 "+//nwTTlLen\r
+                                              "0E "+//nwTTlnwTTL\r
+                                              "00 00 00 "+//nwTTlPad\r
+                                              "FF FF "+//experimenterType\r
+                                              "00 08 "+//experimenterLen\r
+                                              "00 01 02 03 "+//experimenterExperimenter\r
+                                              "00 19 "+//setFieldType\r
+                                              "00 14 "+//setFieldLen\r
+                                              "80 00 "+//setFieldOXMClass\r
+                                              "00 "+//setFieldOXMField\r
+                                              "04 "+//setFieldOXMLength\r
+                                              "00 00 00 FF "+//setFieldPort\r
+                                              \r
+                                              "80 00 "+//setFieldOXMClass\r
+                                              "03 "+//setFieldOXMField\r
+                                              "04 "+//setFieldOXMLength\r
+                                              "00 00 0F FF"//setFieldPort\r
+                                              );\r
+        \r
+        MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
+        \r
+        BufferHelper.checkHeaderV13(builtByFactory);\r
+        Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());\r
+        Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
+        \r
+        MultipartReplyGroupDesc message = (MultipartReplyGroupDesc) builtByFactory.getMultipartReplyBody();\r
+        \r
+        Assert.assertEquals("Wrong type", 1, \r
+                             message.getGroupDesc().get(0).getType().getIntValue());\r
+        Assert.assertEquals("Wrong groupId", 8, \r
+                             message.getGroupDesc().get(0).getGroupId().intValue());\r
+        Assert.assertEquals("Wrong bucketWeight", 6, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchPort", 5, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().\r
+                                                                        getValue().intValue());\r
+        Assert.assertEquals("Wrong bucketWatchGroup", 4, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());\r
+        \r
+        Assert.assertEquals("Wrong nwTTlType", SetNwTtl.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong nwTTlnwTTL", 14, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(0).\r
+                getAction().getAugmentation(NwTtlAction.class).getNwTtl().intValue());\r
+        \r
+        Assert.assertEquals("Wrong experimenterType", Experimenter.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong experimenterExperimenter", 66051, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(1).\r
+                getAction().getAugmentation(ExperimenterAction.class).getExperimenter().intValue());\r
+        \r
+        Assert.assertEquals("Wrong setFieldType", SetField.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getType());\r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMClass", OpenflowBasicClass.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmClass());\r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMField", InPort.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).getOxmMatchField());\r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMField", 255, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0).\r
+                getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue().intValue());\r
+        \r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMClass", OpenflowBasicClass.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(1).getOxmClass());\r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMField", InPhyPort.class, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(1).getOxmMatchField());\r
+        \r
+        Assert.assertEquals("Wrong setFieldOXMField", 4095, \r
+                message.getGroupDesc().get(0).getBucketsList().get(0).getActionsList().get(2).\r
+                getAction().getAugmentation(OxmFieldsAction.class).getMatchEntries().get(1).\r
+                getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue().intValue());\r
+    }\r
 }\r