Merge "Bug 6110: Fixed bugs in statistics manager due to race condition." into stable...
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / common / MultipartRequestInputFactoryTest.java
index 2b01f7795a6597fa4c4f39bbc62e3a181dd22827..6f0bcb0ff975b1f71b1db089d86de1f80ea2e3ac 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -10,535 +10,231 @@ package org.opendaylight.openflowplugin.impl.common;
 
 import org.junit.Assert;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortDescCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortDescCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.MultipartRequestTableFeatures;
 
 /**
- * openflowplugin-impl
- * org.opendaylight.openflowplugin.impl.common
- *
- * Test class for testing {@link org.opendaylight.openflowplugin.impl.common.MultipartRequestInputFactory}
- * static methods and validations for {@link org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType}.
- *
- * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
- *
- * Created: Mar 28, 2015
+ * Test for {@link MultipartRequestInputFactory}.
  */
 public class MultipartRequestInputFactoryTest {
 
+    private long xid = 42L;
     private short ofVersion;
 
     @Before
-    public void initialization() {
-        ofVersion = 13;
-    }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * Validation for null input type expect IllegalArgumentException
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void testMakeMultipartRequestInputLongShortMultipartTypeNullType(){
-        final long xid = 1l;
-        MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, null);
+    public void setUp() throws Exception {
+        ofVersion = OFConstants.OFP_VERSION_1_3;
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPDESC}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPDESC;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestDescCase defaultBodyForComparison = new MultipartRequestDescCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    public void testMakeMultipartRequestInput_DESC() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPDESC;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPFLOW}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeFlow(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPFLOW;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestFlowCase defaultBodyForComparison = new MultipartRequestFlowCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+    public void testMakeMultipartRequestInput_FLOW_13() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPFLOW;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestFlowCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPAGGREGATE}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeAggr(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPAGGREGATE;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestAggregateCase defaultBodyForComparison = new MultipartRequestAggregateCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+        MultipartRequestFlow mpRq = ((MultipartRequestFlowCase) mpRqBody).getMultipartRequestFlow();
+        Assert.assertEquals(OFConstants.OFPTT_ALL, mpRq.getTableId());
+        Assert.assertEquals(OFConstants.OFPP_ANY, mpRq.getOutPort());
+        Assert.assertEquals(OFConstants.OFPG_ANY, mpRq.getOutGroup());
+        Assert.assertEquals(0, mpRq.getCookie().intValue());
+        Assert.assertEquals(0, mpRq.getCookieMask().intValue());
+        Assert.assertNotNull(mpRq.getMatch());
+        Assert.assertNull(mpRq.getMatchV10());
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPTABLE}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeTable(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPTABLE;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestTableCase defaultBodyForComparison = new MultipartRequestTableCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+        final String EMPTY_MATCH_DUMP =
+                "Match [_type=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType, " +
+                        "augmentation=[]]";
+        Assert.assertEquals(EMPTY_MATCH_DUMP, String.valueOf(mpRq.getMatch()));
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPPORTSTATS}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypePortStat(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPPORTSTATS;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestPortStatsCase defaultBodyForComparison = new MultipartRequestPortStatsCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+    public void testMakeMultipartRequestInput_FLOW_10() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPFLOW;
+        ofVersion = OFConstants.OFP_VERSION_1_0;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestFlowCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPQUEUE}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeQueue(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPQUEUE;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestQueueCase defaultBodyForComparison = new MultipartRequestQueueCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+        MultipartRequestFlow mpRq = ((MultipartRequestFlowCase) mpRqBody).getMultipartRequestFlow();
+        Assert.assertEquals(OFConstants.OFPTT_ALL, mpRq.getTableId());
+        Assert.assertEquals(OFConstants.OFPP_ANY, mpRq.getOutPort());
+        Assert.assertEquals(OFConstants.OFPG_ANY, mpRq.getOutGroup());
+        Assert.assertEquals(0, mpRq.getCookie().intValue());
+        Assert.assertEquals(0, mpRq.getCookieMask().intValue());
+        Assert.assertNull(mpRq.getMatch());
+        Assert.assertNotNull(mpRq.getMatchV10());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPGROUP}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeGroup(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUP;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestGroupCase defaultBodyForComparison = new MultipartRequestGroupCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    public void testMakeMultipartRequestInput_AGGREGATE() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPAGGREGATE;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPGROUPDESC}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeGrupDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUPDESC;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestGroupDescCase defaultBodyForComparison = new MultipartRequestGroupDescCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    public void testMakeMultipartRequestInput_TABLE() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPTABLE;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPGROUPFEATURES}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeGroupFeaturs(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUPFEATURES;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestGroupFeaturesCase defaultBodyForComparison = new MultipartRequestGroupFeaturesCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+    public void testMakeMultipartRequestInput_PORTSTATS() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPPORTSTATS;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestPortStatsCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPMETER}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMeter(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETER;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestMeterCase defaultBodyForComparison = new MultipartRequestMeterCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+        MultipartRequestPortStats mpRq = ((MultipartRequestPortStatsCase) mpRqBody).getMultipartRequestPortStats();
+        Assert.assertEquals(OFConstants.OFPP_ANY, mpRq.getPortNo());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPMETERCONFIG}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMeterConf(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETERCONFIG;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestMeterConfigCase defaultBodyForComparison = new MultipartRequestMeterConfigCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+    public void testMakeMultipartRequestInput_QUEUE() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPQUEUE;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestQueueCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPMETERFEATURES}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMeterFeatures(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETERFEATURES;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestMeterFeaturesCase defaultBodyForComparison = new MultipartRequestMeterFeaturesCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+        MultipartRequestQueue mpRq = ((MultipartRequestQueueCase) mpRqBody).getMultipartRequestQueue();
+        Assert.assertEquals(OFConstants.OFPP_ANY, mpRq.getPortNo());
+        Assert.assertEquals(OFConstants.OFPQ_ALL, mpRq.getQueueId());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPMETERFEATURES}
-     */
     @Test
