package org.oddjob.jmx.handlers; import java.util.Map; import junit.framework.TestCase; import org.oddjob.Describeable; import org.oddjob.arooa.ArooaSession; import org.oddjob.arooa.life.ClassLoaderClassResolver; import org.oddjob.arooa.standard.StandardArooaSession; import org.oddjob.jmx.RemoteOperation; import org.oddjob.jmx.client.ClientHandlerResolver; import org.oddjob.jmx.client.ClientInterfaceHandlerFactory; import org.oddjob.jmx.client.MockClientSideToolkit; import org.oddjob.jmx.server.MockServerSession; import org.oddjob.jmx.server.MockServerSideToolkit; import org.oddjob.jmx.server.ServerInterfaceHandler; import org.oddjob.jmx.server.ServerSession; public class DescribeableHandlerFactoryTest extends TestCase { private class OurClientToolkit extends MockClientSideToolkit { ServerInterfaceHandler serverHandler; @SuppressWarnings("unchecked") @Override public <T> T invoke(RemoteOperation<T> remoteOperation, Object... args) throws Throwable { return (T) serverHandler.invoke(remoteOperation, args); } } private class OurServerToolkit extends MockServerSideToolkit { ArooaSession session = new StandardArooaSession(); @Override public ServerSession getServerSession() { return new MockServerSession() { @Override public ArooaSession getArooaSession() { return session; } }; } } public class Apple { public String getColour() { return "red"; } protected String getType() { return "unknown"; } } public void testAllOperations() { DescribeableHandlerFactory test = new DescribeableHandlerFactory(); ClientHandlerResolver<Describeable> resolver = test.clientHandlerFactory(); ClientInterfaceHandlerFactory<Describeable> clientFactory = resolver.resolve(new ClassLoaderClassResolver(getClass().getClassLoader())); OurClientToolkit clientToolkit = new OurClientToolkit(); OurServerToolkit serverToolkit = new OurServerToolkit(); clientToolkit.serverHandler = test.createServerHandler( new Apple(), serverToolkit); Describeable proxy = clientFactory.createClientHandler(null, clientToolkit); Map<String, String> results = proxy.describe(); assertEquals(2, results.size()); assertEquals("red", results.get("colour")); assertEquals(Apple.class.toString(), results.get("class")); } }