2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.config.manager.impl;
10 import static org.hamcrest.core.Is.is;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertThat;
14 import com.google.common.collect.Sets;
15 import java.lang.management.ManagementFactory;
16 import java.lang.reflect.Field;
17 import java.util.Collections;
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;
32 public class ConfigRegistryImplLookupTest extends
33 AbstractLockedPlatformMBeanServerTest {
35 private ConfigRegistryImpl configRegistryImpl;
36 private BaseJMXRegistrator baseJMXRegistrator;
38 private static final String moduleNameA = "moduleA";
39 private static final String moduleNameB = "moduleB";
41 private static final String instanceNameA = "instA";
42 private static final String instanceNameB = "instB";
43 private static final String instanceNameC = "instC";
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);
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());
61 private static final ObjectName name9 = ObjectNameUtil
62 .createTransactionModuleON("transaction", moduleNameA, instanceNameA);
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);
73 registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name1);
74 registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name2);
75 registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name3);
76 registerModuleBean(new TestingRuntimeBean(), baseJMXRegistrator, name4);
78 registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name5);
79 registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name6);
80 registerRuntimeBean(new TestingRuntimeBean(), baseJMXRegistrator, name8);
82 baseJMXRegistrator.createTransactionJMXRegistrator("transaction")
83 .createTransactionModuleJMXRegistrator()
84 .registerMBean(new TestingRuntimeBean(), name9);
88 private static void registerModuleBean(final TestingRuntimeBean testingRuntimeBean,
89 final BaseJMXRegistrator baseJMXRegistrator, final ObjectName objectName)
90 throws InstanceAlreadyExistsException {
91 baseJMXRegistrator.createModuleJMXRegistrator().registerMBean(
92 testingRuntimeBean, objectName);
95 private static void registerRuntimeBean(final RuntimeBean object, final BaseJMXRegistrator baseJMXRegistrator,
96 final ObjectName runtimeON) throws InstanceAlreadyExistsException {
97 String factoryName = ObjectNameUtil.getFactoryName(runtimeON);
98 String instanceName = ObjectNameUtil.getInstanceName(runtimeON);
99 Map<String, String> properties = ObjectNameUtil
100 .getAdditionalPropertiesOfRuntimeBeanName(runtimeON);
102 RootRuntimeBeanRegistratorImpl runtimeBeanRegistrator = baseJMXRegistrator
103 .createRuntimeBeanRegistrator(new ModuleIdentifier(factoryName, instanceName));
105 assertThat(properties.isEmpty(), is(true));
107 runtimeBeanRegistrator.registerRoot(object);
111 public void cleanUp() {
112 baseJMXRegistrator.close();
116 public void testLookupConfigBeans() throws Exception {
117 Set<ObjectName> beans = configRegistryImpl.lookupConfigBeans();
118 assertEquals(Sets.newHashSet(name1, name2, name3, name4), beans);
119 beans = configRegistryImpl.lookupConfigBeans();
120 assertEquals(Sets.newHashSet(name1, name2, name3, name4), beans);
124 public void testLookupConfigBeanWithModuleName() throws Exception {
125 Set<ObjectName> bean = configRegistryImpl
126 .lookupConfigBeans(moduleNameA);
127 assertEquals(Sets.newHashSet(name1, name2, name3), bean);
131 public void testLookupConfigBeanWithModuleNameAndInstanceName()
133 Set<ObjectName> bean = configRegistryImpl.lookupConfigBeans(
134 moduleNameA, instanceNameA);
135 assertEquals(Sets.newHashSet(name1), bean);
139 public void testLookupRuntimeBeans() throws Exception {
140 Set<ObjectName> beans = configRegistryImpl.lookupRuntimeBeans();
141 assertEquals(Sets.newHashSet(name5, name6, name8), beans);
142 beans = configRegistryImpl.lookupRuntimeBeans(null, null);
143 assertEquals(Sets.newHashSet(name5, name6, name8), beans);
147 public void testLookupRuntimeBeansWithIFcNameAndImplName() throws Exception {
148 Set<ObjectName> beans = configRegistryImpl.lookupRuntimeBeans(
149 moduleNameA, instanceNameA);
150 assertEquals(Sets.newHashSet(name5), beans);