Remove deprecated methods from config-api.
[controller.git] / opendaylight / config / config-manager / src / test / java / org / opendaylight / controller / config / manager / impl / AbstractConfigTest.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.manager.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15
16 import java.io.Closeable;
17 import java.lang.management.ManagementFactory;
18 import java.util.Dictionary;
19 import java.util.Set;
20
21 import javax.management.InstanceAlreadyExistsException;
22 import javax.management.MBeanServer;
23 import javax.management.ObjectName;
24
25 import org.junit.After;
26 import org.mockito.Matchers;
27 import org.opendaylight.controller.config.api.jmx.CommitStatus;
28 import org.opendaylight.controller.config.manager.impl.factoriesresolver.ModuleFactoriesResolver;
29 import org.opendaylight.controller.config.manager.impl.jmx.BaseJMXRegistrator;
30 import org.opendaylight.controller.config.manager.impl.jmx.ConfigRegistryJMXRegistrator;
31 import org.opendaylight.controller.config.manager.impl.jmx.InternalJMXRegistrator;
32 import org.opendaylight.controller.config.spi.Module;
33 import org.opendaylight.controller.config.util.ConfigRegistryJMXClient;
34 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
35 import org.osgi.framework.BundleContext;
36 import org.osgi.framework.ServiceRegistration;
37
38 /**
39  * Each test that relies on
40  * {@link org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl}
41  * needs to subclass this test.
42  * {@link org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl} is
43  * registered to platform MBean Server using
44  * {@link #initConfigTransactionManagerImpl(org.opendaylight.controller.config.manager.impl.factoriesresolver.ModuleFactoriesResolver)}
45  * typically during setting up the each test.
46  */
47 public abstract class AbstractConfigTest extends
48         AbstractLockedPlatformMBeanServerTest {
49     protected ConfigRegistryJMXRegistrator configRegistryJMXRegistrator;
50     protected ConfigRegistryImpl configRegistry;
51     protected ConfigRegistryJMXClient configRegistryClient;
52     protected BaseJMXRegistrator baseJmxRegistrator;
53     protected InternalJMXRegistrator internalJmxRegistrator;
54
55     // this method should be called in @Before
56     protected void initConfigTransactionManagerImpl(
57             ModuleFactoriesResolver resolver) {
58         final MBeanServer platformMBeanServer = ManagementFactory
59                 .getPlatformMBeanServer();
60
61         configRegistryJMXRegistrator = new ConfigRegistryJMXRegistrator(
62                 platformMBeanServer);
63         BundleContext context = mock(BundleContext.class);
64         ServiceRegistration<?> mockedServiceRegistration = mock(ServiceRegistration.class);
65         doNothing().when(mockedServiceRegistration).unregister();
66         doReturn(mockedServiceRegistration).when(context).registerService(
67                 Matchers.any(String[].class), any(Closeable.class),
68                 any(Dictionary.class));
69         internalJmxRegistrator = new InternalJMXRegistrator(platformMBeanServer);
70         baseJmxRegistrator = new BaseJMXRegistrator(internalJmxRegistrator);
71
72         configRegistry = new ConfigRegistryImpl(resolver, context,
73                 platformMBeanServer, baseJmxRegistrator);
74         try {
75             configRegistryJMXRegistrator.registerToJMX(configRegistry);
76         } catch (InstanceAlreadyExistsException e) {
77             throw new RuntimeException(e);
78         }
79         configRegistryClient = new ConfigRegistryJMXClient(platformMBeanServer);
80     }
81
82     @After
83     public final void cleanUpConfigTransactionManagerImpl() {
84         configRegistryJMXRegistrator.close();
85         configRegistry.close();
86     }
87
88     /**
89      * Can be called in @After of tests if some other cleanup is needed that
90      * would be discarded by closing config beans in this method
91      */
92     protected void destroyAllConfigBeans() throws Exception {
93         ConfigTransactionJMXClient transaction = configRegistryClient
94                 .createTransaction();
95         Set<ObjectName> all = transaction.lookupConfigBeans();
96         // workaround for getting same Module more times
97         while (all.size() > 0) {
98             transaction.destroyModule(all.iterator().next());
99             all = transaction.lookupConfigBeans();
100         }
101         transaction.commit();
102     }
103
104     protected void assertSame(ObjectName oN1, ObjectName oN2) {
105         assertEquals(oN1.getKeyProperty("instanceName"),
106                 oN2.getKeyProperty("instanceName"));
107         assertEquals(oN1.getKeyProperty("interfaceName"),
108                 oN2.getKeyProperty("interfaceName"));
109     }
110
111     protected void assertStatus(CommitStatus status, int expectedNewInstances,
112             int expectedRecreatedInstances, int expectedReusedInstances) {
113         assertEquals(expectedNewInstances, status.getNewInstances().size());
114         assertEquals(expectedRecreatedInstances, status.getRecreatedInstances()
115                 .size());
116         assertEquals(expectedReusedInstances, status.getReusedInstances()
117                 .size());
118     }
119
120     protected ObjectName createTestConfigBean(
121             ConfigTransactionJMXClient transaction, String implementationName,
122             String name) throws InstanceAlreadyExistsException {
123         ObjectName nameCreated = transaction.createModule(implementationName,
124                 name);
125         return nameCreated;
126     }
127
128     protected void assertBeanCount(int i, String configMXBeanName) {
129         assertEquals(i, configRegistry.lookupConfigBeans(configMXBeanName)
130                 .size());
131     }
132
133     protected void assertBeanExists(int count, String moduleName,
134             String instanceName) {
135         assertEquals(1,
136                 configRegistry.lookupConfigBeans(moduleName, instanceName)
137                         .size());
138     }
139
140     /**
141      *
142      * @param configBeanClass
143      *            Empty constructor class of config bean to be instantiated
144      *            whenever create
145      * @param implementationName
146      * @return
147      */
148     protected ClassBasedModuleFactory createClassBasedCBF(
149             Class<? extends Module> configBeanClass, String implementationName) {
150         return new ClassBasedModuleFactory(implementationName, configBeanClass);
151     }
152 }