Merge "Initial implementation of the ClusteredDataStore"
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / scheduled / ScheduledThreadPoolConfigBeanTest.java
1 package org.opendaylight.controller.config.threadpool.scheduled;\r
2 \r
3 import static org.junit.Assert.assertEquals;\r
4 import static org.junit.Assert.assertThat;\r
5 import static org.junit.Assert.assertTrue;\r
6 import static org.junit.Assert.fail;\r
7 import static org.junit.matchers.JUnitMatchers.containsString;\r
8 \r
9 import javax.management.InstanceAlreadyExistsException;\r
10 import javax.management.InstanceNotFoundException;\r
11 import javax.management.ObjectName;\r
12 \r
13 import org.junit.Before;\r
14 import org.junit.Test;\r
15 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
16 import org.opendaylight.controller.config.api.ValidationException;\r
17 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
18 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
19 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
20 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
21 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
22 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
23 import org.opendaylight.controller.config.yang.threadpool.impl.ScheduledThreadPoolModuleFactory;\r
24 import org.opendaylight.controller.config.yang.threadpool.impl.ScheduledThreadPoolModuleMXBean;\r
25 \r
26 public class ScheduledThreadPoolConfigBeanTest extends AbstractConfigTest {\r
27 \r
28     private ScheduledThreadPoolModuleFactory factory;\r
29     private final String instanceName = "scheduled1";\r
30 \r
31     @Before\r
32     public void setUp() {\r
33 \r
34         factory = new ScheduledThreadPoolModuleFactory();\r
35         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
36                 new NamingThreadFactoryModuleFactory()));\r
37     }\r
38 \r
39     @Test\r
40     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
41             ConflictingVersionException {\r
42         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
43 \r
44         createScheduled(transaction, instanceName, 1);\r
45         transaction.validateConfig();\r
46         CommitStatus status = transaction.commit();\r
47 \r
48         assertBeanCount(1, factory.getImplementationName());\r
49         assertStatus(status, 2, 0, 0);\r
50     }\r
51 \r
52     @Test\r
53     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
54             ValidationException {\r
55 \r
56         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
57         createScheduled(transaction, instanceName, 1);\r
58 \r
59         transaction.commit();\r
60 \r
61         assertBeanCount(1, factory.getImplementationName());\r
62 \r
63         transaction = configRegistryClient.createTransaction();\r
64         CommitStatus status = transaction.commit();\r
65 \r
66         assertBeanCount(1, factory.getImplementationName());\r
67         assertStatus(status, 0, 0, 2);\r
68     }\r
69 \r
70     @Test\r
71     public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
72             ConflictingVersionException, InstanceNotFoundException {\r
73         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
74         createScheduled(transaction, instanceName, 1);\r
75 \r
76         transaction.commit();\r
77 \r
78         transaction = configRegistryClient.createTransaction();\r
79         ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);\r
80         ScheduledThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
81                 ScheduledThreadPoolModuleMXBean.class);\r
82         proxy.setMaxThreadCount(99);\r
83 \r
84         CommitStatus status = transaction.commit();\r
85 \r
86         assertBeanCount(1, factory.getImplementationName());\r
87         assertStatus(status, 0, 1, 1);\r
88     }\r
89 \r
90     @Test\r
91     public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,\r
92             InstanceNotFoundException {\r
93         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
94         createScheduled(transaction, instanceName, 1);\r
95 \r
96         transaction.commit();\r
97 \r
98         transaction = configRegistryClient.createTransaction();\r
99         transaction.destroyConfigBean(factory.getImplementationName(), instanceName);\r
100         CommitStatus status = transaction.commit();\r
101 \r
102         assertBeanCount(0, factory.getImplementationName());\r
103         assertStatus(status, 0, 0, 1);\r
104     }\r
105 \r
106     @Test\r
107     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
108             InstanceAlreadyExistsException {\r
109         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
110         createScheduled(transaction, instanceName, 1);\r
111         transaction.commit();\r
112         transaction = configRegistryClient.createTransaction();\r
113         try {\r
114             createScheduled(transaction, instanceName, 2);\r
115             fail();\r
116         } catch (InstanceAlreadyExistsException e) {\r
117             assertThat(\r
118                     e.getMessage(),\r
119                     containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-scheduled', instanceName='scheduled1'}"));\r
120         }\r
121     }\r
122 \r
123     @Test\r
124     public void testValidationException() throws InstanceAlreadyExistsException {\r
125         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
126         createScheduled(transaction, instanceName, 0);\r
127 \r
128         try {\r
129             transaction.validateConfig();\r
130             fail();\r
131         } catch (ValidationException e) {\r
132             assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));\r
133             assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());\r
134         }\r
135     }\r
136 \r
137     private ObjectName createScheduled(ConfigTransactionJMXClient transaction, String instanceName, int maxThreadCount)\r
138             throws InstanceAlreadyExistsException {\r
139         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
140         ScheduledThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,\r
141                 ScheduledThreadPoolModuleMXBean.class);\r
142         mxBean.setMaxThreadCount(maxThreadCount);\r
143 \r
144         ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");\r
145         NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
146                 NamingThreadFactoryModuleMXBean.class);\r
147         namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
148 \r
149         mxBean.setThreadFactory(threadFactoryON);\r
150 \r
151         return nameCreated;\r
152     }\r
153 \r
154 }\r