Merge "Fix warnings in config-api tests"
[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 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;
17 import java.util.Map;
18 import javax.management.ObjectName;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.controller.config.api.ModuleIdentifier;
22
23 public class ObjectNameUtilTest {
24
25     private String moduleName;
26     private String instanceName;
27
28     @Before
29     public void setUp() throws Exception {
30         moduleName = "module";
31         instanceName = "instance";
32     }
33
34     @Test
35     public void testServiceReferenceName() throws Exception {
36         String serviceQName = "(namespace?revision=r)qname";
37         String refName = "refName";
38         String transaction = "transaction";
39
40         ObjectName serviceReferenceON = ObjectNameUtil.createTransactionServiceON(transaction, serviceQName, refName);
41         ObjectNameUtil.checkType(serviceReferenceON, ObjectNameUtil.TYPE_SERVICE_REFERENCE);
42
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));
48
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));
54     }
55
56     @Test
57     public void testModuleName() throws Exception {
58         String txName = "transaction";
59
60         ObjectName on = ObjectNameUtil.createTransactionModuleON(txName, moduleName, instanceName);
61
62         ObjectNameUtil.checkDomain(on);
63         ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_MODULE);
64
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());
70
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));
77
78         ObjectName pattern = ObjectNameUtil.createModulePattern(moduleName, null);
79         assertPattern(withoutTx, pattern);
80         pattern = ObjectNameUtil.createModulePattern(moduleName, null, txName);
81         assertPattern(on, pattern);
82     }
83
84     private void assertPattern(final ObjectName test, final ObjectName pattern) {
85         assertTrue(pattern.isPattern());
86         assertTrue(pattern.apply(test));
87     }
88
89     @Test
90     public void testRuntimeBeanName() throws Exception {
91
92         Map<String, String> properties = Maps.newHashMap();
93         properties.put("p1", "value");
94         properties.put("p2", "value2");
95
96         ObjectName on = ObjectNameUtil.createRuntimeBeanName(moduleName, instanceName, properties);
97
98         ObjectNameUtil.checkDomain(on);
99         ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
100
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"));
109
110         ObjectName pattern = ObjectNameUtil.createRuntimeBeanPattern(null, instanceName);
111         assertPattern(on, pattern);
112     }
113
114     @Test
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));
120
121         assertEquals(mi, ObjectNameUtil.fromON(on, ObjectNameUtil.TYPE_MODULE));
122     }
123
124     @Test
125     public void testChecks() throws Exception {
126         final ObjectName on = ObjectNameUtil.createON("customDomain", ObjectNameUtil.TYPE_KEY, ObjectNameUtil.TYPE_MODULE);
127
128         assertFailure(new Runnable() {
129             @Override
130             public void run() {
131                 ObjectNameUtil.checkTypeOneOf(on, ObjectNameUtil.TYPE_RUNTIME_BEAN, ObjectNameUtil.TYPE_CONFIG_TRANSACTION);
132             }
133         }, IllegalArgumentException.class);
134
135         assertFailure(new Runnable() {
136             @Override
137             public void run() {
138                 ObjectNameUtil.checkType(on, ObjectNameUtil.TYPE_RUNTIME_BEAN);
139             }
140         }, IllegalArgumentException.class);
141
142         assertFailure(new Runnable() {
143             @Override
144             public void run() {
145                 ObjectNameUtil.checkDomain(on);
146             }
147         }, IllegalArgumentException.class);
148     }
149
150     private void assertFailure(final Runnable test, final Class<? extends Exception> ex) {
151         try {
152             test.run();
153         } catch(Exception e) {
154             assertTrue("Failed with wrong exception: " + Throwables.getStackTraceAsString(e),
155                     e.getClass().isAssignableFrom(ex));
156             return;
157         }
158
159         fail(test + " should have failed on " + ex);
160     }
161
162     @Test(expected = IllegalArgumentException.class)
163     public void testCreateON() throws Exception {
164         ObjectNameUtil.createON(">}+!#");
165     }
166
167     @Test(expected = IllegalArgumentException.class)
168     public void testCreateON2() throws Exception {
169         Map<String, String> map = new HashMap<>();
170         ObjectNameUtil.createON(">}+!#", map);
171     }
172 }