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.api.jmx;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertTrue;
13 import static org.junit.Assert.fail;
14 import com.google.common.base.Throwables;
15 import com.google.common.collect.Maps;
16 import java.util.HashMap;
18 import javax.management.ObjectName;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.controller.config.api.ModuleIdentifier;
23 public class ObjectNameUtilTest {
25 private String moduleName;
26 private String instanceName;
29 public void setUp() throws Exception {
30 moduleName = "module";
31 instanceName = "instance";
35 public void testServiceReferenceName() throws Exception {
36 String serviceQName = "(namespace?revision=r)qname";
37 String refName = "refName";
38 String transaction = "transaction";
40 ObjectName serviceReferenceON = ObjectNameUtil.createTransactionServiceON(transaction, serviceQName, refName);
41 ObjectNameUtil.checkType(serviceReferenceON, ObjectNameUtil.TYPE_SERVICE_REFERENCE);
43 assertFalse(serviceReferenceON.isPattern());
44 assertEquals(serviceQName, ObjectNameUtil.getServiceQName(serviceReferenceON));
45 assertEquals(refName, ObjectNameUtil.getReferenceName(serviceReferenceON));
46 assertEquals(transaction, ObjectNameUtil.getTransactionName(serviceReferenceON));
47 assertEquals(ObjectNameUtil.createReadOnlyServiceON(serviceQName, refName), ObjectNameUtil.withoutTransactionName(serviceReferenceON));
49 serviceReferenceON = ObjectNameUtil.createReadOnlyServiceON(serviceQName, refName);
50 assertFalse(serviceReferenceON.isPattern());
51 assertEquals(serviceQName, ObjectNameUtil.getServiceQName(serviceReferenceON));
52 assertEquals(refName, ObjectNameUtil.getReferenceName(serviceReferenceON));
53 assertEquals(null, ObjectNameUtil.getTransactionName(serviceReferenceON));
57 public void testModuleName() throws Exception {
58 String txName = "transaction";
60 ObjectName on = ObjectNameUtil.createTransactionModuleON(txName, moduleName, instanceName);
62 ObjectNameUtil.checkDomain(on);
63 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_MODULE);
65 assertFalse(on.isPattern());
66 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
67 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
68 assertEquals(txName, ObjectNameUtil.getTransactionName(on));
69 assertEquals(4, ObjectNameUtil.getAdditionalProperties(on).size());
71 ObjectName withoutTx = ObjectNameUtil.withoutTransactionName(on);
72 assertEquals(ObjectNameUtil.createReadOnlyModuleON(moduleName, instanceName), withoutTx);
73 assertEquals(moduleName, ObjectNameUtil.getFactoryName(withoutTx));
74 assertEquals(instanceName, ObjectNameUtil.getInstanceName(withoutTx));
75 assertEquals(null, ObjectNameUtil.getTransactionName(withoutTx));
76 assertEquals(on, ObjectNameUtil.withTransactionName(withoutTx, txName));
78 ObjectName pattern = ObjectNameUtil.createModulePattern(moduleName, null);
79 assertPattern(withoutTx, pattern);
80 pattern = ObjectNameUtil.createModulePattern(moduleName, null, txName);
81 assertPattern(on, pattern);
84 private void assertPattern(final ObjectName test, final ObjectName pattern) {
85 assertTrue(pattern.isPattern());
86 assertTrue(pattern.apply(test));
90 public void testRuntimeBeanName() throws Exception {
92 Map<String, String> properties = Maps.newHashMap();
93 properties.put("p1", "value");
94 properties.put("p2", "value2");
96 ObjectName on = ObjectNameUtil.createRuntimeBeanName(moduleName, instanceName, properties);
98 ObjectNameUtil.checkDomain(on);
99 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
101 assertFalse(on.isPattern());
102 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
103 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
104 assertEquals(2, ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).size());
105 assertTrue(ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).containsKey("p1"));
106 assertEquals("value", ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).get("p1"));
107 assertTrue(ObjectNameUtil.getAdditionalProperties(on).containsKey("p2"));
108 assertEquals("value2", ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).get("p2"));
110 ObjectName pattern = ObjectNameUtil.createRuntimeBeanPattern(null, instanceName);
111 assertPattern(on, pattern);
115 public void testModuleIdentifier() throws Exception {
116 ModuleIdentifier mi = new ModuleIdentifier(moduleName, instanceName);
117 ObjectName on = ObjectNameUtil.createReadOnlyModuleON(mi);
118 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
119 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
121 assertEquals(mi, ObjectNameUtil.fromON(on, ObjectNameUtil.TYPE_MODULE));
125 public void testChecks() throws Exception {
126 final ObjectName on = ObjectNameUtil.createON("customDomain", ObjectNameUtil.TYPE_KEY, ObjectNameUtil.TYPE_MODULE);
128 assertFailure(new Runnable() {
131 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN, ObjectNameUtil.TYPE_CONFIG_TRANSACTION);
133 }, IllegalArgumentException.class);
135 assertFailure(new Runnable() {
138 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
140 }, IllegalArgumentException.class);
142 assertFailure(new Runnable() {
145 ObjectNameUtil.checkDomain(on);
147 }, IllegalArgumentException.class);
150 private void assertFailure(final Runnable test, final Class<? extends Exception> ex) {
153 } catch(Exception e) {
154 assertTrue("Failed with wrong exception: " + Throwables.getStackTraceAsString(e),
155 e.getClass().isAssignableFrom(ex));
159 fail(test + " should have failed on " + ex);
162 @Test(expected = IllegalArgumentException.class)
163 public void testCreateON() throws Exception {
164 ObjectNameUtil.createON(">}+!#");
167 @Test(expected = IllegalArgumentException.class)
168 public void testCreateON2() throws Exception {
169 Map<String, String> map = new HashMap<>();
170 ObjectNameUtil.createON(">}+!#", map);