Merge "Fix for Bug 3"
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / fixed / FixedThreadPoolConfigBeanTest.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.fixed;\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.fixed.FixedThreadPoolModuleFactory;\r
21 import org.opendaylight.controller.config.yang.threadpool.impl.fixed.FixedThreadPoolModuleMXBean;\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 FixedThreadPoolConfigBeanTest extends AbstractConfigTest {\r
32 \r
33     private FixedThreadPoolModuleFactory factory;\r
34     private final String nameInstance = "fixedInstance";\r
35 \r
36     @Before\r
37     public void setUp() {\r
38         factory = new FixedThreadPoolModuleFactory();\r
39         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
40                 new NamingThreadFactoryModuleFactory()));\r
41     }\r
42 \r
43     @Test\r
44     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
45             ConflictingVersionException {\r
46         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
47         createFixed(transaction, nameInstance, 2);\r
48 \r
49         transaction.validateConfig();\r
50         CommitStatus status = transaction.commit();\r
51 \r
52         assertBeanCount(1, factory.getImplementationName());\r
53         assertStatus(status, 2, 0, 0);\r
54     }\r
55 \r
56     @Test\r
57     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
58             ValidationException {\r
59         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
60         createFixed(transaction, nameInstance, 4);\r
61 \r
62         transaction.validateConfig();\r
63         transaction.commit();\r
64 \r
65         assertBeanCount(1, factory.getImplementationName());\r
66 \r
67         transaction = configRegistryClient.createTransaction();\r
68         CommitStatus status = transaction.commit();\r
69 \r
70         assertBeanCount(1, factory.getImplementationName());\r
71         assertStatus(status, 0, 0, 2);\r
72     }\r
73 \r
74     @Test\r
75     public void testNegative() throws ConflictingVersionException, ValidationException, InstanceAlreadyExistsException {\r
76         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
77 \r
78         createFixed(transaction, nameInstance, 5);\r
79         transaction.commit();\r
80 \r
81         transaction = configRegistryClient.createTransaction();\r
82         try {\r
83             createFixed(transaction, nameInstance, 0);\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='threadpool-fixed', instanceName='fixedInstance'}"));\r
89         }\r
90     }\r
91 \r
92     @Test\r
93     public void testDestroy() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException,\r
94             InstanceNotFoundException {\r
95         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
96         createFixed(transaction, nameInstance, 1);\r
97 \r
98         transaction.commit();\r
99 \r
100         transaction = configRegistryClient.createTransaction();\r
101         transaction.destroyConfigBean(factory.getImplementationName(), nameInstance);\r
102         CommitStatus status = transaction.commit();\r
103 \r
104         assertBeanCount(0, factory.getImplementationName());\r
105         assertStatus(status, 0, 0, 1);\r
106     }\r
107 \r
108     @Test\r
109     public void testValidationException() throws InstanceAlreadyExistsException {\r
110         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
111         createFixed(transaction, nameInstance, -1);\r
112         try {\r
113             transaction.validateConfig();\r
114             fail();\r
115         } catch (ValidationException e) {\r
116             assertThat(e.getMessage(), containsString("MaxThreadCount must be greater than zero"));\r
117         }\r
118     }\r
119 \r
120     private ObjectName createFixed(ConfigTransactionJMXClient transaction, String name, int numberOfThreads)\r
121             throws InstanceAlreadyExistsException {\r
122         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), name);\r
123         FixedThreadPoolModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, FixedThreadPoolModuleMXBean.class);\r
124         mxBean.setMaxThreadCount(numberOfThreads);\r
125 \r
126         ObjectName threadFactoryON = transaction.createModule(NamingThreadFactoryModuleFactory.NAME, "naming");\r
127         NamingThreadFactoryModuleMXBean namingThreadFactoryModuleMXBean = transaction.newMXBeanProxy(threadFactoryON,\r
128                 NamingThreadFactoryModuleMXBean.class);\r
129         namingThreadFactoryModuleMXBean.setNamePrefix("prefix");\r
130 \r
131         mxBean.setThreadFactory(threadFactoryON);\r
132 \r
133         return nameCreated;\r
134     }\r
135 \r
136 }\r