Merge "creating a default subnet"
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / fixed / FixedThreadPoolConfigBeanTest.java
1 package org.opendaylight.controller.config.threadpool.fixed;\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.InstanceNotFoundException;\r
9 import javax.management.ObjectName;\r
10 \r
11 import org.junit.Before;\r
12 import org.junit.Test;\r
13 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
14 import org.opendaylight.controller.config.api.ValidationException;\r
15 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
16 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
17 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
18 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
19 import org.opendaylight.controller.config.yang.threadpool.impl.FixedThreadPoolModuleFactory;\r
20 import org.opendaylight.controller.config.yang.threadpool.impl.FixedThreadPoolModuleMXBean;\r
21 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
22 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
23 \r
24 public class FixedThreadPoolConfigBeanTest extends AbstractConfigTest {\r
25 \r
26     private FixedThreadPoolModuleFactory factory;\r
27     private final String nameInstance = "fixedInstance";\r
28 \r
29     @Before\r
30     public void setUp() {\r
31         factory = new FixedThreadPoolModuleFactory();\r
32         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
33                 new NamingThreadFactoryModuleFactory()));\r
34     }\r
35 \r
36     @Test\r
37     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
38             ConflictingVersionException {\r
39         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
40         createFixed(transaction, nameInstance, 2);\r
41 \r
42         transaction.validateConfig();\r
43         CommitStatus status = transaction.commit();\r
44 \r
45         assertBeanCount(1, factory.getImplementationName());\r
46         assertStatus(status, 2, 0, 0);\r
47     }\r
48 \r
49     @Test\r
50     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
51             ValidationException {\r
52         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
53         createFixed(transaction, nameInstance, 4);\r
54 \r
55         transaction.validateConfig();\r
56         transaction.commit();\r
57 \r
58         assertBeanCount(1, factory.getImplementationName());\r
59 \r
60         transaction = configRegistryClient.createTransaction();\r
61         CommitStatus status = transaction.commit();\r
62 \r
63         assertBeanCount(1, factory.getImplementationName());\r
64         assertStatus(status, 0, 0, 2);\r
65     }\r
66 \r
67     @Test\r
68     public void testNegative() throws ConflictingVersionException, ValidationException, InstanceAlreadyExistsException {\r
69         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
70 \r
71         createFixed(transaction, nameInstance, 5);\r
72         transaction.commit();\r
73 \r
74         transaction = configRegistryClient.createTransaction();\r
75         try {\r
76             createFixed(transaction, nameInstance, 0);\r
77             fail();\r
78         } catch (InstanceAlreadyExistsException e) {\r
79             assertThat(\r
80                     e.getMessage(),\r
81                     containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadpool-fixed', instanceName='fixedInstance'}"));\r
82         }\r
83     }\r
84 \r
85     @Test\r
86     public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,\r
87             InstanceNotFoundException {\r
88         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
89         createFixed(transaction, nameInstance, 1);\r
90 \r
91         transaction.commit();\r
92 \r
93         transaction = configRegistryClient.createTransaction();\r
94         transaction.destroyConfigBean(factory.getImplementationName(), nameInstance);\r
95         CommitStatus status = transaction.commit();\r
96 \r
97         assertBeanCount(0, factory.getImplementationName());\r
98         assertStatus(status, 0, 0, 1);\r
99     }\r
100 \r
101     @Test\r
102     public void testValidationException() throws InstanceAlreadyExistsException {\r
103         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
104         createFixed(transaction, nameInstance, -1);\r
105         try {\r
106             transaction.validateConfig();\r
107             fail();\r
108         } catch (ValidationException e) {\r
109             assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));\r
110         }\r
111     }\r
112 \r
113     private ObjectName createFixed(ConfigTransactionJMXClient transaction, String name, int numberOfThreads)\r
114             throws InstanceAlreadyExistsException {\r
115         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), name);\r
116         FixedThreadPoolModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, FixedThreadPoolModuleMXBean.class);\r
117         mxBean.setMaxThreadCount(numberOfThreads);\r
118 \r
119         ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");\r
120         NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
121                 NamingThreadFactoryModuleMXBean.class);\r
122         namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
123 \r
124         mxBean.setThreadFactory(threadFactoryON);\r
125 \r
126         return nameCreated;\r
127     }\r
128 \r
129 }\r