b2fc75d70016fca4ce13738e1b8d131f01cec64d
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / async / AsyncEventBusConfigBeanTest.java
1 package org.opendaylight.controller.config.threadpool.async;\r
2 \r
3 import static org.junit.Assert.assertThat;\r
4 import static org.junit.Assert.fail;\r
5 import static org.junit.matchers.JUnitMatchers.containsString;\r
6 \r
7 import javax.management.InstanceAlreadyExistsException;\r
8 import javax.management.ObjectName;\r
9 \r
10 import org.junit.Before;\r
11 import org.junit.Test;\r
12 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
13 import org.opendaylight.controller.config.api.ValidationException;\r
14 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
15 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
16 import org.opendaylight.controller.config.manager.impl.ClassBasedModuleFactory;\r
17 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
18 import org.opendaylight.controller.config.threadpool.scheduled.TestingScheduledThreadPoolModule;\r
19 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
20 import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleFactory;\r
21 import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleMXBean;\r
22 \r
23 public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {\r
24 \r
25     private AsyncEventBusModuleFactory factory;\r
26     private final String instanceName = "async1";\r
27     private final String poolImplName = "fixed1";\r
28 \r
29     @Before\r
30     public void setUp() {\r
31 \r
32         ClassBasedModuleFactory scheduledThreadPoolConfigFactory = createClassBasedCBF(\r
33                 TestingScheduledThreadPoolModule.class, poolImplName);\r
34 \r
35         factory = new AsyncEventBusModuleFactory();\r
36         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
37                 scheduledThreadPoolConfigFactory));\r
38     }\r
39 \r
40     @Test\r
41     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
42             ConflictingVersionException {\r
43         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
44 \r
45         createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
46         transaction.validateConfig();\r
47         CommitStatus status = transaction.commit();\r
48 \r
49         assertBeanCount(1, factory.getImplementationName());\r
50         assertStatus(status, 2, 0, 0);\r
51     }\r
52 \r
53     @Test\r
54     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
55             ValidationException {\r
56 \r
57         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
58         createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
59 \r
60         transaction.commit();\r
61 \r
62         assertBeanCount(1, factory.getImplementationName());\r
63 \r
64         transaction = configRegistryClient.createTransaction();\r
65         CommitStatus status = transaction.commit();\r
66 \r
67         assertBeanCount(1, factory.getImplementationName());\r
68         assertStatus(status, 0, 0, 2);\r
69 \r
70     }\r
71 \r
72     @Test\r
73     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
74             InstanceAlreadyExistsException {\r
75         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
76 \r
77         ObjectName poolCB = transaction.createModule(poolImplName, "pool-test");\r
78         createAsynced(transaction, instanceName, poolCB);\r
79         transaction.commit();\r
80 \r
81         transaction = configRegistryClient.createTransaction();\r
82         try {\r
83             createAsynced(transaction, instanceName, poolCB);\r
84             fail();\r
85         } catch (InstanceAlreadyExistsException e) {\r
86             assertThat(\r
87                     e.getMessage(),\r
88                     containsString("There is an instance registered with name ModuleIdentifier{factoryName='async-eventbus', instanceName='async1'}"));\r
89         }\r
90     }\r
91 \r
92     private ObjectName createAsynced(ConfigTransactionJMXClient transaction, String instanceName, ObjectName threadPool)\r
93             throws InstanceAlreadyExistsException {\r
94         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
95         AsyncEventBusModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, AsyncEventBusModuleMXBean.class);\r
96         mxBean.setThreadpool(threadPool);\r
97         return nameCreated;\r
98     }\r
99 \r
100 }\r