9e9565a4f965d835b2eec18dc4adca7c3d6ed3d0
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / naming / NamingThreadPoolFactoryConfigBeanTest.java
1 package org.opendaylight.controller.config.threadpool.naming;\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.ThreadFactoryServiceInterface;\r
22 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
23 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
24 \r
25 public class NamingThreadPoolFactoryConfigBeanTest extends AbstractConfigTest {\r
26 \r
27     private NamingThreadFactoryModuleFactory factory;\r
28     private final String instanceName = "named";\r
29 \r
30     @Before\r
31     public void setUp() {\r
32 \r
33         factory = new NamingThreadFactoryModuleFactory();\r
34         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));\r
35     }\r
36 \r
37     @Test\r
38     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
39             ConflictingVersionException {\r
40         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
41 \r
42         createNamed(transaction, instanceName, "prefixes");\r
43         transaction.validateConfig();\r
44         CommitStatus status = transaction.commit();\r
45 \r
46         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
47         assertEquals(1, status.getNewInstances().size());\r
48         assertEquals(0, status.getRecreatedInstances().size());\r
49         assertEquals(0, status.getReusedInstances().size());\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         createNamed(transaction, instanceName, "prefixes");\r
58 \r
59         transaction.commit();\r
60 \r
61         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
62 \r
63         transaction = configRegistryClient.createTransaction();\r
64         CommitStatus status = transaction.commit();\r
65 \r
66         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
67         assertEquals(0, status.getNewInstances().size());\r
68         assertEquals(0, status.getRecreatedInstances().size());\r
69         assertEquals(1, status.getReusedInstances().size());\r
70 \r
71     }\r
72 \r
73     @Test\r
74     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
75             InstanceAlreadyExistsException {\r
76         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
77 \r
78         createNamed(transaction, instanceName, "prefixes");\r
79         transaction.commit();\r
80 \r
81         transaction = configRegistryClient.createTransaction();\r
82         try {\r
83             createNamed(transaction, instanceName, "prefixes1");\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='threadfactory-naming', instanceName='named'}"));\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         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
97         transaction.newMXBeanProxy(nameCreated, ThreadFactoryServiceInterface.class);\r
98         try {\r
99             transaction.validateConfig();\r
100             fail();\r
101         } catch (ValidationException e) {\r
102             assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));\r
103             assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());\r
104         }\r
105     }\r
106 \r
107     @Test\r
108     public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
109             ConflictingVersionException, InstanceNotFoundException {\r
110         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
111         createNamed(transaction, instanceName, "pref");\r
112 \r
113         transaction.commit();\r
114 \r
115         transaction = configRegistryClient.createTransaction();\r
116         ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);\r
117         NamingThreadFactoryModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
118                 NamingThreadFactoryModuleMXBean.class);\r
119         proxy.setNamePrefix("pref1");\r
120 \r
121         CommitStatus status = transaction.commit();\r
122 \r
123         assertBeanCount(1, factory.getImplementationName());\r
124         assertStatus(status, 0, 1, 0);\r
125     }\r
126 \r
127     private ObjectName createNamed(ConfigTransactionJMXClient transaction, String instanceName, String prefixes)\r
128             throws InstanceAlreadyExistsException {\r
129         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
130         NamingThreadFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,\r
131                 NamingThreadFactoryModuleMXBean.class);\r
132         mxBean.setNamePrefix(prefixes);\r
133         return nameCreated;\r
134     }\r
135 \r
136 }\r