1 4 package org.oddjob.jmx.client; 5 6 import java.lang.reflect.Proxy ; 7 8 import javax.management.MBeanServer ; 9 import javax.management.MBeanServerFactory ; 10 import javax.management.ObjectName ; 11 12 import junit.framework.TestCase; 13 14 import org.apache.commons.beanutils.DynaBean; 15 import org.apache.log4j.Logger; 16 import org.oddjob.arooa.registry.ComponentRegistry; 17 import org.oddjob.jmx.server.DynaBeanInfo; 18 import org.oddjob.jmx.server.InterfaceManagerFactory; 19 import org.oddjob.jmx.server.OddjobMBean; 20 import org.oddjob.jmx.server.RemoteOddjobInfo; 21 import org.oddjob.jmx.server.ServerContext; 22 import org.oddjob.jmx.server.ServerModel; 23 import org.oddjob.logging.ConsoleArchiver; 24 import org.oddjob.logging.LogArchiver; 25 import org.oddjob.logging.LogHelper; 26 import org.oddjob.logging.LogEvent; 27 import org.oddjob.logging.LogLevel; 28 import org.oddjob.logging.LogListener; 29 import org.oddjob.util.ThreadManager; 30 31 public class RemoteLogPollerTest extends TestCase { 32 private static final Logger logger = Logger.getLogger(RemoteLogPollerTest.class); 33 34 private ComponentRegistry cr; 35 36 public void setUp() { 37 logger.debug("================== Running " + getName() + "================"); 38 System.setProperty("mx4j.log.priority", "trace"); 39 cr = new ComponentRegistry(); 40 } 41 42 public class LogThing { 43 public String getlogger() { return "foo"; } 44 } 45 46 public class NoLogThing { 47 } 48 49 public class Archivers implements LogArchiver, ConsoleArchiver { 50 public void addLogListener(LogListener l, Object component, LogLevel level, long from, int max) { 51 l.logEvent(new LogEvent("foo", 0, LogLevel.INFO, "Hello")); 52 } 53 public void removeLogListener(LogListener l, Object component) { 54 } 55 public void addConsoleListener(LogListener l, Object compoennt, long from, int max) { 56 l.logEvent(new LogEvent("console", 0, LogLevel.INFO, "Goodbye")); 57 } 58 public void removeConsoleListener(LogListener l, Object component) { 59 } 60 public String consoleIdFor(Object component) { return "console"; } 61 }; 62 63 class LL implements LogListener { 64 String text; 65 public void logEvent(LogEvent logEvent) { 66 text = logEvent.getMessage(); 67 } 68 } 69 70 class MyServerContext extends ServerContext { 71 MyServerContext(ServerModel m) { super(m); } 72 Archivers archivers = new Archivers(); 73 public ConsoleArchiver getConsoleArchiver() { 74 return archivers; 75 } 76 public LogArchiver getLogArchiver() { 77 return archivers; 78 } 79 } 80 81 public void testLogging() throws Exception { 82 LogThing component = new LogThing(); 83 InterfaceManagerFactory imf = new InterfaceManagerFactory(); 84 imf.addInterfaceInfo(new DynaBeanInfo()); 85 imf.addInterfaceInfo(new RemoteOddjobInfo()); 86 87 ServerModel sm = new ServerModel("//test/", 88 new ThreadManager(), 89 imf); 90 91 OddjobMBean mb = new OddjobMBean(component, null, 92 new MyServerContext(sm)); 93 94 MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 95 ObjectName on = new ObjectName ("oddjob:name=whatever"); 96 mbs.registerMBean(mb, on); 97 98 Object proxy = ClientNode.createProxyFor(on, mbs, this, cr, new DummyNP()); 99 assertTrue(proxy instanceof DynaBean); 100 assertEquals("foo", LogHelper.getLogger(proxy)); 101 102 ClientNode cn = (ClientNode) Proxy.getInvocationHandler(proxy); 103 104 assertEquals("console", cn.consoleId()); 105 106 RemoteLogPoller poller = new RemoteLogPoller(proxy, 10, 10); 107 108 LL cl = new LL(); 109 LL ll = new LL(); 110 111 poller.addConsoleListener(cl, proxy, -1, 100); 112 poller.addLogListener(ll, proxy, LogLevel.DEBUG, -1, 5); 113 114 poller.poll(); 115 116 assertEquals("Hello", ll.text); 117 assertEquals("Goodbye", cl.text); 118 119 } 120 121 public void testNotLogging() throws Exception { 122 NoLogThing component = new NoLogThing(); 123 InterfaceManagerFactory imf = new InterfaceManagerFactory(); 124 imf.addInterfaceInfo(new DynaBeanInfo()); 125 imf.addInterfaceInfo(new RemoteOddjobInfo()); 126 127 ServerModel sm = new ServerModel("//test/", 128 new ThreadManager(), 129 imf); 130 131 OddjobMBean mb = new OddjobMBean(component, null, 132 new MyServerContext(sm)); 133 134 135 MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 136 ObjectName on = new ObjectName ("oddjob:name=whatever"); 137 mbs.registerMBean(mb, on); 138 139 Object proxy = ClientNode.createProxyFor(on, mbs, this, cr, new DummyNP()); 140 assertTrue(proxy instanceof DynaBean); 141 assertEquals(null, LogHelper.getLogger(proxy)); 142 143 ClientNode cn = (ClientNode) Proxy.getInvocationHandler(proxy); 144 145 assertEquals("console", cn.consoleId()); 146 147 RemoteLogPoller poller = new RemoteLogPoller(proxy, 10, 10); 148 149 LL cl = new LL(); 150 LL ll = new LL(); 151 152 poller.addConsoleListener(cl, proxy, -1, 100); 153 poller.addLogListener(ll, proxy, LogLevel.DEBUG, -1, 5); 154 155 poller.poll(); 156 157 assertEquals("No Log available", ll.text); 158 assertEquals("Goodbye", cl.text); 159 160 } 161 } 162 | Popular Tags |