netty-threadgroup-config: final parameters
[controller.git] / opendaylight / config / netty-threadgroup-config / src / test / java / org / opendaylight / controller / config / yang / netty / threadgroup / NettyThreadgroupModuleTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.config.yang.netty.threadgroup;
9
10 import static org.mockito.Matchers.any;
11 import static org.mockito.Matchers.anyString;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15 import io.netty.channel.EventLoopGroup;
16 import javax.management.InstanceAlreadyExistsException;
17 import javax.management.InstanceNotFoundException;
18 import javax.management.ObjectName;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.controller.config.api.ConflictingVersionException;
22 import org.opendaylight.controller.config.api.ValidationException;
23 import org.opendaylight.controller.config.api.jmx.CommitStatus;
24 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
25 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
26 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
27 import org.osgi.framework.Filter;
28 import org.osgi.framework.ServiceListener;
29 import org.osgi.framework.ServiceReference;
30
31 public class NettyThreadgroupModuleTest extends AbstractConfigTest {
32
33     private NettyThreadgroupModuleFactory factory;
34     private final String instanceName = "netty1";
35
36     @SuppressWarnings({ "rawtypes", "unchecked" })
37     @Before
38     public void setUp() throws Exception {
39         factory = new NettyThreadgroupModuleFactory();
40         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
41
42         Filter mockFilter = mock(Filter.class);
43         doReturn("mock").when(mockFilter).toString();
44         doReturn(mockFilter).when(mockedContext).createFilter(anyString());
45         doNothing().when(mockedContext).addServiceListener(any(ServiceListener.class), anyString());
46         ServiceReference mockServiceRef = mock(ServiceReference.class);
47         doReturn(new ServiceReference[]{mockServiceRef}).when(mockedContext).
48                 getServiceReferences(anyString(), anyString());
49         doReturn(mock(EventLoopGroup.class)).when(mockedContext).getService(mockServiceRef);
50     }
51
52     @Test
53     public void testCreateBean() throws InstanceAlreadyExistsException, ValidationException, ConflictingVersionException {
54         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
55
56         createInstance(transaction, instanceName, 2);
57         createInstance(transaction, instanceName + 2, null);
58         transaction.validateConfig();
59         CommitStatus status = transaction.commit();
60
61         assertBeanCount(2, factory.getImplementationName());
62         assertStatus(status, 2, 0, 0);
63     }
64
65     @Test
66     public void testReusingOldInstance() throws InstanceAlreadyExistsException, ConflictingVersionException, ValidationException {
67
68         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
69         createInstance(transaction, instanceName, null);
70
71         transaction.commit();
72
73         transaction = configRegistryClient.createTransaction();
74         assertBeanCount(1, factory.getImplementationName());
75         CommitStatus status = transaction.commit();
76
77         assertBeanCount(1, factory.getImplementationName());
78         assertStatus(status, 0, 0, 1);
79     }
80
81     @Test
82     public void testReconfigure() throws InstanceAlreadyExistsException, ConflictingVersionException,
83             ValidationException, InstanceNotFoundException {
84
85         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
86         createInstance(transaction, instanceName, null);
87
88         transaction.commit();
89
90         transaction = configRegistryClient.createTransaction();
91         assertBeanCount(1, factory.getImplementationName());
92         NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(
93                 transaction.lookupConfigBean(AbstractNettyThreadgroupModuleFactory.NAME, instanceName),
94                 NettyThreadgroupModuleMXBean.class);
95         mxBean.setThreadCount(1);
96         CommitStatus status = transaction.commit();
97
98         assertBeanCount(1, factory.getImplementationName());
99         assertStatus(status, 0, 1, 0);
100     }
101
102     private ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String instanceName, final Integer threads)
103             throws InstanceAlreadyExistsException {
104         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
105         NettyThreadgroupModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated, NettyThreadgroupModuleMXBean.class);
106         mxBean.setThreadCount(threads);
107         return nameCreated;
108     }
109 }