2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.controller.config.threadpool.async;
\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
14 import javax.management.InstanceAlreadyExistsException;
\r
15 import javax.management.ObjectName;
\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
30 public class AsyncEventBusConfigBeanTest extends AbstractConfigTest {
\r
32 private AsyncEventBusModuleFactory factory;
\r
33 private final String instanceName = "async1";
\r
34 private final String poolImplName = "fixed1";
\r
37 public void setUp() {
\r
39 ClassBasedModuleFactory scheduledThreadPoolConfigFactory = createClassBasedCBF(
\r
40 TestingScheduledThreadPoolModule.class, poolImplName);
\r
42 factory = new AsyncEventBusModuleFactory();
\r
43 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
\r
44 scheduledThreadPoolConfigFactory));
\r
48 public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException,
\r
49 ConflictingVersionException {
\r
50 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
\r
52 createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));
\r
53 transaction.validateConfig();
\r
54 CommitStatus status = transaction.commit();
\r
56 assertBeanCount(1, factory.getImplementationName());
\r
57 assertStatus(status, 2, 0, 0);
\r
61 public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException,
\r
62 ValidationException {
\r
64 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
\r
65 createAsynced(transaction, instanceName, transaction.createModule(poolImplName, "pool-test"));
\r
67 transaction.commit();
\r
69 assertBeanCount(1, factory.getImplementationName());
\r
71 transaction = configRegistryClient.createTransaction();
\r
72 CommitStatus status = transaction.commit();
\r
74 assertBeanCount(1, factory.getImplementationName());
\r
75 assertStatus(status, 0, 0, 2);
\r
80 public void testInstanceAlreadyExistsException() throws ConflictingVersionException, ValidationException,
\r
81 InstanceAlreadyExistsException {
\r
82 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
\r
84 ObjectName poolCB = transaction.createModule(poolImplName, "pool-test");
\r
85 createAsynced(transaction, instanceName, poolCB);
\r
86 transaction.commit();
\r
88 transaction = configRegistryClient.createTransaction();
\r
90 createAsynced(transaction, instanceName, poolCB);
\r
92 } catch (InstanceAlreadyExistsException e) {
\r
95 containsString("There is an instance registered with name ModuleIdentifier{factoryName='async-eventbus', instanceName='async1'}"));
\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