Package org.jboss.test.mx.mxbean.test

Source Code of org.jboss.test.mx.mxbean.test.MXBeanSupportUnitTestCase

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.mx.mxbean.test;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenMBeanAttributeInfo;
import javax.management.openmbean.OpenMBeanInfo;
import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.TabularType;

import junit.framework.Test;
import junit.framework.TestSuite;

import org.jboss.mx.mxbean.MXBeanUtils;
import org.jboss.test.mx.mxbean.support.CollectionsInterface;
import org.jboss.test.mx.mxbean.support.CollectionsMXBeanSupport;
import org.jboss.test.mx.mxbean.support.CollectionsMXBeanSupportMXBean;
import org.jboss.test.mx.mxbean.support.CompositeInterface;
import org.jboss.test.mx.mxbean.support.CompositeMXBeanSupport;
import org.jboss.test.mx.mxbean.support.CompositeMXBeanSupportMXBean;
import org.jboss.test.mx.mxbean.support.SimpleInterface;
import org.jboss.test.mx.mxbean.support.SimpleMXBeanSupport;
import org.jboss.test.mx.mxbean.support.SimpleMXBeanSupportMXBean;
import org.jboss.test.mx.mxbean.support.SimpleObject;
import org.jboss.test.mx.mxbean.support.TestEnum;

/**
* MXBeanSupportUnitTestCase.
*
* @author <a href="adrian@jboss.com">Adrian Brock</a>
* @version $Revision: 85945 $
*/
public class MXBeanSupportUnitTestCase extends AbstractMXBeanTest
{
   private static final TabularType TABLE_STRING_TO_INTEGER = MXBeanUtils.createMapType(String.class, Integer.class);

   public static Test suite()
   {
      return new TestSuite(MXBeanSupportUnitTestCase.class);
   }
  
   public MXBeanSupportUnitTestCase(String name)
   {
      super(name);
   }
  
