KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > mx > mxbean > test > MXBeanSupportUnitTestCase


1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2006, JBoss Inc., and individual contributors as indicated
4 * by the @authors tag. See the copyright.txt in the distribution for a
5 * full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */

22 package org.jboss.test.mx.mxbean.test;
23
24 import java.lang.reflect.Method JavaDoc;
25 import java.util.ArrayList JavaDoc;
26 import java.util.Collection JavaDoc;
27 import java.util.HashMap JavaDoc;
28 import java.util.LinkedHashMap JavaDoc;
29 import java.util.LinkedHashSet JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.Map JavaDoc;
32 import java.util.Set JavaDoc;
33
34 import javax.management.Attribute JavaDoc;
35 import javax.management.AttributeList JavaDoc;
36 import javax.management.MBeanAttributeInfo JavaDoc;
37 import javax.management.MBeanServer JavaDoc;
38 import javax.management.ObjectName JavaDoc;
39 import javax.management.openmbean.CompositeData JavaDoc;
40 import javax.management.openmbean.CompositeDataSupport JavaDoc;
41 import javax.management.openmbean.CompositeType JavaDoc;
42 import javax.management.openmbean.OpenMBeanAttributeInfo JavaDoc;
43 import javax.management.openmbean.OpenMBeanInfo JavaDoc;
44 import javax.management.openmbean.OpenType JavaDoc;
45 import javax.management.openmbean.SimpleType JavaDoc;
46 import javax.management.openmbean.TabularDataSupport JavaDoc;
47 import javax.management.openmbean.TabularType JavaDoc;
48
49 import junit.framework.Test;
50 import junit.framework.TestSuite;
51
52 import org.jboss.mx.mxbean.MXBeanUtils;
53 import org.jboss.test.mx.mxbean.support.CollectionsInterface;
54 import org.jboss.test.mx.mxbean.support.CollectionsMXBeanSupport;
55 import org.jboss.test.mx.mxbean.support.CollectionsMXBeanSupportMXBean;
56 import org.jboss.test.mx.mxbean.support.CompositeInterface;
57 import org.jboss.test.mx.mxbean.support.CompositeMXBeanSupport;
58 import org.jboss.test.mx.mxbean.support.CompositeMXBeanSupportMXBean;
59 import org.jboss.test.mx.mxbean.support.SimpleInterface;
60 import org.jboss.test.mx.mxbean.support.SimpleMXBeanSupport;
61 import org.jboss.test.mx.mxbean.support.SimpleMXBeanSupportMXBean;
62 import org.jboss.test.mx.mxbean.support.SimpleObject;
63 import org.jboss.test.mx.mxbean.support.TestEnum;
64
65 /**
66  * MXBeanSupportUnitTestCase.
67  *
68  * @author <a HREF="adrian@jboss.com">Adrian Brock</a>
69  * @version $Revision: 1.1 $
70  */

