</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>
@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",
final PCEPDispatcherImpl instance = new PCEPDispatcherImpl(
PCEPExtensionProviderContextImpl.getSingletonInstance()
- .getMessageHandlerRegistry(), negFactory, getBossGroupDependency(), getWorkerGroupDependency());
+ .getMessageHandlerRegistry(), negFactory,
+ getBossGroupDependency(), getWorkerGroupDependency());
return instance;
}
}
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;
/**
*
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,
@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
}
@Override
- public Open getSessionProposal(
- InetSocketAddress inetSocketAddress, int i) {
+ public Open getSessionProposal(InetSocketAddress inetSocketAddress,
+ int i) {
return inner.getSessionProposal(inetSocketAddress, i);
}
}
leaf dead-timer-value {
type uint16;
+ default 120;
}
leaf keep-alive-timer-value {
type uint16;
+ default 30;
}
leaf instantiated {
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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;
+ }
+
+}