5f1a3ee95723d737ce1ad2a7de2d1355fbf7cc45
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / flexible / FlexibleThreadPoolConfigBeanTest.java
1 package org.opendaylight.controller.config.threadpool.flexible;\r
2 \r
3 import org.junit.Before;\r
4 import org.junit.Test;\r
5 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
6 import org.opendaylight.controller.config.api.ValidationException;\r
7 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
8 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
9 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
10 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
11 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
12 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
13 import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleFactory;\r
14 import org.opendaylight.controller.config.yang.threadpool.impl.flexible.FlexibleThreadPoolModuleMXBean;\r
15 \r
16 import javax.management.InstanceAlreadyExistsException;\r
17 import javax.management.InstanceNotFoundException;\r
18 import javax.management.ObjectName;\r
19 \r
20 import static org.junit.Assert.assertThat;\r
21 import static org.junit.Assert.fail;\r
22 import static org.junit.matchers.JUnitMatchers.containsString;\r
23 \r
24 public class FlexibleThreadPoolConfigBeanTest extends AbstractConfigTest {\r
25 \r
26     private FlexibleThreadPoolModuleFactory flexibleFactory;\r
27     private final String instanceName = "flexible1";\r
28     private final String threadFactoryName = "threadFactoryName";\r
29 \r
30     @Before\r
31     public void setUp() {\r
32 \r
33         flexibleFactory = new FlexibleThreadPoolModuleFactory();\r
34         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(flexibleFactory,\r
35                 new NamingThreadFactoryModuleFactory()));\r
36     }\r
37 \r
38     @Test\r
39     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
40             ConflictingVersionException {\r
41         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
42 \r
43         createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 20);\r
44         transaction.validateConfig();\r
45         CommitStatus status = transaction.commit();\r
46 \r
47         assertBeanCount(1, flexibleFactory.getImplementationName());\r
48         assertStatus(status, 2, 0, 0);\r
49     }\r
50 \r
51     @Test\r
52     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
53             ValidationException {\r
54 \r
55         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
56         createFlexible(transaction, instanceName, threadFactoryName, 1, 20, 10);\r
57 \r
58         transaction.commit();\r
59 \r
60         assertBeanCount(1, flexibleFactory.getImplementationName());\r
61 \r
62         transaction = configRegistryClient.createTransaction();\r
63         CommitStatus status = transaction.commit();\r
64 \r
65         assertBeanCount(1, flexibleFactory.getImplementationName());\r
66         assertStatus(status, 0, 0, 2);\r
67 \r
68     }\r
69 \r
70     @Test\r
71     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException {\r
72         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
73 \r
74         try {\r
75             createFlexible(transaction, instanceName, threadFactoryName, 1, 1, 2);\r
76             transaction.commit();\r
77         } catch (InstanceAlreadyExistsException e1) {\r
78             fail();\r
79         }\r
80 \r
81         transaction = configRegistryClient.createTransaction();\r
82         try {\r
83             createFlexible(transaction, instanceName, "threadFactoryName1", 2, 2, 2);\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='threadpool-flexible', instanceName='flexible1'}"));\r
89         }\r
90     }\r
91 \r
92     @Test\r
93     public void testValidationException() throws InstanceAlreadyExistsException {\r
94         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
95 \r
96         createFlexible(transaction, instanceName, threadFactoryName, 0, 10, 10);\r
97 \r
98         try {\r
99             transaction.validateConfig();\r
100             fail();\r
101         } catch (ValidationException e) {\r
102             assertThat(e.getMessage(), containsString("MinThreadCount must be greater than zero"));\r
103         }\r
104     }\r
105 \r
106     @Test\r
107     public void testValidationException2() throws InstanceAlreadyExistsException {\r
108         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
109 \r
110         createFlexible(transaction, instanceName, threadFactoryName, 0, 0, 10);\r
111 \r
112         try {\r
113             transaction.validateConfig();\r
114             fail();\r
115         } catch (ValidationException e) {\r
116             assertThat(e.getMessage(), containsString("KeepAliveMillis must be greater than zero"));\r
117         }\r
118     }\r
119 \r
120     @Test\r
121     public void testValidationException3() throws InstanceAlreadyExistsException {\r
122         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
123 \r
124         createFlexible(transaction, instanceName, threadFactoryName, 10, 50, 0);\r
125 \r
126         try {\r
127             transaction.validateConfig();\r
128             fail();\r
129         } catch (ValidationException e) {\r
130             assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));\r
131         }\r
132     }\r
133 \r
134     private ObjectName createFlexible(ConfigTransactionJMXClient transaction, String instanceName,\r
135             String threadFactoryName, int minThreadCount, long keepAliveMillis, int maxThreadCount)\r
136             throws InstanceAlreadyExistsException {\r
137 \r
138         ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, threadFactoryName);\r
139         NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
140                 NamingThreadFactoryModuleMXBean.class);\r
141         namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
142 \r
143         ObjectName flexibleON = transaction.createModule(flexibleFactory.getImplementationName(), instanceName);\r
144         FlexibleThreadPoolModuleMXBean mxBean = transaction.newMBeanProxy(flexibleON,\r
145                 FlexibleThreadPoolModuleMXBean.class);\r
146         mxBean.setKeepAliveMillis(keepAliveMillis);\r
147         mxBean.setMaxThreadCount(maxThreadCount);\r
148         mxBean.setMinThreadCount(minThreadCount);\r
149         mxBean.setThreadFactory(threadFactoryON);\r
150         return flexibleON;\r
151     }\r
152 \r
153     @Test\r
154     public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
155             ConflictingVersionException, InstanceNotFoundException {\r
156         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
157         createFlexible(transaction, instanceName, threadFactoryName, 2, 2, 2);\r
158 \r
159         transaction.commit();\r
160 \r
161         transaction = configRegistryClient.createTransaction();\r
162         ObjectName databaseNew = transaction.lookupConfigBean(flexibleFactory.getImplementationName(), instanceName);\r
163         FlexibleThreadPoolModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
164                 FlexibleThreadPoolModuleMXBean.class);\r
165         proxy.setMaxThreadCount(99);\r
166 \r
167         CommitStatus status = transaction.commit();\r
168 \r
169         assertBeanCount(1, flexibleFactory.getImplementationName());\r
170         assertStatus(status, 0, 1, 1);\r
171     }\r
172 \r
173 }\r