BUG 2317 : StatisticsManager does not unregister from yang notifications on close
[controller.git] / opendaylight / config / config-api / src / test / java / org / opendaylight / controller / config / api / jmx / ObjectNameUtilTest.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.api.jmx;
9
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;
14
15 import com.google.common.base.Throwables;
16 import com.google.common.collect.Maps;
17
18 import java.util.HashMap;
19 import java.util.Map;
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;
25
26 public class ObjectNameUtilTest {
27
28     private String moduleName;
29     private String instanceName;
30
31     @Before
32     public void setUp() throws Exception {
33         moduleName = "module";
34         instanceName = "instance";
35     }
36
37     @Test
38     public void testServiceReferenceName() throws Exception {
39         String serviceQName = "(namespace?revision=r)qname";
40         String refName = "refName";
41         String transaction = "transaction";
42
43         ObjectName serviceReferenceON = ObjectNameUtil.createTransactionServiceON(transaction, serviceQName, refName);
44         ObjectNameUtil.checkType(serviceReferenceON, ObjectNameUtil.TYPE_SERVICE_REFERENCE);
45
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));
51
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));
57     }
58
59     @Test
60     public void testModuleName() throws Exception {
61         String txName = "transaction";
62
63         ObjectName on = ObjectNameUtil.createTransactionModuleON(txName, moduleName, instanceName);
64
65         ObjectNameUtil.checkDomain(on);
66         ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_MODULE);
67
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());
73
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));
80
81         ObjectName pattern = ObjectNameUtil.createModulePattern(moduleName, null);
82         assertPattern(withoutTx, pattern);
83         pattern = ObjectNameUtil.createModulePattern(moduleName, null, txName);
84         assertPattern(on, pattern);
85     }
86
87     private void assertPattern(ObjectName test, ObjectName pattern) {
88         assertTrue(pattern.isPattern());
89         assertTrue(pattern.apply(test));
90     }
91
92     @Test
93     public void testRuntimeBeanName() throws Exception {
94
95         Map<String, String> properties = Maps.newHashMap();
96         properties.put("p1", "value");
97         properties.put("p2", "value2");
98
99         ObjectName on = ObjectNameUtil.createRuntimeBeanName(moduleName, instanceName, properties);
100
101         ObjectNameUtil.checkDomain(on);
102         ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
103
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"));
112
113         ObjectName pattern = ObjectNameUtil.createRuntimeBeanPattern(null, instanceName);
114         assertPattern(on, pattern);
115     }
116
117     @Test
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));
123
124         assertEquals(mi, ObjectNameUtil.fromON(on, ObjectNameUtil.TYPE_MODULE));
125     }
126
127     @Test
128     public void testChecks() throws Exception {
129         final ObjectName on = ObjectNameUtil.createON("customDomain", ObjectNameUtil.TYPE_KEY, ObjectNameUtil.TYPE_MODULE);
130
131         assertFailure(new Runnable() {
132             @Override
133             public void run() {
134                 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN, ObjectNameUtil.TYPE_CONFIG_TRANSACTION);
135             }
136         }, IllegalArgumentException.class);
137
138         assertFailure(new Runnable() {
139             @Override
140             public void run() {
141                 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
142             }
143         }, IllegalArgumentException.class);
144
145         assertFailure(new Runnable() {
146             @Override
147             public void run() {
148                 ObjectNameUtil.checkDomain(on);
149             }
150         }, IllegalArgumentException.class);
151     }
152
153     private void assertFailure(Runnable test, Class<? extends Exception> ex) {
154         try {
155             test.run();
156         } catch(Exception e) {
157             Assert.assertTrue("Failed with wrong exception: " + Throwables.getStackTraceAsString(e),
158                     e.getClass().isAssignableFrom(ex));
159             return;
160         }
161
162         fail(test + " should have failed on " + ex);
163     }
164
165     @Test(expected = IllegalArgumentException.class)
166     public void testCreateON() throws Exception {
167         ObjectNameUtil.createON(">}+!#");
168     }
169
170     @Test(expected = IllegalArgumentException.class)
171     public void testCreateON2() throws Exception {
172         Map<String, String> map = new HashMap<>();
173         ObjectNameUtil.createON(">}+!#", map);
174     }
175 }