1 package org.opendaylight.controller.config.yang.pcep.impl;
3 import static org.junit.Assert.assertTrue;
4 import static org.junit.Assert.fail;
6 import javax.management.InstanceAlreadyExistsException;
7 import javax.management.InstanceNotFoundException;
8 import javax.management.ObjectName;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.opendaylight.controller.config.api.ConflictingVersionException;
13 import org.opendaylight.controller.config.api.ValidationException;
14 import org.opendaylight.controller.config.api.jmx.CommitStatus;
15 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
16 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
17 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
18 import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
19 import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleMXBean;
20 import org.opendaylight.controller.config.yang.netty.timer.HashedWheelTimerModuleFactory;
21 import org.opendaylight.controller.config.yang.netty.timer.HashedWheelTimerModuleMXBean;
22 import org.opendaylight.controller.config.yang.pcep.spi.SimplePCEPExtensionProviderContextModuleFactory;
23 import org.opendaylight.controller.config.yang.pcep.spi.SimplePCEPExtensionProviderContextModuleMXBean;
25 public class PCEPDispatcherImplModuleTest extends AbstractConfigTest {
27 private final String instanceName = "pcep-dispatcher";
29 private PCEPDispatcherImplModuleFactory factory;
31 private PCEPSessionProposalFactoryImplModuleFactory sessionFactory;
33 private NettyThreadgroupModuleFactory threadgroupFactory;
35 private SimplePCEPExtensionProviderContextModuleFactory extensionsFactory;
37 private HashedWheelTimerModuleFactory timerFactory;
40 public void setUp() throws Exception {
41 this.factory = new PCEPDispatcherImplModuleFactory();
42 this.sessionFactory = new PCEPSessionProposalFactoryImplModuleFactory();
43 this.threadgroupFactory = new NettyThreadgroupModuleFactory();
44 this.extensionsFactory = new SimplePCEPExtensionProviderContextModuleFactory();
45 this.timerFactory = new HashedWheelTimerModuleFactory();
46 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
47 factory, sessionFactory, threadgroupFactory, extensionsFactory,
52 public void testValidationExceptionMaxUnknownMessagesNotSet()
53 throws InstanceAlreadyExistsException {
55 ConfigTransactionJMXClient transaction = configRegistryClient
57 createInstance(transaction, this.factory.getImplementationName(),
59 this.sessionFactory.getImplementationName(),
60 this.threadgroupFactory.getImplementationName(),
61 this.extensionsFactory.getImplementationName(),
62 this.timerFactory.getImplementationName());
63 transaction.validateConfig();
65 } catch (ValidationException e) {
66 assertTrue(e.getMessage().contains(
67 "MaxUnknownMessages value is not set"));
72 public void testValidationExceptionMaxUnknownMessagesMinValue()
73 throws InstanceAlreadyExistsException {
75 ConfigTransactionJMXClient transaction = configRegistryClient
77 createInstance(transaction, this.factory.getImplementationName(),
79 this.sessionFactory.getImplementationName(),
80 this.threadgroupFactory.getImplementationName(),
81 this.extensionsFactory.getImplementationName(),
82 this.timerFactory.getImplementationName());
83 transaction.validateConfig();
85 } catch (ValidationException e) {
86 assertTrue(e.getMessage().contains("must be greater than 0"));
91 public void testCreateBean() throws Exception {
92 ConfigTransactionJMXClient transaction = configRegistryClient
94 createInstance(transaction, this.factory.getImplementationName(),
95 instanceName, 5, this.sessionFactory.getImplementationName(),
96 this.threadgroupFactory.getImplementationName(),
97 this.extensionsFactory.getImplementationName(),
98 this.timerFactory.getImplementationName());
99 transaction.validateConfig();
100 CommitStatus status = transaction.commit();
101 assertBeanCount(1, factory.getImplementationName());
102 assertStatus(status, 6, 0, 0);
106 public void testReusingOldInstance() throws InstanceAlreadyExistsException,
107 ConflictingVersionException, ValidationException {
108 ConfigTransactionJMXClient transaction = configRegistryClient
109 .createTransaction();
110 createInstance(transaction, this.factory.getImplementationName(),
111 instanceName, 5, this.sessionFactory.getImplementationName(),
112 this.threadgroupFactory.getImplementationName(),
113 this.extensionsFactory.getImplementationName(),
114 this.timerFactory.getImplementationName());
115 transaction.commit();
116 transaction = configRegistryClient.createTransaction();
117 assertBeanCount(1, factory.getImplementationName());
118 CommitStatus status = transaction.commit();
119 assertBeanCount(1, factory.getImplementationName());
120 assertStatus(status, 0, 0, 6);
124 public void testReconfigure() throws InstanceAlreadyExistsException,
125 ConflictingVersionException, ValidationException,
126 InstanceNotFoundException {
127 ConfigTransactionJMXClient transaction = configRegistryClient
128 .createTransaction();
129 createInstance(transaction, this.factory.getImplementationName(),
130 instanceName, 5, this.sessionFactory.getImplementationName(),
131 this.threadgroupFactory.getImplementationName(),
132 this.extensionsFactory.getImplementationName(),
133 this.timerFactory.getImplementationName());
134 transaction.commit();
135 transaction = configRegistryClient.createTransaction();
136 assertBeanCount(1, factory.getImplementationName());
137 PCEPDispatcherImplModuleMXBean mxBean = transaction.newMBeanProxy(
138 transaction.lookupConfigBean(
139 this.factory.getImplementationName(), instanceName),
140 PCEPDispatcherImplModuleMXBean.class);
141 mxBean.setMaxUnknownMessages(10);
142 CommitStatus status = transaction.commit();
143 assertBeanCount(1, factory.getImplementationName());
144 assertStatus(status, 0, 1, 5);
147 public static ObjectName createInstance(
148 final ConfigTransactionJMXClient transaction,
149 final String moduleName, final String instanceName,
150 final Integer maxUnknownMessages,
151 final String sessionFactoryImplName,
152 final String threadGroupFactoryImplName,
153 final String extensionsImplName, final String timerFactoryImplName)
154 throws InstanceAlreadyExistsException {
155 ObjectName nameCreated = transaction.createModule(moduleName,
157 PCEPDispatcherImplModuleMXBean mxBean = transaction.newMBeanProxy(
158 nameCreated, PCEPDispatcherImplModuleMXBean.class);
159 mxBean.setPcepSessionProposalFactory(PCEPSessionProposalFactoryImplModuleTest
160 .createInstance(transaction, sessionFactoryImplName,
161 "pcep-proposal", 0, 0, true, true, true, true));
162 mxBean.setMaxUnknownMessages(maxUnknownMessages);
163 mxBean.setBossGroup(createThreadGroupInstance(transaction,
164 threadGroupFactoryImplName, "boss-group", 10));
165 mxBean.setWorkerGroup(createThreadGroupInstance(transaction,
166 threadGroupFactoryImplName, "worker-group", 10));
167 mxBean.setExtensions(createExtensionsInstance(transaction,
168 extensionsImplName, "extensions"));
169 mxBean.setTimer(createTimerInstance(transaction, timerFactoryImplName,
174 public static ObjectName createExtensionsInstance(
175 final ConfigTransactionJMXClient transaction,
176 final String moduleName, final String instanceName)
177 throws InstanceAlreadyExistsException {
178 ObjectName nameCreated = transaction.createModule(moduleName,
180 transaction.newMBeanProxy(nameCreated,
181 SimplePCEPExtensionProviderContextModuleMXBean.class);
186 public static ObjectName createThreadGroupInstance(
187 final ConfigTransactionJMXClient transaction,
188 final String moduleName, final String instanceName,
189 final Integer threadCount) throws InstanceAlreadyExistsException {
190 ObjectName nameCreated = transaction.createModule(moduleName,
192 NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(
193 nameCreated, NettyThreadgroupModuleMXBean.class);
194 mxBean.setThreadCount(threadCount);
198 public static ObjectName createTimerInstance(
199 final ConfigTransactionJMXClient transaction,
200 final String moduleName, final String instanceName)
201 throws InstanceAlreadyExistsException {
202 ObjectName nameCreated = transaction.createModule(moduleName,
204 transaction.newMBeanProxy(nameCreated,
205 HashedWheelTimerModuleMXBean.class);