package org.oddjob.jmx.general; import java.lang.management.ManagementFactory; import javax.management.MBeanServer; import javax.management.ObjectName; import junit.framework.TestCase; import org.oddjob.arooa.beanutils.BeanUtilsPropertyAccessor; import org.oddjob.arooa.convert.DefaultConverter; import org.oddjob.arooa.life.ClassLoaderClassResolver; import org.oddjob.arooa.reflect.PropertyAccessor; import org.oddjob.arooa.utils.DateHelper; import org.oddjob.logging.LogEvent; import org.oddjob.logging.LogLevel; import org.oddjob.logging.LogListener; import org.oddjob.logging.log4j.Log4jArchiver; import org.oddjob.script.ConvertableArguments; import org.oddjob.script.InvokerArguments; public class SimpleMBeanNodeTest extends TestCase { ObjectName objectName; MBeanServer mBeanServer; Vendor simple = new Vendor("Hay Medows"); protected void setUp() throws Exception { objectName = new ObjectName("fruit:type=vendor,name=Pickles"); mBeanServer = ManagementFactory.getPlatformMBeanServer(); mBeanServer.registerMBean(simple, objectName); } @Override protected void tearDown() throws Exception { mBeanServer.unregisterMBean(objectName); } public void testInvoking() throws Exception { SimpleMBeanNode test = new SimpleMBeanNode( objectName, mBeanServer, new ClassLoaderClassResolver(getClass().getClassLoader())); InvokerArguments arguments = new ConvertableArguments( new DefaultConverter(), "apples", "2012-08-01", 42); double result = (Double) test.invoke("quote", arguments); assertEquals(94.23, result, 0.001); assertEquals("apples", simple.fruit); assertEquals(DateHelper.parseDate("2012-08-01"), simple.delivery); assertEquals(42, simple.quantity); } public void testGetProperty() throws Exception { SimpleMBeanNode test = new SimpleMBeanNode( objectName, mBeanServer, new ClassLoaderClassResolver(getClass().getClassLoader())); PropertyAccessor accessor = new BeanUtilsPropertyAccessor(); String result = accessor.getProperty(test, "Farm", String.class); assertEquals("Hay Medows", result); accessor.setProperty(test, "Rating", 4.2); assertEquals(4.2, simple.rating, 0.01); } public void testLogEnabled() throws Exception { final StringBuilder builder = new StringBuilder(); class TestListener implements LogListener { public void logEvent(LogEvent logEvent) { builder.append(logEvent.getMessage() + "\n"); } } SimpleMBeanNode test = new SimpleMBeanNode( objectName, mBeanServer, new ClassLoaderClassResolver(getClass().getClassLoader())); Log4jArchiver archiver = new Log4jArchiver(test, "%m"); archiver.addLogListener(new TestListener(), test, LogLevel.DEBUG, -1, 10000); test.initialise(); System.out.println(builder.toString()); assertTrue(builder.length() > 0); } public void testGetMemory() throws Exception { SimpleMBeanNode test = new SimpleMBeanNode( new ObjectName("java.lang:type=Memory"), mBeanServer, new ClassLoaderClassResolver(getClass().getClassLoader())); BeanUtilsPropertyAccessor accessor = new BeanUtilsPropertyAccessor(); Object heapMemory = accessor.getProperty(test, "HeapMemoryUsage"); assertEquals("CompositeData: [committed, init, max, used]", heapMemory.toString()); Long used = accessor.getProperty(test, "HeapMemoryUsage.used", Long.class); assertTrue(used.longValue() > 0L); } }