MultipartRequestInputFactory 88/17288/2
authorVaclav Demcak <vdemcak@cisco.com>
Sat, 28 Mar 2015 17:12:41 +0000 (18:12 +0100)
committerVaclav Demcak <vdemcak@cisco.com>
Sat, 28 Mar 2015 17:22:29 +0000 (18:22 +0100)
Note: Factory class produces MultipartRequestInput object
for ConnectinAdapter.multipartRequest method. Class should
help a newbie to understand relationship between MultipartType
and set MultipartRequestBody children.

* factory class with an input validation
* test suite for factory MultipartRequestInput

Change-Id: Id728fa3e6f15cf8c83442a23b0b118fd35f2c5ee
Signed-off-by: Vaclav Demcak <vdemcak@cisco.com>
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactory.java [new file with mode: 0644]
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactoryTest.java [new file with mode: 0644]

diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactory.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactory.java
new file mode 100644 (file)
index 0000000..5b16686
--- /dev/null
@@ -0,0 +1,231 @@
+/**
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowplugin.impl.common;
+
+import com.google.common.base.Preconditions;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
+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.MultipartRequestInputBuilder;
+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;
+
+/**
+ * openflowplugin-impl
+ * org.opendaylight.openflowplugin.impl.common
+ *
+ * Factory class is designed for easy producing a MultipartRequestInput. Class should help
+ * to understand a relationship between {@link MultipartType} and {@link MultipartRequestInput}
+ * without touch OF specification 1.3.2  - a section 7.3.5. Multipart Messages
+ * {@see https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.2.pdf}
+ *
+ * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
+ *
+ * Created: Mar 27, 2015
+ */
+public final class MultipartRequestInputFactory {
+
+    private MultipartRequestInputFactory () {
+        throw new UnsupportedOperationException("Factory class");
+    }
+
+    /**
+     * Method validate input and makes {@link MultipartRequestInput} from input values. Method set
+     * a moreRequest marker to false and it creates default empty {@link MultipartRequestBody}
+     * by {@link MultipartType}
+     *
+     * @param xid
+     * @param type
+     * @param ofVersion
+     * @return
+     */
+    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
+            @Nonnull final MultipartType type) {
+        return maker(xid, type, ofVersion, false, makeDefaultEmptyRequestBody(type));
+    }
+
+    /**
+     * Method validate input values and makes {@link MultipartRequestInput} from input values. Method set
+     * a moreRequest marker to false.
+     *
+     * @param xid
+     * @param type
+     * @param ofVersion
+     * @param body
+     * @return
+     */
+    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
+            @Nonnull final MultipartType type, @Nonnull final MultipartRequestBody body) {
+        Preconditions.checkArgument(validationOfMultipartTypeAndRequestBody(type, body));
+        return maker(xid, type, ofVersion, false, body);
+    }
+
+    /**
+     * Method validates input and makes {@link MultipartRequestInput} from input values. Method creates
+     * default empty {@link MultipartRequestBody} by {@link MultipartType}
+     *
+     * @param xid
+     * @param type
+     * @param ofVersion
+     * @param moreRequests
+     * @return
+     */
+    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
+            @Nonnull final MultipartType type, final boolean moreRequests) {
+        return maker(xid, type, ofVersion, moreRequests, makeDefaultEmptyRequestBody(type));
+    }
+
+    /**
+     * Method validates input values and makes {@link MultipartRequestInput} from input values.
+     *
+     * @param xid
+     * @param type
+     * @param ofVersion
+     * @param moreRequests
+     * @param body
+     * @return
+     */
+    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
+            @Nonnull final MultipartType type, final boolean moreRequests,
+            @Nonnull final MultipartRequestBody body) {
+        Preconditions.checkArgument(validationOfMultipartTypeAndRequestBody(type, body));
+        return maker(xid, type, ofVersion, moreRequests, body);
+    }
+
+    /**
+     * Method build {@link MultipartRequestInput} from input values. It is private because we would like
+     * to validate only what is really need to be validate.
+     *
+     * @param xid
+     * @param type
+     * @param ofVersion
+     * @param moreRequests
+     * @param body
+     * @return
+     */
+    private static MultipartRequestInput maker(final long xid, final MultipartType type,
+            final short ofVersion, final boolean moreRequests, final MultipartRequestBody body) {
+        final MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+        builder.setFlags(new MultipartRequestFlags(moreRequests));
+        builder.setMultipartRequestBody(body);
+        builder.setVersion(ofVersion);
+        builder.setType(type);
+        builder.setXid(xid);
+        return builder.build();
+    }
+
+    private static MultipartRequestBody makeDefaultEmptyRequestBody(@CheckForNull final MultipartType type) {
+        Preconditions.checkArgument(type != null, "Multipart Request can not by build without type!");
+        switch (type) {
+        case OFPMPDESC:
+            return new MultipartRequestDescCaseBuilder().build();
+        case OFPMPFLOW:
+            return new MultipartRequestFlowCaseBuilder().build();
+        case OFPMPAGGREGATE:
+            return new MultipartRequestAggregateCaseBuilder().build();
+        case OFPMPTABLE:
+            return new MultipartRequestTableCaseBuilder().build();
+        case OFPMPPORTSTATS:
+            return new MultipartRequestPortStatsCaseBuilder().build();
+        case OFPMPQUEUE:
+            return new MultipartRequestQueueCaseBuilder().build();
+        case OFPMPGROUP:
+            return new MultipartRequestGroupCaseBuilder().build();
+        case OFPMPGROUPDESC:
+            return new MultipartRequestGroupDescCaseBuilder().build();
+        case OFPMPGROUPFEATURES:
+            return new MultipartRequestGroupFeaturesCaseBuilder().build();
+        case OFPMPMETER:
+            return new MultipartRequestMeterCaseBuilder().build();
+        case OFPMPMETERCONFIG:
+            return new MultipartRequestMeterConfigCaseBuilder().build();
+        case OFPMPMETERFEATURES:
+            return new MultipartRequestMeterFeaturesCaseBuilder().build();
+        case OFPMPTABLEFEATURES:
+            return new MultipartRequestTableFeaturesCaseBuilder().build();
+        case OFPMPPORTDESC:
+            return new MultipartRequestPortDescCaseBuilder().build();
+        case OFPMPEXPERIMENTER:
+            return new MultipartRequestExperimenterCaseBuilder().build();
+        default:
+            throw new IllegalArgumentException("Unknown MultipartType " + type);
+        }
+    }
+
+    private static boolean validationOfMultipartTypeAndRequestBody(@CheckForNull final MultipartType type,
+            @CheckForNull final MultipartRequestBody body) {
+        Preconditions.checkArgument(type != null, "Multipart Request can not by build without type!");
+        Preconditions.checkArgument(body != null, "Multipart Request can not by build without body!");
+        switch (type) {
+        case OFPMPDESC:
+            return body instanceof MultipartRequestDescCase;
+        case OFPMPFLOW:
+            return body instanceof MultipartRequestFlowCase;
+        case OFPMPAGGREGATE:
+            return body instanceof MultipartRequestAggregateCase;
+        case OFPMPTABLE:
+            return body instanceof MultipartRequestTableCase;
+        case OFPMPPORTSTATS:
+            return body instanceof MultipartRequestPortStatsCase;
+        case OFPMPQUEUE:
+            return body instanceof MultipartRequestQueueCase;
+        case OFPMPGROUP:
+            return body instanceof MultipartRequestGroupCase;
+        case OFPMPGROUPDESC:
+            return body instanceof MultipartRequestGroupDescCase;
+        case OFPMPGROUPFEATURES:
+            return body instanceof MultipartRequestGroupFeaturesCase;
+        case OFPMPMETER:
+            return body instanceof MultipartRequestMeterCase;
+        case OFPMPMETERCONFIG:
+            return body instanceof MultipartRequestMeterConfigCase;
+        case OFPMPMETERFEATURES:
+            return body instanceof MultipartRequestMeterFeaturesCase;
+        case OFPMPTABLEFEATURES:
+            return body instanceof MultipartRequestTableFeaturesCase;
+        case OFPMPPORTDESC:
+            return body instanceof MultipartRequestPortDescCase;
+        case OFPMPEXPERIMENTER:
+            return body instanceof MultipartRequestExperimenterCase;
+        default:
+            throw new IllegalArgumentException("Unknown MultipartType " + type);
+        }
+    }
+}
diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactoryTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactoryTest.java
new file mode 100644 (file)
index 0000000..567e7af
--- /dev/null
@@ -0,0 +1,545 @@
+/**
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowplugin.impl.common;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.openflowplugin.api.openflow.device.XidGenerator;
+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;
+
+/**
+ * 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
+ */
+public class MultipartRequestInputFactoryTest {
+
+    private XidGenerator xidGenerator;
+    private short ofVersion;
+
+    @Before
+    public void initialization() {
+        xidGenerator = new XidGenerator();
+        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 = xidGenerator.generate().getValue();
+        MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, null);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPDESC}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeDesc(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPDESC;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestDescCase defaultBodyForComparison = new MultipartRequestDescCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPFLOW}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeFlow(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPFLOW;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestFlowCase defaultBodyForComparison = new MultipartRequestFlowCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPAGGREGATE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeAggr(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPAGGREGATE;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestAggregateCase defaultBodyForComparison = new MultipartRequestAggregateCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPTABLE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeTable(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPTABLE;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestTableCase defaultBodyForComparison = new MultipartRequestTableCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPPORTSTATS}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypePortStat(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPPORTSTATS;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestPortStatsCase defaultBodyForComparison = new MultipartRequestPortStatsCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPQUEUE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeQueue(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPQUEUE;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestQueueCase defaultBodyForComparison = new MultipartRequestQueueCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPGROUP}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeGroup(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPGROUP;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestGroupCase defaultBodyForComparison = new MultipartRequestGroupCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPGROUPDESC}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeGrupDesc(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPGROUPDESC;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestGroupDescCase defaultBodyForComparison = new MultipartRequestGroupDescCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPGROUPFEATURES}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeGroupFeaturs(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPGROUPFEATURES;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestGroupFeaturesCase defaultBodyForComparison = new MultipartRequestGroupFeaturesCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPMETER}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMeter(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPMETER;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestMeterCase defaultBodyForComparison = new MultipartRequestMeterCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPMETERCONFIG}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMeterConf(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPMETERCONFIG;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestMeterConfigCase defaultBodyForComparison = new MultipartRequestMeterConfigCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPMETERFEATURES}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMeterFeatures(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPMETERFEATURES;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestMeterFeaturesCase defaultBodyForComparison = new MultipartRequestMeterFeaturesCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPMETERFEATURES}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeTableFeatures(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPTABLEFEATURES;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestTableFeaturesCase defaultBodyForComparison = new MultipartRequestTableFeaturesCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPPORTDESC}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypePortDesc(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPPORTDESC;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestPortDescCase defaultBodyForComparison = new MultipartRequestPortDescCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType)}.
+     * {@link MultipartType.OFPMPEXPERIMENTER}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeExperimenter(){
+        final long xid = xidGenerator.generate().getValue();
+        final MultipartType type = MultipartType.OFPMPEXPERIMENTER;
+        final MultipartRequestInput multipartReqInput = MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, type);
+        final MultipartRequestExperimenterCase defaultBodyForComparison = new MultipartRequestExperimenterCaseBuilder().build();
+        validation(multipartReqInput, xid, type, defaultBodyForComparison);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPDESC}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyDesc(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPFLOW}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyFlow(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPAGGREGATE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyAggr(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPTABLE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyTable(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPPORTSTATS}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyPortStat(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPQUEUE}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyQueue(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPGROUP}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGroup(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPGROUPDESC}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGrupDesc(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPGROUPFEATURES}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyGroupFeaturs(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPMETER}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeter(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPMETERCONFIG}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeterConf(){
+        final long xid = xidGenerator.generate().getValue();
+        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);
+    }
+
+    /**
+     * Test method for {@link MultipartRequestInputFactory#makeMultipartRequestInput(long, short, MultipartType, MultipartRequestBody)}.
+     * {@link MultipartType.OFPMPMETERFEATURES}
+     */
+    @Test
+    public void testMakeMultipartRequestInputLongShortMultipartTypeMultipartRequestBodyMeterFeatures(){
+        final long xid = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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 = xidGenerator.generate().getValue();
+        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());
+    }
+}