   public void testGetSimpleAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleMXBeanSupport support = new SimpleMXBeanSupport();
      ObjectName objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);
      OpenType[] types = new OpenType[SimpleInterface.TYPES.length];
      for (int i = 0; i < types.length; ++i)
         types[i] = MXBeanUtils.getOpenType(SimpleInterface.TYPES[i]);
      checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, SimpleInterface.KEYS, types, SimpleInterface.VALUES, SimpleInterface.VALUES, info);
   }
  
   public void testSetSimpleAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleMXBeanSupport support = new SimpleMXBeanSupport();
      ObjectName objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);
      String[] keys = SimpleInterface.KEYS;
      Object[] values = SimpleInterface.VALUES;
      Object[] changedValues = SimpleInterface.CHANGED_VALUES;
      AttributeList list = new AttributeList(keys.length);
      OpenType[] types = new OpenType[SimpleInterface.TYPES.length];
      for (int i = 0; i < types.length; ++i)
      {
         types[i] = MXBeanUtils.getOpenType(SimpleInterface.TYPES[i]);
         String name = getUpperName(keys[i]);
         server.setAttribute(objectName, new Attribute(name, changedValues[i]));
         Attribute attribute = new Attribute(name, values[i]);
         list.add(attribute);
      }
      checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, keys, types, SimpleInterface.CHANGED_VALUES, SimpleInterface.CHANGED_VALUES, info);
     
      setAttributes(server, objectName, list);
      checkAttributes(server, objectName, SimpleMXBeanSupportMXBean.class, support, keys, types, SimpleInterface.VALUES, SimpleInterface.VALUES, info);
   }

   public void testSimpleInvoke() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleMXBeanSupport support = new SimpleMXBeanSupport();
      ObjectName objectName = SimpleMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      assertEquals("olleH", server.invoke(objectName, "echoReverse", new Object[] { "Hello" }, new String[] { String.class.getName() }));
   }

   public void testGetCompositeAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleObject composite = new SimpleObject();
      CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
      ObjectName objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);
      CompositeData data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.VALUES);
      Object[] values = { "Simple", data };
      Object[] realValues = { "Simple", composite };
      checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, CompositeInterface.KEYS, CompositeInterface.TYPES, values, realValues, info);
   }
  
   public void testSetCompositeAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleObject composite = new SimpleObject();
      CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
      ObjectName objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);
      String[] keys = CompositeInterface.KEYS;
      CompositeData data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.VALUES);
      Object[] values = { "Simple", data };
      data = createCompositeData(SimpleInterface.class.getName(), SimpleInterface.KEYS, SimpleInterface.CHANGED_VALUES);
      Object[] changedValues = { "Changed", data };
      AttributeList list = new AttributeList(keys.length);
      for (int i = 0; i < keys.length; ++i)
      {
         String name = getUpperName(keys[i]);
         server.setAttribute(objectName, new Attribute(name, changedValues[i]));
         Attribute attribute = new Attribute(name, values[i]);
         list.add(attribute);
      }
      SimpleObject changed = new SimpleObject();
      changed.setBigDecimal(SimpleInterface.bigDecimalChangedValue);
      changed.setBigInteger(SimpleInterface.bigIntegerChangedValue);
      changed.setBoolean(SimpleInterface.booleanChangedValue);
      changed.setByte(SimpleInterface.byteChangedValue);
      changed.setCharacter(SimpleInterface.characterChangedValue);
      changed.setDate(SimpleInterface.dateChangedValue);
      changed.setDouble(SimpleInterface.doubleChangedValue);
      changed.setFloat(SimpleInterface.floatChangedValue);
      changed.setInteger(SimpleInterface.integerChangedValue);
      changed.setLong(SimpleInterface.longChangedValue);
      changed.setObjectName(SimpleInterface.objectNameChangedValue);
      changed.setPrimitiveBoolean(SimpleInterface.primitiveBooleanChangedValue);
      changed.setPrimitiveByte(SimpleInterface.primitiveByteChangedValue);
      changed.setPrimitiveChar(SimpleInterface.primitiveCharChangedValue);
      changed.setPrimitiveDouble(SimpleInterface.primitiveDoubleChangedValue);
      changed.setPrimitiveFloat(SimpleInterface.primitiveFloatChangedValue);
      changed.setPrimitiveInt(SimpleInterface.primitiveIntChangedValue);
      changed.setPrimitiveLong(SimpleInterface.primitiveLongChangedValue);
      changed.setPrimitiveShort(SimpleInterface.primitiveShortChangedValue);
      changed.setShort(SimpleInterface.shortChangedValue);
      changed.setString(SimpleInterface.stringChangedValue);
      Object[] realChangedValues = { "Changed", changed };
      checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, CompositeInterface.KEYS, CompositeInterface.TYPES, changedValues, realChangedValues, info);
     
      setAttributes(server, objectName, list);
      Object[] realValues = { "Simple", composite };
      checkAttributes(server, objectName, CompositeMXBeanSupportMXBean.class, support, keys, CompositeInterface.TYPES, values, realValues, info);
   }

   public void testCompositeInvoke() throws Exception
   {
      MBeanServer server = createMBeanServer();
      SimpleObject composite = new SimpleObject();
      CompositeMXBeanSupport support = new CompositeMXBeanSupport("Simple", composite);
      ObjectName objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      composite = new SimpleObject();
      composite.setString("hello");
      CompositeData data = (CompositeData) MXBeanUtils.construct(MXBeanUtils.getOpenType(SimpleInterface.class), composite, getName());
      Object actual = server.invoke(objectName, "echoReverse", new Object[] { data }, new String[] { SimpleInterface.class.getName() });
      composite = new SimpleObject();
      composite.setString("olleh");
      CompositeData expected = (CompositeData) MXBeanUtils.construct(MXBeanUtils.getOpenType(SimpleInterface.class), composite, getName());
      checkValueEquals(expected, actual);
   }
  
   public void testGetCollectionAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      String[] array = { "array" };
      Collection<String> collection = new ArrayList<String>();
      collection.add("collection");
      Set<String> set = new LinkedHashSet<String>();
      set.add("set");
      List<String> list = new ArrayList<String>();
      list.add("list");
      Map<String, Integer> map = new LinkedHashMap<String, Integer>();
      map.put("map", 1);
      TestEnum enumeration = TestEnum.FIRST;
      CollectionsMXBeanSupport support = new CollectionsMXBeanSupport(array, collection, set, list, map, enumeration);
      ObjectName objectName = CollectionsMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);
      String[] collectionArray = collection.toArray(new String[collection.size()]);
      String[] setArray = set.toArray(new String[set.size()]);
      String[] listArray = list.toArray(new String[list.size()]);
      TabularDataSupport mapData = new TabularDataSupport(TABLE_STRING_TO_INTEGER);
      CompositeType entryType = TABLE_STRING_TO_INTEGER.getRowType();
      mapData.put(new CompositeDataSupport(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object[] { "map", 1 }));

      Object[] values = { array, collectionArray, setArray, listArray, mapData, TestEnum.FIRST.name() };
      Object[] realValues = { array, collection, set, list, map, enumeration };
      checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, CollectionsInterface.KEYS, CollectionsInterface.TYPES, values, realValues, info);
   }
  
   public void testSetCollectionAttributes() throws Exception
   {
      MBeanServer server = createMBeanServer();
      String[] array = { "array" };
      Collection<String> collection = new ArrayList<String>();
      collection.add("collection");
      Set<String> set = new LinkedHashSet<String>();
      set.add("set");
      List<String> list = new ArrayList<String>();
      list.add("list");
      Map<String, Integer> map = new LinkedHashMap<String, Integer>();
      map.put("map", 1);
      TestEnum enumeration = TestEnum.FIRST;
      CollectionsMXBeanSupport support = new CollectionsMXBeanSupport(array, collection, set, list, map, enumeration);
      ObjectName objectName = CollectionsMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      OpenMBeanInfo info = (OpenMBeanInfo) server.getMBeanInfo(objectName);

      String[] keys = CollectionsInterface.KEYS;
      String[] collectionArray = collection.toArray(new String[collection.size()]);
      String[] setArray = set.toArray(new String[set.size()]);
      String[] listArray = list.toArray(new String[list.size()]);
      TabularDataSupport mapData = new TabularDataSupport(TABLE_STRING_TO_INTEGER);
      CompositeType entryType = TABLE_STRING_TO_INTEGER.getRowType();
      mapData.put(new CompositeDataSupport(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object[] { "map", 1 }));
      Object[] values = { array, collectionArray, setArray, listArray, mapData, TestEnum.FIRST.name() };

      String[] changedArray = { "arrayChanged" };
      Collection<String> changedCollection = new ArrayList<String>();
      changedCollection.add("collectionChanged");
      Set<String> changedSet = new LinkedHashSet<String>();
      changedSet.add("setChanged");
      List<String> changedList = new ArrayList<String>();
      changedList.add("listChanged");

      String[] changedCollectionArray = changedCollection.toArray(new String[changedCollection.size()]);
      String[] changedSetArray = changedSet.toArray(new String[changedSet.size()]);
      String[] changedListArray = changedList.toArray(new String[changedList.size()]);
      TabularDataSupport changedMapData = new TabularDataSupport(TABLE_STRING_TO_INTEGER);
      changedMapData.put(new CompositeDataSupport(entryType, MXBeanUtils.MAP_ITEM_NAMES, new Object[] { "mapChanged", 2 }));
      Object[] changedValues = { changedArray, changedCollectionArray, changedSetArray, changedListArray, changedMapData, TestEnum.SECOND.name() };

      AttributeList attributeList = new AttributeList(keys.length);
      for (int i = 0; i < keys.length; ++i)
      {
         String name = getUpperName(keys[i]);
         server.setAttribute(objectName, new Attribute(name, changedValues[i]));
         Attribute attribute = new Attribute(name, values[i]);
         attributeList.add(attribute);
      }
      Map<String, Integer> changedMap = new LinkedHashMap<String, Integer>();
      changedMap.put("mapChanged", 2);
      Object[] realChangedValues = { changedArray, changedCollection, changedSet, changedList, changedMap, TestEnum.SECOND };
      checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, keys, CollectionsInterface.TYPES, changedValues, realChangedValues, info);
     
      setAttributes(server, objectName, attributeList);
      Object[] realValues = { array, collection, set, list, map, enumeration };
      checkAttributes(server, objectName, CollectionsMXBeanSupportMXBean.class, support, keys, CollectionsInterface.TYPES, values, realValues, info);
   }

   public void testCollectionInvoke() throws Exception
   {
      MBeanServer server = createMBeanServer();
      CollectionsMXBeanSupport support = new CollectionsMXBeanSupport();
      ObjectName objectName = CompositeMXBeanSupportMXBean.REGISTERED_OBJECT_NAME;
      server.registerMBean(support, objectName);
      String[] list = { "one", "two", "three" };
      String[] expected = { "three", "two", "one" };
      Object result = server.invoke(objectName, "echoReverse", new Object[] { list }, new String[] { List.class.getName() });
      checkArrayEquals(expected, result);
   }

   private void checkAttributes(MBeanServer server, ObjectName objectName, Class intf, Object mxbean, String[] keys, OpenType[] types, Object[] values, Object[] realValues, OpenMBeanInfo info) throws Exception
   {
      MBeanAttributeInfo[] attributes = info.getAttributes();

      assertEquals(keys.length, values.length);
      assertEquals(keys.length, types.length);
      assertEquals(keys.length, attributes.length);
     
      Map<String, OpenMBeanAttributeInfo> mapping = new HashMap<String, OpenMBeanAttributeInfo>(attributes.length);
      for (int i = 0; i < attributes.length; ++i)
      {
         OpenMBeanAttributeInfo attribute = (OpenMBeanAttributeInfo) attributes[i];
         String name = attribute.getName();
         mapping.put(name, attribute);
      }
     
      String[] attributeNames = new String[keys.length];
     
      for (int i = 0; i < keys.length; ++i)
      {
         String name = getUpperName(keys[i]);
         OpenMBeanAttributeInfo attribute = mapping.get(name);
         assertNotNull("Could not find key " + name + " in " + mapping.keySet(), attribute);
         Object value = server.getAttribute(objectName, name);
         checkValueEquals(values[i], value);
         Method method = MXBeanUtils.getCompositeDataMethod(intf, keys[i], types[i] == SimpleType.BOOLEAN);
         value = method.invoke(mxbean, null);
         checkValueEquals(realValues[i], value);
         assertEquals(types[i], attribute.getOpenType());
         attributeNames[i] = name;
      }
     
      AttributeList list = server.getAttributes(objectName, attributeNames);
      for (int i = 0; i < keys.length; ++i)
      {
         String name = attributeNames[i];
         OpenMBeanAttributeInfo attribute = mapping.get(name);
         Attribute attr = (Attribute) list.get(i);
         checkValueEquals(values[i], attr.getValue());
         assertEquals(types[i], attribute.getOpenType());
      }
   }

   private void setAttributes(MBeanServer server, ObjectName objectName, AttributeList list) throws Exception
   {
      AttributeList result = server.setAttributes(objectName, list);
      for (int i = 0; i < list.size(); ++i)
      {
         Attribute attribute = (Attribute) list.get(i);
         Object expected = attribute.getValue();
         attribute = (Attribute) result.get(i);
         Object actual = attribute.getValue();
         checkValueEquals(expected, actual);
      }
   }
}
TOP

Related Classes of org.jboss.test.mx.mxbean.test.MXBeanSupportUnitTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.