-    @Ignore // table features are not working correctly in OVS so we have workaround
-    public void testMakeMultipartRequestInputLongShortMultipartTypeTableFeatures(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPTABLEFEATURES;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestTableFeaturesCase defaultBodyForComparison = new MultipartRequestTableFeaturesCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-    }
+    public void testMakeMultipartRequestInput_GROUP() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPGROUP;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestGroupCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPPORTDESC}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypePortDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPPORTDESC;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestPortDescCase defaultBodyForComparison = new MultipartRequestPortDescCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+        MultipartRequestGroup mpRq = ((MultipartRequestGroupCase) mpRqBody).getMultipartRequestGroup();
+        Assert.assertEquals(OFConstants.OFPG_ALL, mpRq.getGroupId().getValue());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
-     * {@link MultipartType.OFPMPEXPERIMENTER}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeExperimenter(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPEXPERIMENTER;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
-        final MultipartRequestExperimenterCase defaultBodyForComparison = new MultipartRequestExperimenterCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    public void testMakeMultipartRequestInput_GROUPDESC() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPGROUPDESC;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPDESC}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPDESC;
-        final MultipartRequestDescCase body = new MultipartRequestDescCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+    public void testMakeMultipartRequestInput_GROUPFEATURES() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPGROUPFEATURES;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPFLOW}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyFlow(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPFLOW;
-        final MultipartRequestFlowCase body = new MultipartRequestFlowCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
+    public void testMakeMultipartRequestInput_METER() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPMETER;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestMeterCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPAGGREGATE}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyAggr(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPAGGREGATE;
-        final MultipartRequestAggregateCase body = new MultipartRequestAggregateCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+        MultipartRequestMeter mpRq = ((MultipartRequestMeterCase) mpRqBody).getMultipartRequestMeter();
+        Assert.assertEquals(OFConstants.OFPM_ALL, mpRq.getMeterId().getValue());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPTABLE}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyTable(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPTABLE;
-        final MultipartRequestTableCase body = new MultipartRequestTableCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
+    public void testMakeMultipartRequestInput_METERCONFIG() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPMETERCONFIG;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestMeterConfigCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPPORTSTATS}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyPortStat(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPPORTSTATS;
-        final MultipartRequestPortStatsCase body = new MultipartRequestPortStatsCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+        MultipartRequestMeterConfig mpRq = ((MultipartRequestMeterConfigCase) mpRqBody).getMultipartRequestMeterConfig();
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPQUEUE}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyQueue(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPQUEUE;
-        final MultipartRequestQueueCase body = new MultipartRequestQueueCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+    public void testMakeMultipartRequestInput_METERFEATURES() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPMETERFEATURES;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPGROUP}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGroup(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUP;
-        final MultipartRequestGroupCase body = new MultipartRequestGroupCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
+    public void testMakeMultipartRequestInput_TABLEFEATURES() throws Exception {
+        final MultipartType mpType = MultipartType.OFPMPTABLEFEATURES;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
+        final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
+        Assert.assertTrue(mpRqBody instanceof MultipartRequestTableFeaturesCase);
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPGROUPDESC}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGrupDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUPDESC;
-        final MultipartRequestGroupDescCase body = new MultipartRequestGroupDescCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+        MultipartRequestTableFeatures mpRq = ((MultipartRequestTableFeaturesCase) mpRqBody).getMultipartRequestTableFeatures();
+        Assert.assertNotNull(mpRq);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPGROUPFEATURES}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGroupFeaturs(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPGROUPFEATURES;
-        final MultipartRequestGroupFeaturesCase body = new MultipartRequestGroupFeaturesCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+    public void testMakeMultipartRequestInput_PORTDESC() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPPORTDESC;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPMETER}
-     */
     @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeter(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETER;
-        final MultipartRequestMeterCase body = new MultipartRequestMeterCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+    public void testMakeMultipartRequestInput_EXPERIMENTER() throws Exception {
+        MultipartType mpType = MultipartType.OFPMPEXPERIMENTER;
+        final MultipartRequestInput mpRqInput =
+                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+        checkHeader(mpRqInput, mpType, ofVersion);
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPMETERCONFIG}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeterConf(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETERCONFIG;
-        final MultipartRequestMeterConfigCase body = new MultipartRequestMeterConfigCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
+    private void checkHeader(MultipartRequestInput mpRqInput, MultipartType mpType, short ofVersion) {
+        Assert.assertFalse(mpRqInput.getFlags().isOFPMPFREQMORE());
+        Assert.assertEquals(ofVersion, mpRqInput.getVersion().shortValue());
+        Assert.assertEquals(mpType, mpRqInput.getType());
+        Assert.assertEquals(xid, mpRqInput.getXid().longValue());
     }
 
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPMETERFEATURES}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeterFeatures(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPMETERFEATURES;
-        final MultipartRequestMeterFeaturesCase body = new MultipartRequestMeterFeaturesCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPMETERFEATURES}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyTableFeatures(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPTABLEFEATURES;
-        final MultipartRequestTableFeaturesCase body = new MultipartRequestTableFeaturesCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPPORTDESC}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyPortDesc(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPPORTDESC;
-        final MultipartRequestPortDescCase body = new MultipartRequestPortDescCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPEXPERIMENTER}
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyExperimenter(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPEXPERIMENTER;
-        final MultipartRequestExperimenterCase body = new MultipartRequestExperimenterCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-        validation(multipartReqInput, xid, type, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * Validation for null input type expect IllegalArgumentException
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyNullType(){
-        final long xid = 1l;
-        final MultipartRequestDescCase body = new MultipartRequestDescCaseBuilder().build();
-        MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, null, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * Validation for null input body expect IllegalArgumentException
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyNullBody(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPDESC;
-        MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, null);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
-     * Validation for bad input body Class expect IllegalArgumentException
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyBadType(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPEXPERIMENTER;
-        final MultipartRequestDescCase body = new MultipartRequestDescCaseBuilder().build();
-        MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, body);
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, boolean)}.
-     * {@link MultipartType.OFPMPDESC}
-     * note: we are able to add next test suite for all MultipartType but I guess it is same as suite before
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeBoolean(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPDESC;
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, true);
-        final MultipartRequestDescCase defaultBodyForComparison = new MultipartRequestDescCaseBuilder().build();
-        validation(multipartReqInput, xid, type, defaultBodyForComparison);
-        Assert.assertTrue(multipartReqInput.getFlags().isOFPMPFREQMORE());
-    }
-
-    /**
-     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short,MultipartType, boolean, MultipartRequestBody)}.
-     * {@link MultipartType.OFPMPDESC}
-     * note: we are able to add next test suite for all MultipartType but I guess it is same as suite before
-     */
-    @Test
-    public void testMakeMultipartRequestInputLongShortMultipartTypeBooleanMultipartRequestBody(){
-        final long xid = 1l;
-        final MultipartType type = MultipartType.OFPMPDESC;
-        final MultipartRequestDescCase body = new MultipartRequestDescCaseBuilder().build();
-        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type, true, body);
-        validation(multipartReqInput, xid, type, body);
-        Assert.assertTrue(multipartReqInput.getFlags().isOFPMPFREQMORE());
-    }
-
-    private void validation(final MultipartRequestInput multipartReqInput, final long xid, final MultipartType type, final MultipartRequestBody body) {
-        Assert.assertNotNull(multipartReqInput);
-        Assert.assertEquals(xid, multipartReqInput.getXid().longValue());
-        Assert.assertEquals(ofVersion, multipartReqInput.getVersion().shortValue());
-        Assert.assertNotNull(multipartReqInput.getType());
-        Assert.assertEquals(type, multipartReqInput.getType());
-        Assert.assertNotNull(multipartReqInput.getMultipartRequestBody());
-        Assert.assertEquals(body.getClass(), multipartReqInput.getMultipartRequestBody().getClass());
-        Assert.assertEquals(body, multipartReqInput.getMultipartRequestBody());
-    }
-}
+}
\ No newline at end of file