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 junit.framework.Assert.fail;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
15 import com.google.common.base.Throwables;
16 import com.google.common.collect.Maps;
18 import java.util.HashMap;
20 import javax.management.ObjectName;
21 import junit.framework.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.opendaylight.controller.config.api.ModuleIdentifier;
26 public class ObjectNameUtilTest {
28 private String moduleName;
29 private String instanceName;
32 public void setUp() throws Exception {
33 moduleName = "module";
34 instanceName = "instance";
38 public void testServiceReferenceName() throws Exception {
39 String serviceQName = "(namespace?revision=r)qname";
40 String refName = "refName";
41 String transaction = "transaction";
43 ObjectName serviceReferenceON = ObjectNameUtil.createTransactionServiceON(transaction, serviceQName, refName);
44 ObjectNameUtil.checkType(serviceReferenceON, ObjectNameUtil.TYPE_SERVICE_REFERENCE);
46 assertFalse(serviceReferenceON.isPattern());
47 assertEquals(serviceQName, ObjectNameUtil.getServiceQName(serviceReferenceON));
48 assertEquals(refName, ObjectNameUtil.getReferenceName(serviceReferenceON));
49 assertEquals(transaction, ObjectNameUtil.getTransactionName(serviceReferenceON));
50 assertEquals(ObjectNameUtil.createReadOnlyServiceON(serviceQName, refName), ObjectNameUtil.withoutTransactionName(serviceReferenceON));
52 serviceReferenceON = ObjectNameUtil.createReadOnlyServiceON(serviceQName, refName);
53 assertFalse(serviceReferenceON.isPattern());
54 assertEquals(serviceQName, ObjectNameUtil.getServiceQName(serviceReferenceON));
55 assertEquals(refName, ObjectNameUtil.getReferenceName(serviceReferenceON));
56 assertEquals(null, ObjectNameUtil.getTransactionName(serviceReferenceON));
60 public void testModuleName() throws Exception {
61 String txName = "transaction";
63 ObjectName on = ObjectNameUtil.createTransactionModuleON(txName, moduleName, instanceName);
65 ObjectNameUtil.checkDomain(on);
66 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_MODULE);
68 assertFalse(on.isPattern());
69 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
70 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
71 assertEquals(txName, ObjectNameUtil.getTransactionName(on));
72 assertEquals(4, ObjectNameUtil.getAdditionalProperties(on).size());
74 ObjectName withoutTx = ObjectNameUtil.withoutTransactionName(on);
75 assertEquals(ObjectNameUtil.createReadOnlyModuleON(moduleName, instanceName), withoutTx);
76 assertEquals(moduleName, ObjectNameUtil.getFactoryName(withoutTx));
77 assertEquals(instanceName, ObjectNameUtil.getInstanceName(withoutTx));
78 assertEquals(null, ObjectNameUtil.getTransactionName(withoutTx));
79 assertEquals(on, ObjectNameUtil.withTransactionName(withoutTx, txName));
81 ObjectName pattern = ObjectNameUtil.createModulePattern(moduleName, null);
82 assertPattern(withoutTx, pattern);
83 pattern = ObjectNameUtil.createModulePattern(moduleName, null, txName);
84 assertPattern(on, pattern);
87 private void assertPattern(ObjectName test, ObjectName pattern) {
88 assertTrue(pattern.isPattern());
89 assertTrue(pattern.apply(test));
93 public void testRuntimeBeanName() throws Exception {
95 Map<String, String> properties = Maps.newHashMap();
96 properties.put("p1", "value");
97 properties.put("p2", "value2");
99 ObjectName on = ObjectNameUtil.createRuntimeBeanName(moduleName, instanceName, properties);
101 ObjectNameUtil.checkDomain(on);
102 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
104 assertFalse(on.isPattern());
105 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
106 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
107 assertEquals(2, ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).size());
108 assertTrue(ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).containsKey("p1"));
109 assertEquals("value", ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).get("p1"));
110 assertTrue(ObjectNameUtil.getAdditionalProperties(on).containsKey("p2"));
111 assertEquals("value2", ObjectNameUtil.getAdditionalPropertiesOfRuntimeBeanName(on).get("p2"));
113 ObjectName pattern = ObjectNameUtil.createRuntimeBeanPattern(null, instanceName);
114 assertPattern(on, pattern);
118 public void testModuleIdentifier() throws Exception {
119 ModuleIdentifier mi = new ModuleIdentifier(moduleName, instanceName);
120 ObjectName on = ObjectNameUtil.createReadOnlyModuleON(mi);
121 assertEquals(moduleName, ObjectNameUtil.getFactoryName(on));
122 assertEquals(instanceName, ObjectNameUtil.getInstanceName(on));
124 assertEquals(mi, ObjectNameUtil.fromON(on, ObjectNameUtil.TYPE_MODULE));
128 public void testChecks() throws Exception {
129 final ObjectName on = ObjectNameUtil.createON("customDomain", ObjectNameUtil.TYPE_KEY, ObjectNameUtil.TYPE_MODULE);
131 assertFailure(new Runnable() {
134 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN, ObjectNameUtil.TYPE_CONFIG_TRANSACTION);
136 }, IllegalArgumentException.class);
138 assertFailure(new Runnable() {
141 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
143 }, IllegalArgumentException.class);
145 assertFailure(new Runnable() {
148 ObjectNameUtil.checkDomain(on);
150 }, IllegalArgumentException.class);
153 private void assertFailure(Runnable test, Class<? extends Exception> ex) {
156 } catch(Exception e) {
157 Assert.assertTrue("Failed with wrong exception: " + Throwables.getStackTraceAsString(e),
158 e.getClass().isAssignableFrom(ex));
162 fail(test + " should have failed on " + ex);
165 @Test(expected = IllegalArgumentException.class)
166 public void testCreateON() throws Exception {
167 ObjectNameUtil.createON(">}+!#");
170 @Test(expected = IllegalArgumentException.class)
171 public void testCreateON2() throws Exception {
172 Map<String, String> map = new HashMap<>();
173 ObjectNameUtil.createON(">}+!#", map);