Added test for pcep-impl-config modules, added and fixed modules's validations. 09/2809/1
authorMilos Fabian <milfabia@cisco.com>
Thu, 14 Nov 2013 09:32:54 +0000 (10:32 +0100)
committerMilos Fabian <milfabia@cisco.com>
Mon, 18 Nov 2013 08:45:40 +0000 (09:45 +0100)
Change-Id: I26a805c11db94519c3dc2a8dc9c56f9fc2230fee
Signed-off-by: Milos Fabian <milfabia@cisco.com>
pcep/impl-config/pom.xml
pcep/impl-config/src/main/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPDispatcherImplModule.java
pcep/impl-config/src/main/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPSessionProposalFactoryImplModule.java
pcep/impl-config/src/main/yang/pcep-impl.yang
pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPDispatcherImplModuleTest.java [new file with mode: 0644]
pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPSessionProposalFactoryImplModuleTest.java [new file with mode: 0644]

index c7c0c637562a1acc76eb1a6b5f4aa6ada9b616a4..ed8f388aa64ca8cc8d013255aca19a837b398ca8 100644 (file)
    </prerequisites>
 
    <dependencies>
+      <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+      </dependency>
       <dependency>
          <groupId>org.opendaylight.controller</groupId>
          <artifactId>config-api</artifactId>
          <artifactId>threadpool-config-api</artifactId>
          <version>${controller.config.version}</version>
       </dependency>
