Merge "Remove raw references to Map in XSQL"
[controller.git] / opendaylight / config / config-manager / src / test / java / org / opendaylight / controller / config / manager / impl / ConfigRegistryImplLookupTest.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.hamcrest.core.Is.is;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertThat;
13
14 import com.google.common.collect.Sets;
15 import java.lang.management.ManagementFactory;
16 import java.lang.reflect.Field;
17 import java.util.Collections;
18 import java.util.Map;
19 import java.util.Set;
20 import javax.management.InstanceAlreadyExistsException;
21 import javax.management.ObjectName;
22 import org.junit.After;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.opendaylight.controller.config.api.ModuleIdentifier;
26 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
27 import org.opendaylight.controller.config.api.runtime.RuntimeBean;
28 import org.opendaylight.controller.config.manager.impl.jmx.BaseJMXRegistrator;
29 import org.opendaylight.controller.config.manager.impl.jmx.RootRuntimeBeanRegistratorImpl;
30 import org.opendaylight.controller.config.manager.impl.runtimembean.TestingRuntimeBean;
31
32 public class ConfigRegistryImplLookupTest extends
33         AbstractLockedPlatformMBeanServerTest {
34
35     private ConfigRegistryImpl configRegistryImpl;
36     private BaseJMXRegistrator baseJMXRegistrator;
37
38     private static final String moduleNameA = "moduleA";
39     private static final String moduleNameB = "moduleB";
40
41     private static final String instanceNameA = "instA";
42     private static final String instanceNameB = "instB";
43     private static final String instanceNameC = "instC";
44
45     private static final ObjectName name1 = ObjectNameUtil
46             .createReadOnlyModuleON(moduleNameA, instanceNameA);
47     private static final ObjectName name2 = ObjectNameUtil
48             .createReadOnlyModuleON(moduleNameA, instanceNameB);
49     private static final ObjectName name3 = ObjectNameUtil
50             .createReadOnlyModuleON(moduleNameA, instanceNameC);
51     private static final ObjectName name4 = ObjectNameUtil
52             .createReadOnlyModuleON(moduleNameB, instanceNameA);
53
54     private static final ObjectName name5 = ObjectNameUtil
55             .createRuntimeBeanName(moduleNameA, instanceNameA, Collections.<String, String>emptyMap());
56     private static final ObjectName name6 = ObjectNameUtil
57             .createRuntimeBeanName(moduleNameA, instanceNameB, Collections.<String, String>emptyMap());
58     private static final ObjectName name8 = ObjectNameUtil
59             .createRuntimeBeanName(moduleNameB, instanceNameA, Collections.<String, String>emptyMap());
60
61     private static final ObjectName name9 = ObjectNameUtil
62             .createTransactionModuleON("transaction", moduleNameA, instanceNameA);
63
64     @Before
65     public void setUp() throws Exception {
66         configRegistryImpl = new ConfigRegistryImpl(null,
67                 ManagementFactory.getPlatformMBeanServer(), null);
68         Field field = configRegistryImpl.getClass().getDeclaredField(
69                 "baseJMXRegistrator");
70         field.setAccessible(true);
71         baseJMXRegistrator = (BaseJMXRegistrator) field.get(configRegistryImpl);
72
73         registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name1);
74         registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name2);
75         registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name3);
76         registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name4);
77
78         registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name5);
79         registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name6);
80         registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name8);
81
82         baseJMXRegistrator.createTransactionJMXRegistrator("transaction")
83                 .createTransactionModuleJMXRegistrator()
84                 .registerMBean(new TestingRuntimeBean(), name9);
85
86     }
87
88     private void registerModuleBean(TestingRuntimeBean testingRuntimeBean,
89             BaseJMXRegistrator baseJMXRegistrator, ObjectName objectName)
90             throws InstanceAlreadyExistsException {
91         baseJMXRegistrator.createModuleJMXRegistrator().registerMBean(
92                 testingRuntimeBean, objectName);
93     }
94
95     private void registerRuntimeBean(RuntimeBean object,
96             BaseJMXRegistrator baseJMXRegistrator, ObjectName runtimeON)
97             throws InstanceAlreadyExistsException {
98         String factoryName = ObjectNameUtil.getFactoryName(runtimeON);
99         String instanceName = ObjectNameUtil.getInstanceName(runtimeON);
100         Map<String, String> properties = ObjectNameUtil
101                 .getAdditionalPropertiesOfRuntimeBeanName(runtimeON);
102
103         RootRuntimeBeanRegistratorImpl runtimeBeanRegistrator = baseJMXRegistrator
104                 .createRuntimeBeanRegistrator(new ModuleIdentifier(factoryName, instanceName));
105
106         assertThat(properties.isEmpty(), is(true));
107
108         runtimeBeanRegistrator.registerRoot(object);
109     }
110
111     @After
112     public void cleanUp() {
113         baseJMXRegistrator.close();
114     }
115
116     @Test
117     public void testLookupConfigBeans() throws Exception {
118         Set<ObjectName> beans = configRegistryImpl.lookupConfigBeans();
119         assertEquals(Sets.newHashSet(name1, name2, name3, name4), beans);
120         beans = configRegistryImpl.lookupConfigBeans();
121         assertEquals(Sets.newHashSet(name1, name2, name3, name4), beans);
122     }
123
124     @Test
125     public void testLookupConfigBeanWithModuleName() throws Exception {
126         Set<ObjectName> bean = configRegistryImpl
127                 .lookupConfigBeans(moduleNameA);
128         assertEquals(Sets.newHashSet(name1, name2, name3), bean);
129     }
130
131     @Test
132     public void testLookupConfigBeanWithModuleNameAndInstanceName()
133             throws Exception {
134         Set<ObjectName> bean = configRegistryImpl.lookupConfigBeans(
135                 moduleNameA, instanceNameA);
136         assertEquals(Sets.newHashSet(name1), bean);
137     }
138
139     @Test
140     public void testLookupRuntimeBeans() throws Exception {
141         Set<ObjectName> beans = configRegistryImpl.lookupRuntimeBeans();
142         assertEquals(Sets.newHashSet(name5, name6, name8), beans);
143         beans = configRegistryImpl.lookupRuntimeBeans(null, null);
144         assertEquals(Sets.newHashSet(name5, name6, name8), beans);
145     }
146
147     @Test
148     public void testLookupRuntimeBeansWithIFcNameAndImplName() throws Exception {
149         Set<ObjectName> beans = configRegistryImpl.lookupRuntimeBeans(
150                 moduleNameA, instanceNameA);
151         assertEquals(Sets.newHashSet(name5), beans);
152     }
153
154 }