Add missing headers to config, netconf subsystems
[controller.git] / opendaylight / config / threadpool-config-impl / src / test / java / org / opendaylight / controller / config / threadpool / async / AsyncEventBusConfigBeanTest.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.async;\r
9 \r
10 import static org.junit.Assert.assertThat;\r
11 import static org.junit.Assert.fail;\r
12 import static org.junit.matchers.JUnitMatchers.containsString;\r
13 \r
14 import javax.management.InstanceAlreadyExistsException;\r
15 import javax.management.ObjectName;\r
16 \r
17 import org.junit.Before;\r
18 import org.junit.Test;\r
19 import org.opendaylight.controller.config.api.ConflictingVersionException;\r
20 import org.opendaylight.controller.config.api.ValidationException;\r
21 import org.opendaylight.controller.config.api.jmx.CommitStatus;\r
22 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;\r
23 import org.opendaylight.controller.config.manager.impl.ClassBasedModuleFactory;\r
24 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;\r
25 import org.opendaylight.controller.config.threadpool.scheduled.TestingScheduledThreadPoolModule;\r
26 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;\r
27 import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleFactory;\r
28 import org.opendaylight.controller.config.yang.threadpool.impl.AsyncEventBusModuleMXBean;\r
29 \r
30 public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {\r
31 \r
32     private AsyncEventBusModuleFactory factory;\r
33     private final String instanceName = "async1";\r
34     private final String poolImplName = "fixed1";\r
35 \r
36     @Before\r
37     public void setUp() {\r
38 \r
39         ClassBasedModuleFactory scheduledThreadPoolConfigFactory = createClassBasedCBF(\r
40                 TestingScheduledThreadPoolModule.class, poolImplName);\r
41 \r
42         factory = new AsyncEventBusModuleFactory();\r
43         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,\r
44                 scheduledThreadPoolConfigFactory));\r
45     }\r
46 \r
47     @Test\r
48     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,\r
49             ConflictingVersionException {\r
50         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
51 \r
52         createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
53         transaction.validateConfig();\r
54         CommitStatus status = transaction.commit();\r
55 \r
56         assertBeanCount(1, factory.getImplementationName());\r
57         assertStatus(status, 2, 0, 0);\r
58     }\r
59 \r
60     @Test\r
61     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,\r
62             ValidationException {\r
63 \r
64         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
65         createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));\r
66 \r
67         transaction.commit();\r
68 \r
69         assertBeanCount(1, factory.getImplementationName());\r
70 \r
71         transaction = configRegistryClient.createTransaction();\r
72         CommitStatus status = transaction.commit();\r
73 \r
74         assertBeanCount(1, factory.getImplementationName());\r
75         assertStatus(status, 0, 0, 2);\r
76 \r
77     }\r
78 \r
79     @Test\r
80     public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,\r
81             InstanceAlreadyExistsException {\r
82         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();\r
83 \r
84         ObjectName poolCB = transaction.createModule(poolImplName, "pool-test");\r
85         createAsynced(transaction, instanceName, poolCB);\r
86         transaction.commit();\r
87 \r
88         transaction = configRegistryClient.createTransaction();\r
89         try {\r
90             createAsynced(transaction, instanceName, poolCB);\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='async-eventbus', instanceName='async1'}"));\r
96         }\r
97     }\r
98 \r
99     private ObjectName createAsynced(ConfigTransactionJMXClient transaction, String instanceName, ObjectName threadPool)\r
100             throws InstanceAlreadyExistsException {\r
101         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);\r
102         AsyncEventBusModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, AsyncEventBusModuleMXBean.class);\r
103         mxBean.setThreadpool(threadPool);\r
104         return nameCreated;\r
105     }\r
106 \r
107 }\r