Add missing headers to config, netconf subsystems
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / naming / NamingThreadPoolFactoryConfigBeanTest.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.controller.config.threadpool.naming;\r
9 \r
10 import static org.junit.Assert.assertEquals;\r
11 import static org.junit.Assert.assertThat;\r
12 import static org.junit.Assert.assertTrue;\r
13 import static org.junit.Assert.fail;\r
14 import static org.junit.matchers.JUnitMatchers.containsString;\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 org.junit.Before;\r
21 import org.junit.Test;\r
22 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
23 import org.opendaylight.controller.config.api.ValidationException;\r
24 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
25 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
26 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
27 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
28 import org.opendaylight.controller.config.yang.threadpool.ThreadFactoryServiceInterface;\r
29 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleFactory;\r
30 import org.opendaylight.controller.config.yang.threadpool.impl.NamingThreadFactoryModuleMXBean;\r
31 \r
32 public class NamingThreadPoolFactoryConfigBeanTest extends AbstractConfigTest {\r
33 \r
34     private NamingThreadFactoryModuleFactory factory;\r
35     private final String instanceName = "named";\r
36 \r
37     @Before\r
38     public void setUp() {\r
39 \r
40         factory = new NamingThreadFactoryModuleFactory();\r
41         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));\r
42     }\r
43 \r
44     @Test\r
45     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
46             ConflictingVersionException {\r
47         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
48 \r
49         createNamed(transaction, instanceName, "prefixes");\r
50         transaction.validateConfig();\r
51         CommitStatus status = transaction.commit();\r
52 \r
53         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
54         assertEquals(1, status.getNewInstances().size());\r
55         assertEquals(0, status.getRecreatedInstances().size());\r
56         assertEquals(0, status.getReusedInstances().size());\r
57     }\r
58 \r
59     @Test\r
60     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
61             ValidationException {\r
62 \r
63         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
64         createNamed(transaction, instanceName, "prefixes");\r
65 \r
66         transaction.commit();\r
67 \r
68         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
69 \r
70         transaction = configRegistryClient.createTransaction();\r
71         CommitStatus status = transaction.commit();\r
72 \r
73         assertEquals(1, configRegistry.lookupConfigBeans(factory.getImplementationName()).size());\r
74         assertEquals(0, status.getNewInstances().size());\r
75         assertEquals(0, status.getRecreatedInstances().size());\r
76         assertEquals(1, status.getReusedInstances().size());\r
77 \r
78     }\r
79 \r
80     @Test\r
81     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
82             InstanceAlreadyExistsException {\r
83         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
84 \r
85         createNamed(transaction, instanceName, "prefixes");\r
86         transaction.commit();\r
87 \r
88         transaction = configRegistryClient.createTransaction();\r
89         try {\r
90             createNamed(transaction, instanceName, "prefixes1");\r
91             fail();\r
92         } catch (InstanceAlreadyExistsException e) {\r
93             assertThat(\r
94                     e.getMessage(),\r
95                     containsString("There is an instance registered with name ModuleIdentifier{factoryName='threadfactory-naming', instanceName='named'}"));\r
96         }\r
97     }\r
98 \r
99     @Test\r
100     public void testValidationException() throws InstanceAlreadyExistsException {\r
101         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
102 \r
103         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
104         transaction.newMXBeanProxy(nameCreated, ThreadFactoryServiceInterface.class);\r
105         try {\r
106             transaction.validateConfig();\r
107             fail();\r
108         } catch (ValidationException e) {\r
109             assertTrue(e.getFailedValidations().containsKey(factory.getImplementationName()));\r
110             assertEquals(1, e.getFailedValidations().get(factory.getImplementationName()).keySet().size());\r
111         }\r
112     }\r
113 \r
114     @Test\r
115     public void testReconfigurationInstance() throws InstanceAlreadyExistsException, ValidationException,\r
116             ConflictingVersionException, InstanceNotFoundException {\r
117         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
118         createNamed(transaction, instanceName, "pref");\r
119 \r
120         transaction.commit();\r
121 \r
122         transaction = configRegistryClient.createTransaction();\r
123         ObjectName databaseNew = transaction.lookupConfigBean(factory.getImplementationName(), instanceName);\r
124         NamingThreadFactoryModuleMXBean proxy = transaction.newMXBeanProxy(databaseNew,\r
125                 NamingThreadFactoryModuleMXBean.class);\r
126         proxy.setNamePrefix("pref1");\r
127 \r
128         CommitStatus status = transaction.commit();\r
129 \r
130         assertBeanCount(1, factory.getImplementationName());\r
131         assertStatus(status, 0, 1, 0);\r
132     }\r
133 \r
134     private ObjectName createNamed(ConfigTransactionJMXClient transaction, String instanceName, String prefixes)\r
135             throws InstanceAlreadyExistsException {\r
136         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
137         NamingThreadFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,\r
138                 NamingThreadFactoryModuleMXBean.class);\r
139         mxBean.setNamePrefix(prefixes);\r
140         return nameCreated;\r
141     }\r
142 \r
143 }\r