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