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