+
+      <!--test dependencies -->
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>config-manager</artifactId>
+         <version>${controller.config.version}</version>
+         <scope>test</scope>
+         <type>test-jar</type>
+      </dependency>
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>config-manager</artifactId>
+         <version>${controller.config.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>config-util</artifactId>
+         <version>${controller.config.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>${project.groupId}</groupId>
+         <artifactId>mockito-configuration</artifactId>
+         <version>${project.version}</version>
+         <scope>test</scope>
+      </dependency>
+      <dependency>
+         <groupId>org.opendaylight.controller</groupId>
+         <artifactId>netty-threadgroup-config</artifactId>
+         <version>${controller.config.version}</version>
+         <scope>test</scope>
+      </dependency>
+
    </dependencies>
 
    <build>
index 51f0db26311e7fe7f5b7cb26835eccff1cc1e5f0..c338b63db6f433142578b858f0de504b94a9234d 100644 (file)
@@ -42,6 +42,8 @@ public final class PCEPDispatcherImplModule
        @Override
        public void validate() {
                super.validate();
+               JmxAttributeValidationException.checkNotNull(getMaxUnknownMessages(),
+                               "value is not set.", this.maxUnknownMessagesJmxAttribute);
                JmxAttributeValidationException.checkCondition(
                                getMaxUnknownMessages() > 0, "Parameter 'maxUnknownMessages' "
                                                + "must be greater than 0",
@@ -58,7 +60,8 @@ public final class PCEPDispatcherImplModule
 
                final PCEPDispatcherImpl instance = new PCEPDispatcherImpl(
                                PCEPExtensionProviderContextImpl.getSingletonInstance()
-                                               .getMessageHandlerRegistry(), negFactory, getBossGroupDependency(), getWorkerGroupDependency());
+                                               .getMessageHandlerRegistry(), negFactory,
+                               getBossGroupDependency(), getWorkerGroupDependency());
                return instance;
        }
 }
index fc3cc23dfab3bf40f087bcbcc1184f0ea1990db0..ca1fc5dc2a575c5cc7795a6208dc7ec9942dc1c7 100644 (file)
@@ -15,6 +15,8 @@ import org.opendaylight.controller.config.api.JmxAttributeValidationException;
 import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory;
 import org.opendaylight.protocol.pcep.impl.PCEPSessionProposalFactoryImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
 *
@@ -22,6 +24,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 public final class PCEPSessionProposalFactoryImplModule
                extends
                org.opendaylight.controller.config.yang.pcep.impl.AbstractPCEPSessionProposalFactoryImplModule {
+       
+       private static final Logger logger = LoggerFactory.getLogger(PCEPSessionProposalFactoryImplModule.class);
 
        public PCEPSessionProposalFactoryImplModule(
                        org.opendaylight.controller.config.api.ModuleIdentifier name,
@@ -40,14 +44,31 @@ public final class PCEPSessionProposalFactoryImplModule
        @Override
        public void validate() {
                super.validate();
-               JmxAttributeValidationException
-                               .checkCondition(
-                                               getDeadTimerValue() % getKeepAliveTimerValue() != 4,
-                                               "Parameter 'dead timer value' should be 4 times greater than keepAlive timer value.",
-                                               deadTimerValueJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getActive(),
+                               "value is not set.", activeJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getVersioned(),
+                               "value is not set.", versionedJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getTimeout(),
+                               "value is not set.", timeoutJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getInstantiated(),
+                               "value is not set.", instantiatedJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getDeadTimerValue(),
+                               "value is not set.", deadTimerValueJmxAttribute);
+               JmxAttributeValidationException.checkNotNull(getKeepAliveTimerValue(),
+                               "value is not set.", keepAliveTimerValueJmxAttribute);
+               if (getKeepAliveTimerValue() != 0) {
+                       JmxAttributeValidationException.checkCondition(
+                                       getKeepAliveTimerValue() >= 1, "minimum value is 1.",
+                                       keepAliveTimerValueJmxAttribute);
+                       if (getDeadTimerValue() != 0 && (getDeadTimerValue() / getKeepAliveTimerValue() == 4)) {
+                               logger.warn("DeadTimerValue should be 4 times greater than KeepAliveTimerValue");
+                       }
+               }
                if ((getActive() || getVersioned() || getTimeout() > 0)
                                && !getStateful())
                        setStateful(true);
+               JmxAttributeValidationException.checkNotNull(getStateful(),
+                               "value is not set.", statefulJmxAttribute);
        }
 
        @Override
@@ -73,8 +94,8 @@ public final class PCEPSessionProposalFactoryImplModule
                }
 
                @Override
-               public Open getSessionProposal(
-                               InetSocketAddress inetSocketAddress, int i) {
+               public Open getSessionProposal(InetSocketAddress inetSocketAddress,
+                               int i) {
                        return inner.getSessionProposal(inetSocketAddress, i);
                }
        }
index ac19e63cc791538f961557e4548467865f761933..419cd72401013a9ba6494e0e75ddd3554cc356a1 100644 (file)
@@ -89,10 +89,12 @@ module pcep-impl {
 
                        leaf dead-timer-value {
                                type uint16;
+                               default 120;
                        }
 
                        leaf keep-alive-timer-value {
                                type uint16;
+                               default 30;
                        }
 
                        leaf instantiated {
diff --git a/pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPDispatcherImplModuleTest.java b/pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPDispatcherImplModuleTest.java
new file mode 100644 (file)
index 0000000..4571cb2
--- /dev/null
@@ -0,0 +1,159 @@
+package org.opendaylight.controller.config.yang.pcep.impl;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
+import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleMXBean;
+
+public class PCEPDispatcherImplModuleTest extends AbstractConfigTest {
+
+       private final String instanceName = "pcep-dispatcher";
+
+       private PCEPDispatcherImplModuleFactory factory;
+
+       private PCEPSessionProposalFactoryImplModuleFactory sessionFactory;
+
+       private NettyThreadgroupModuleFactory threadgroupFactory;
+
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new PCEPDispatcherImplModuleFactory();
+               this.sessionFactory = new PCEPSessionProposalFactoryImplModuleFactory();
+               this.threadgroupFactory = new NettyThreadgroupModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+                               factory, sessionFactory, threadgroupFactory));
+       }
+
+       @Test
+       public void testValidationExceptionMaxUnknownMessagesNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, null,
+                                       this.sessionFactory.getImplementationName(),
+                                       this.threadgroupFactory.getImplementationName());
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("MaxUnknownMessages value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionMaxUnknownMessagesMinValue()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 0,
+                                       this.sessionFactory.getImplementationName(),
+                                       this.threadgroupFactory.getImplementationName());
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("must be greater than 0"));
+               }
+       }
+
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 5, this.sessionFactory.getImplementationName(),
+                               this.threadgroupFactory.getImplementationName());
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 4, 0, 0);
+       }
+
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 5, this.sessionFactory.getImplementationName(),
+                               this.threadgroupFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 4);
+       }
+
+       @Test
+       public void testReconfigure() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException,
+                       InstanceNotFoundException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 5, this.sessionFactory.getImplementationName(),
+                               this.threadgroupFactory.getImplementationName());
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               PCEPDispatcherImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               transaction.lookupConfigBean(
+                                               this.factory.getImplementationName(), instanceName),
+                               PCEPDispatcherImplModuleMXBean.class);
+               mxBean.setMaxUnknownMessages(10);
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 1, 3);
+       }
+
+       public static ObjectName createInstance(
+                       final ConfigTransactionJMXClient transaction,
+                       final String moduleName, final String instanceName,
+                       final Integer maxUnknownMessages,
+                       final String sessionFactoryImplName,
+                       final String threadGrupFactoryImplName)
+                       throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(moduleName,
+                               instanceName);
+               PCEPDispatcherImplModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, PCEPDispatcherImplModuleMXBean.class);
+               mxBean.setPcepSessionProposalFactory(PCEPSessionProposalFactoryImplModuleTest
+                               .createInstance(transaction, sessionFactoryImplName,
+                                               "pcep-proposal", 0, 0, true, true, true, true, 1000));
+               mxBean.setMaxUnknownMessages(maxUnknownMessages);
+               mxBean.setBossGroup(createThreadGroupInstance(transaction,
+                               threadGrupFactoryImplName, "boss-group", 10));
+               mxBean.setWorkerGroup(createThreadGroupInstance(transaction,
+                               threadGrupFactoryImplName, "worker-group", 10));
+               return nameCreated;
+       }
+
+       public static ObjectName createThreadGroupInstance(
+                       final ConfigTransactionJMXClient transaction,
+                       final String moduleName, final String instanceName,
+                       final Integer threadCount) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(moduleName,
+                               instanceName);
+               NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(
+                               nameCreated, NettyThreadgroupModuleMXBean.class);
+               mxBean.setThreadCount(threadCount);
+               return nameCreated;
+       }
+
+}
diff --git a/pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPSessionProposalFactoryImplModuleTest.java b/pcep/impl-config/src/test/java/org/opendaylight/controller/config/yang/pcep/impl/PCEPSessionProposalFactoryImplModuleTest.java
new file mode 100644 (file)
index 0000000..a177e2a
--- /dev/null
@@ -0,0 +1,248 @@
+package org.opendaylight.controller.config.yang.pcep.impl;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.ObjectName;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+
+public class PCEPSessionProposalFactoryImplModuleTest extends
+               AbstractConfigTest {
+
+       private final String instanceName = "pcep-proposal";
+
+       private PCEPSessionProposalFactoryImplModuleFactory factory;
+
+       @Before
+       public void setUp() throws Exception {
+               this.factory = new PCEPSessionProposalFactoryImplModuleFactory();
+               super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
+                               factory));
+       }
+
+       @Test
+       public void testValidationExceptionDeadTimerValueNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, null, 100, true, true, true, true, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains(
+                                       "DeadTimerValue value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionKeepAliveTimerNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, null, true, true, true, true, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains(
+                                       "KeepAliveTimerValue value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionStatefulNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, 100, null, false, false, false, -1);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Stateful value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionActiveNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, 100, true, null, true, true, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Active value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionVersionedNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, 100, true, true, null, true, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Versioned value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionInstantiatedNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, 100, true, true, true, null, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Instantiated value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionTimeoutNotSet()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, 100, true, true, true, true, null);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("Timeout value is not set"));
+               }
+       }
+
+       @Test
+       public void testValidationExceptionKeepAliveTimerMinValue()
+                       throws InstanceAlreadyExistsException {
+               try {
+                       ConfigTransactionJMXClient transaction = configRegistryClient
+                                       .createTransaction();
+                       createInstance(transaction, this.factory.getImplementationName(),
+                                       instanceName, 400, -10, true, true, true, true, 1000);
+                       transaction.validateConfig();
+                       fail();
+               } catch (ValidationException e) {
+                       assertTrue(e.getMessage().contains("minimum value is 1."));
+               }
+       }
+
+       @Test
+       public void testStatefulAfterCommitted()
+                       throws InstanceAlreadyExistsException, InstanceNotFoundException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 400, 100, false, true, true, true, 1000);
+               transaction.validateConfig();
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               PCEPSessionProposalFactoryImplModuleMXBean mxBean = transaction
+                               .newMBeanProxy(
+                                               transaction
+                                                               .lookupConfigBean(
+                                                                               AbstractPCEPSessionProposalFactoryImplModuleFactory.NAME,
+                                                                               instanceName),
+                                               PCEPSessionProposalFactoryImplModuleMXBean.class);
+               assertTrue(mxBean.getStateful());
+       }
+
+       @Test
+       public void testCreateBean() throws Exception {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 0, 0, true, true, true, true, 1000);
+               transaction.validateConfig();
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 1, 0, 0);
+       }
+
+       @Test
+       public void testReusingOldInstance() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 400, 100, true, true, true, true, 1000);
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 0, 1);
+       }
+
+       @Test
+       public void testReconfigure() throws InstanceAlreadyExistsException,
+                       ConflictingVersionException, ValidationException,
+                       InstanceNotFoundException {
+               ConfigTransactionJMXClient transaction = configRegistryClient
+                               .createTransaction();
+               createInstance(transaction, this.factory.getImplementationName(),
+                               instanceName, 400, 100, true, true, true, true, 1000);
+               transaction.commit();
+               transaction = configRegistryClient.createTransaction();
+               assertBeanCount(1, factory.getImplementationName());
+               PCEPSessionProposalFactoryImplModuleMXBean mxBean = transaction
+                               .newMBeanProxy(
+                                               transaction
+                                                               .lookupConfigBean(
+                                                                               AbstractPCEPSessionProposalFactoryImplModuleFactory.NAME,
+                                                                               instanceName),
+                                               PCEPSessionProposalFactoryImplModuleMXBean.class);
+               mxBean.setTimeout(200);
+               CommitStatus status = transaction.commit();
+               assertBeanCount(1, factory.getImplementationName());
+               assertStatus(status, 0, 1, 0);
+       }
+
+       public static ObjectName createInstance(
+                       final ConfigTransactionJMXClient transaction,
+                       final String moduleName, final String instanceName,
+                       final Integer deadTimer, final Integer keepAlive,
+                       final Boolean stateful, final Boolean active,
+                       final Boolean versioned, final Boolean instant,
+                       final Integer timeout) throws InstanceAlreadyExistsException {
+               ObjectName nameCreated = transaction.createModule(moduleName,
+                               instanceName);
+               PCEPSessionProposalFactoryImplModuleMXBean mxBean = transaction
+                               .newMBeanProxy(nameCreated,
+                                               PCEPSessionProposalFactoryImplModuleMXBean.class);
+               mxBean.setActive(active);
+               mxBean.setDeadTimerValue(deadTimer);
+               mxBean.setInstantiated(instant);
+               mxBean.setKeepAliveTimerValue(keepAlive);
+               mxBean.setStateful(stateful);
+               mxBean.setTimeout(timeout);
+               mxBean.setVersioned(versioned);
+               return nameCreated;
+       }
+
+}