71 public class MXBeanSupportUnitTestCase extends AbstractMXBeanTest
72 {
73    private static final TabularType JavaDoc TABLE_STRING_TO_INTEGER = MXBeanUtils.createMapType(String JavaDoc.class, Integer JavaDoc.class);
74
75    public static Test suite()
76    {
77       return new TestSuite(MXBeanSupportUnitTestCase.class);
78    }
79    
80    public MXBeanSupportUnitTestCase(String JavaDoc name)
81    {
82       super(name);
83    }
84    
85    public void testGetSimpleAttributes() throws Exception JavaDoc
86    {
87       MBeanServer JavaDoc server = createMBeanServer();
88       SimpleMXBeanSupport support = new SimpleMXBeanSupport();
89       ObjectName JavaDoc objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
90       server.registerMBean(support, objectName);
91       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
92       OpenType JavaDoc[] types = new OpenType JavaDoc[SimpleInterface.TYPES.length];
93       for (int i = 0; i < types.length; ++i)
94          types[i] = MXBeanUtils.getOpenType(SimpleInterface.TYPES[i]);
95       checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, SimpleInterface.KEYS, types, SimpleInterface.VALUES, SimpleInterface.VALUES, info);
96    }
97    
98    public void testSetSimpleAttributes() throws Exception JavaDoc
99    {
100       MBeanServer JavaDoc server = createMBeanServer();
101       SimpleMXBeanSupport support = new SimpleMXBeanSupport();
102       ObjectName JavaDoc objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
103       server.registerMBean(support, objectName);
104       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
105       String JavaDoc[] keys = SimpleInterface.KEYS;
106       Object JavaDoc[] values = SimpleInterface.VALUES;
107       Object JavaDoc[] changedValues = SimpleInterface.CHANGED_VALUES;
108       AttributeList JavaDoc list = new AttributeList JavaDoc(keys.length);
109       OpenType JavaDoc[] types = new OpenType JavaDoc[SimpleInterface.TYPES.length];
110       for (int i = 0; i < types.length; ++i)
111       {
112          types[i] = MXBeanUtils.getOpenType(SimpleInterface.TYPES[i]);
113          String JavaDoc name = getUpperName(keys[i]);
114          server.setAttribute(objectName, new Attribute JavaDoc(name, changedValues[i]));
115          Attribute JavaDoc attribute = new Attribute JavaDoc(name, values[i]);
116          list.add(attribute);
117       }
118       checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, keys, types, SimpleInterface.CHANGED_VALUES, SimpleInterface.CHANGED_VALUES, info);
119       
120       setAttributes(server, objectName, list);
121       checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, keys, types, SimpleInterface.VALUES, SimpleInterface.VALUES, info);
122    }
123
124    public void testSimpleInvoke() throws Exception JavaDoc
125    {
126       MBeanServer JavaDoc server = createMBeanServer();
127       SimpleMXBeanSupport support = new SimpleMXBeanSupport();
128       ObjectName JavaDoc objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
129       server.registerMBean(support, objectName);
130       assertEquals("olleH", server.invoke(objectName, "echoReverse", new Object JavaDoc[] { "Hello" }, new String JavaDoc[] { String JavaDoc.class.getName() }));
131    }
132
133    public void testGetCompositeAttributes() throws Exception JavaDoc
134    {
135       MBeanServer JavaDoc server = createMBeanServer();
136       SimpleObject composite = new SimpleObject();
137       CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
138       ObjectName JavaDoc objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
139       server.registerMBean(support, objectName);
140       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
141       CompositeData JavaDoc data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.VALUES);
142       Object JavaDoc[] values = { "Simple", data };
143       Object JavaDoc[] realValues = { "Simple", composite };
144       checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, CompositeInterface.KEYS, CompositeInterface.TYPES, values, realValues, info);
145    }
146    
147    public void testSetCompositeAttributes() throws Exception JavaDoc
148    {
149       MBeanServer JavaDoc server = createMBeanServer();
150       SimpleObject composite = new SimpleObject();
151       CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
152       ObjectName JavaDoc objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
153       server.registerMBean(support, objectName);
154       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
155       String JavaDoc[] keys = CompositeInterface.KEYS;
156       CompositeData JavaDoc data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.VALUES);
157       Object JavaDoc[] values = { "Simple", data };
158       data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.CHANGED_VALUES);
159       Object JavaDoc[] changedValues = { "Changed", data };
160       AttributeList JavaDoc list = new AttributeList JavaDoc(keys.length);
161       for (int i = 0; i < keys.length; ++i)
162       {
163          String JavaDoc name = getUpperName(keys[i]);
164          server.setAttribute(objectName, new Attribute JavaDoc(name, changedValues[i]));
165          Attribute JavaDoc attribute = new Attribute JavaDoc(name, values[i]);
166          list.add(attribute);
167       }
168       SimpleObject changed = new SimpleObject();
169       changed.setBigDecimal(SimpleInterface.bigDecimalChangedValue);
170       changed.setBigInteger(SimpleInterface.bigIntegerChangedValue);
171       changed.setBoolean(SimpleInterface.booleanChangedValue);
172       changed.setByte(SimpleInterface.byteChangedValue);
173       changed.setCharacter(SimpleInterface.characterChangedValue);
174       changed.setDate(SimpleInterface.dateChangedValue);
175       changed.setDouble(SimpleInterface.doubleChangedValue);
176       changed.setFloat(SimpleInterface.floatChangedValue);
177       changed.setInteger(SimpleInterface.integerChangedValue);
178       changed.setLong(SimpleInterface.longChangedValue);
179       changed.setObjectName(SimpleInterface.objectNameChangedValue);
180       changed.setPrimitiveBoolean(SimpleInterface.primitiveBooleanChangedValue);
181       changed.setPrimitiveByte(SimpleInterface.primitiveByteChangedValue);
182       changed.setPrimitiveChar(SimpleInterface.primitiveCharChangedValue);
183       changed.setPrimitiveDouble(SimpleInterface.primitiveDoubleChangedValue);
184       changed.setPrimitiveFloat(SimpleInterface.primitiveFloatChangedValue);
185       changed.setPrimitiveInt(SimpleInterface.primitiveIntChangedValue);
186       changed.setPrimitiveLong(SimpleInterface.primitiveLongChangedValue);
187       changed.setPrimitiveShort(SimpleInterface.primitiveShortChangedValue);
188       changed.setShort(SimpleInterface.shortChangedValue);
189       changed.setString(SimpleInterface.stringChangedValue);
190       Object JavaDoc[] realChangedValues = { "Changed", changed };
191       checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, CompositeInterface.KEYS, CompositeInterface.TYPES, changedValues, realChangedValues, info);
192       
193       setAttributes(server, objectName, list);
194       Object JavaDoc[] realValues = { "Simple", composite };
195       checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, keys, CompositeInterface.TYPES, values, realValues, info);
196    }
197
198    public void testCompositeInvoke() throws Exception JavaDoc
199    {
200       MBeanServer JavaDoc server = createMBeanServer();
201       SimpleObject composite = new SimpleObject();
202       CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
203       ObjectName JavaDoc objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
204       server.registerMBean(support, objectName);
205       composite = new SimpleObject();
206       composite.setString("hello");
207       CompositeData JavaDoc data = (CompositeData JavaDoc) MXBeanUtils.construct(MXBeanUtils.getOpenType(SimpleInterface.class), composite, getName());
208       Object JavaDoc actual = server.invoke(objectName, "echoReverse", new Object JavaDoc[] { data }, new String JavaDoc[] { SimpleInterface.class.getName() });
209       composite = new SimpleObject();
210       composite.setString("olleh");
211       CompositeData JavaDoc expected = (CompositeData JavaDoc) MXBeanUtils.construct(MXBeanUtils.getOpenType(SimpleInterface.class), composite, getName());
212       checkValueEquals(expected, actual);
213    }
214    
215    public void testGetCollectionAttributes() throws Exception JavaDoc
216    {
217       MBeanServer JavaDoc server = createMBeanServer();
218       String JavaDoc[] array = { "array" };
219       Collection JavaDoc<String JavaDoc> collection = new ArrayList JavaDoc<String JavaDoc>();
220       collection.add("collection");
221       Set JavaDoc<String JavaDoc> set = new LinkedHashSet JavaDoc<String JavaDoc>();
222       set.add("set");
223       List JavaDoc<String JavaDoc> list = new ArrayList JavaDoc<String JavaDoc>();
224       list.add("list");
225       Map JavaDoc<String JavaDoc, Integer JavaDoc> map = new LinkedHashMap JavaDoc<String JavaDoc, Integer JavaDoc>();
226       map.put("map", 1);
227       TestEnum enumeration = TestEnum.FIRST;
228       CollectionsMXBeanSupport support = new CollectionsMXBeanSupport(array, collection, set, list, map, enumeration);
229       ObjectName JavaDoc objectName = CollectionsMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
230       server.registerMBean(support, objectName);
231       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
232       String JavaDoc[] collectionArray = collection.toArray(new String JavaDoc[collection.size()]);
233       String JavaDoc[] setArray = set.toArray(new String JavaDoc[set.size()]);
234       String JavaDoc[] listArray = list.toArray(new String JavaDoc[list.size()]);
235       TabularDataSupport JavaDoc mapData = new TabularDataSupport JavaDoc(TABLE_STRING_TO_INTEGER);
236       CompositeType JavaDoc entryType = TABLE_STRING_TO_INTEGER.getRowType();
237       mapData.put(new CompositeDataSupport JavaDoc(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object JavaDoc[] { "map", 1 }));
238
239       Object JavaDoc[] values = { array, collectionArray, setArray, listArray, mapData, TestEnum.FIRST.name() };
240       Object JavaDoc[] realValues = { array, collection, set, list, map, enumeration };
241       checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, CollectionsInterface.KEYS, CollectionsInterface.TYPES, values, realValues, info);
242    }
243    
244    public void testSetCollectionAttributes() throws Exception JavaDoc
245    {
246       MBeanServer JavaDoc server = createMBeanServer();
247       String JavaDoc[] array = { "array" };
248       Collection JavaDoc<String JavaDoc> collection = new ArrayList JavaDoc<String JavaDoc>();
249       collection.add("collection");
250       Set JavaDoc<String JavaDoc> set = new LinkedHashSet JavaDoc<String JavaDoc>();
251       set.add("set");
252       List JavaDoc<String JavaDoc> list = new ArrayList JavaDoc<String JavaDoc>();
253       list.add("list");
254       Map JavaDoc<String JavaDoc, Integer JavaDoc> map = new LinkedHashMap JavaDoc<String JavaDoc, Integer JavaDoc>();
255       map.put("map", 1);
256       TestEnum enumeration = TestEnum.FIRST;
257       CollectionsMXBeanSupport support = new CollectionsMXBeanSupport(array, collection, set, list, map, enumeration);
258       ObjectName JavaDoc objectName = CollectionsMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
259       server.registerMBean(support, objectName);
260       OpenMBeanInfo JavaDoc info = (OpenMBeanInfo JavaDoc) server.getMBeanInfo(objectName);
261
262       String JavaDoc[] keys = CollectionsInterface.KEYS;
263       String JavaDoc[] collectionArray = collection.toArray(new String JavaDoc[collection.size()]);
264       String JavaDoc[] setArray = set.toArray(new String JavaDoc[set.size()]);
265       String JavaDoc[] listArray = list.toArray(new String JavaDoc[list.size()]);
266       TabularDataSupport JavaDoc mapData = new TabularDataSupport JavaDoc(TABLE_STRING_TO_INTEGER);
267       CompositeType JavaDoc entryType = TABLE_STRING_TO_INTEGER.getRowType();
268       mapData.put(new CompositeDataSupport JavaDoc(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object JavaDoc[] { "map", 1 }));
269       Object JavaDoc[] values = { array, collectionArray, setArray, listArray, mapData, TestEnum.FIRST.name() };
270
271       String JavaDoc[] changedArray = { "arrayChanged" };
272       Collection JavaDoc<String JavaDoc> changedCollection = new ArrayList JavaDoc<String JavaDoc>();
273       changedCollection.add("collectionChanged");
274       Set JavaDoc<String JavaDoc> changedSet = new LinkedHashSet JavaDoc<String JavaDoc>();
275       changedSet.add("setChanged");
276       List JavaDoc<String JavaDoc> changedList = new ArrayList JavaDoc<String JavaDoc>();
277       changedList.add("listChanged");
278
279       String JavaDoc[] changedCollectionArray = changedCollection.toArray(new String JavaDoc[changedCollection.size()]);
280       String JavaDoc[] changedSetArray = changedSet.toArray(new String JavaDoc[changedSet.size()]);
281       String JavaDoc[] changedListArray = changedList.toArray(new String JavaDoc[changedList.size()]);
282       TabularDataSupport JavaDoc changedMapData = new TabularDataSupport JavaDoc(TABLE_STRING_TO_INTEGER);
283       changedMapData.put(new CompositeDataSupport JavaDoc(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object JavaDoc[] { "mapChanged", 2 }));
284       Object JavaDoc[] changedValues = { changedArray, changedCollectionArray, changedSetArray, changedListArray, changedMapData, TestEnum.SECOND.name() };
285
286       AttributeList JavaDoc attributeList = new AttributeList JavaDoc(keys.length);
287       for (int i = 0; i < keys.length; ++i)
288       {
289          String JavaDoc name = getUpperName(keys[i]);
290          server.setAttribute(objectName, new Attribute JavaDoc(name, changedValues[i]));
291          Attribute JavaDoc attribute = new Attribute JavaDoc(name, values[i]);
292          attributeList.add(attribute);
293       }
294       Map JavaDoc<String JavaDoc, Integer JavaDoc> changedMap = new LinkedHashMap JavaDoc<String JavaDoc, Integer JavaDoc>();
295       changedMap.put("mapChanged", 2);
296       Object JavaDoc[] realChangedValues = { changedArray, changedCollection, changedSet, changedList, changedMap, TestEnum.SECOND };
297       checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, keys, CollectionsInterface.TYPES, changedValues, realChangedValues, info);
298       
299       setAttributes(server, objectName, attributeList);
300       Object JavaDoc[] realValues = { array, collection, set, list, map, enumeration };
301       checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, keys, CollectionsInterface.TYPES, values, realValues, info);
302    }
303
304    public void testCollectionInvoke() throws Exception JavaDoc
305    {
306       MBeanServer JavaDoc server = createMBeanServer();
307       CollectionsMXBeanSupport support = new CollectionsMXBeanSupport();
308       ObjectName JavaDoc objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
309       server.registerMBean(support, objectName);
310       String JavaDoc[] list = { "one", "two", "three" };
311       String JavaDoc[] expected = { "three", "two", "one" };
312       Object JavaDoc result = server.invoke(objectName, "echoReverse", new Object JavaDoc[] { list }, new String JavaDoc[] { List JavaDoc.class.getName() });
313       checkArrayEquals(expected, result);
314    }
315
316    private void checkAttributes(MBeanServer JavaDoc server, ObjectName JavaDoc objectName, Class JavaDoc intf, Object JavaDoc mxbean, String JavaDoc[] keys, OpenType JavaDoc[] types, Object JavaDoc[] values, Object JavaDoc[] realValues, OpenMBeanInfo JavaDoc info) throws Exception JavaDoc
317    {
318       MBeanAttributeInfo JavaDoc[] attributes = info.getAttributes();
319
320       assertEquals(keys.length, values.length);
321       assertEquals(keys.length, types.length);
322       assertEquals(keys.length, attributes.length);
323       
324       Map JavaDoc<String JavaDoc, OpenMBeanAttributeInfo JavaDoc> mapping = new HashMap JavaDoc<String JavaDoc, OpenMBeanAttributeInfo JavaDoc>(attributes.length);
325       for (int i = 0; i < attributes.length; ++i)
326       {
327          OpenMBeanAttributeInfo JavaDoc attribute = (OpenMBeanAttributeInfo JavaDoc) attributes[i];
328          String JavaDoc name = attribute.getName();
329          mapping.put(name, attribute);
330       }
331       
332       String JavaDoc[] attributeNames = new String JavaDoc[keys.length];
333       
334       for (int i = 0; i < keys.length; ++i)
335       {
336          String JavaDoc name = getUpperName(keys[i]);
337          OpenMBeanAttributeInfo JavaDoc attribute = mapping.get(name);
338          assertNotNull("Could not find key " + name + " in " + mapping.keySet(), attribute);
339          Object JavaDoc value = server.getAttribute(objectName, name);
340          checkValueEquals(values[i], value);
341          Method JavaDoc method = MXBeanUtils.getCompositeDataMethod(intf, keys[i], types[i] == SimpleType.BOOLEAN);
342          value = method.invoke(mxbean, null);
343          checkValueEquals(realValues[i], value);
344          assertEquals(types[i], attribute.getOpenType());
345          attributeNames[i] = name;
346       }
347       
348       AttributeList JavaDoc list = server.getAttributes(objectName, attributeNames);
349       for (int i = 0; i < keys.length; ++i)
350       {
351          String JavaDoc name = attributeNames[i];
352          OpenMBeanAttributeInfo JavaDoc attribute = mapping.get(name);
353          Attribute JavaDoc attr = (Attribute JavaDoc) list.get(i);
354          checkValueEquals(values[i], attr.getValue());
355          assertEquals(types[i], attribute.getOpenType());
356       }
357    }
358
359    private void setAttributes(MBeanServer JavaDoc server, ObjectName JavaDoc objectName, AttributeList JavaDoc list) throws Exception JavaDoc
360    {
361       AttributeList JavaDoc result = server.setAttributes(objectName, list);
362       for (int i = 0; i < list.size(); ++i)
363       {
364          Attribute JavaDoc attribute = (Attribute JavaDoc) list.get(i);
365          Object JavaDoc expected = attribute.getValue();
366          attribute = (Attribute JavaDoc) result.get(i);
367          Object JavaDoc actual = attribute.getValue();
368          checkValueEquals(expected, actual);
369       }
370    }
371 }
372
Popular Tags