1 4 package org.oddjob.jmx; 5 6 import java.io.ByteArrayInputStream ; 7 8 import junit.framework.TestCase; 9 10 import org.apache.commons.beanutils.DynaBean; 11 import org.apache.log4j.Logger; 12 import org.oddjob.Helper; 13 import org.oddjob.Oddjob; 14 import org.oddjob.Stoppable; 15 import org.oddjob.Structural; 16 import org.oddjob.arooa.ArooaConstants; 17 import org.oddjob.arooa.ArooaContext; 18 import org.oddjob.arooa.registry.ComponentRegistry; 19 import org.oddjob.arooa.registry.Path; 20 import org.oddjob.framework.Service; 21 import org.oddjob.framework.ServiceWrapper; 22 import org.oddjob.jobs.WaitJob; 23 import org.oddjob.state.JobState; 24 import org.oddjob.structural.ChildHelper; 25 import org.oddjob.structural.StructuralListener; 26 import org.xml.sax.helpers.LocatorImpl ; 27 28 31 public class JMXServerJobTest extends TestCase { 32 private static final Logger logger = Logger.getLogger(JMXServerJobTest.class); 33 34 protected void setUp() { 35 logger.debug("================= " + getName() + " =================="); 36 } 37 38 39 public void testRun() throws Exception { 40 final JMXServerJob server = new JMXServerJob(); 41 server.setRoot(new Object () { 42 public String toString() { 43 return "test"; 44 } 45 }); 46 47 server.setUrl("service:jmx:rmi://"); 48 49 Runnable wrapper = ServiceWrapper.wrapperFor( 50 Service.serviceFor(server)); 51 wrapper.run(); 52 53 ((Stoppable) wrapper).stop(); 54 55 assertEquals(JobState.COMPLETE, Helper.getJobState(wrapper)); 56 } 57 58 public static class Component { 59 public String getFruit() { 60 return "apples"; 61 } 62 } 63 64 65 public void testLinkedServers() throws Exception { 66 ComponentRegistry s2CR = new ComponentRegistry(); 68 Component comp1 = new Component(); 69 s2CR.register("fred", comp1); 70 71 ArooaContext s2AC = new ArooaContext(); 72 s2AC.set(ArooaConstants.COMPONENT_REGISTRY, s2CR); 73 74 JMXServerJob server2 = new JMXServerJob(); 75 server2.setRoot(comp1); 76 server2.setContext(s2AC); 77 server2.setUrl("service:jmx:rmi://"); 78 server2.start(); 79 80 ComponentRegistry s1CR = new ComponentRegistry(); 82 ArooaContext s1AC = new ArooaContext(); 83 s1AC.set(ArooaConstants.COMPONENT_REGISTRY, s1CR); 84 85 JMXClientJob client = new JMXClientJob(); 87 s1CR.register("client", client); 88 client.setContext(s1AC); 89 client.setUrl(server2.getAddress()); 90 client.run(); 91 92 JMXServerJob server1 = new JMXServerJob(); 94 95 server1.setRoot(client); 96 server1.setUrl("service:jmx:rmi://"); 97 server1.start(); 98 99 Object o = s1CR.objectForPath(new Path("client/fred")); 100 assertNotNull(o); 101 DynaBean db = (DynaBean) o; 102 assertEquals("apples", db.get("fruit")); 103 104 client.stop(); 105 server1.stop(); 106 server2.stop(); 107 } 108 109 114 public void testNestedOddjob() throws Exception { 115 final String xml = "<oddjob><echo name='Test' id='echo' text='Hello'/></oddjob>"; 116 117 final Oddjob oj = new Oddjob(); 118 119 ComponentRegistry cr = new ComponentRegistry(); 120 cr.register("oj", oj); 121 ArooaContext ac = new ArooaContext(); 122 ac.set(ArooaConstants.COMPONENT_REGISTRY, cr); 123 124 oj.setContext(ac); 125 126 JMXServerJob server = new JMXServerJob(); 127 server.setRoot(oj); 128 server.setContext(ac); 129 server.setUrl("service:jmx:rmi://"); 130 server.start(); 131 132 JMXClientJob client = new JMXClientJob(); 134 client.setUrl(server.getAddress()); 135 client.run(); 136 137 oj.setInput(new ByteArrayInputStream (xml.getBytes())); 138 oj.run(); 139 140 Object o = client.lookup("oj"); 141 assertNotNull(o); 142 143 while (client.lookup("oj/echo") == null) { 145 try { 146 Thread.sleep(10000); 147 } catch (Exception e) {} 148 Thread.yield(); 149 } 150 151 assertNotNull("Test", client.lookup("oj/echo").toString()); 153 154 client.stop(); 155 server.stop(); 156 157 } 158 159 class MyFolder implements Structural { 160 int level; 161 int number; 162 MyFolder(int number, int level) { 163 this.number = number; 164 this.level = level; 165 } 166 ChildHelper childHelper = new ChildHelper(this); 167 public void addStructuralListener(StructuralListener listener) { 168 childHelper.addStructuralListener(listener); 169 } 170 public void removeStructuralListener(StructuralListener listener) { 171 childHelper.removeStructuralListener(listener); 172 173 } 174 private void addChildren(int number, int levels, int level) { 175 if (levels == 0) { 176 return; 177 } 178 for (int i = 0; i < number; ++i) { 179 MyFolder child = new MyFolder(i, level); 180 childHelper.addChild(child); 181 child.addChildren(number, levels - 1, level + 1); 182 } 183 } 184 185 void addChildren(int number, int levels) { 186 addChildren(number, levels, level); 187 } 188 189 void removeChildren() { 190 childHelper.destroyAll(); 191 } 192 public String toString() { 193 return ("[" + number + ", " + level + "]"); 194 } 195 } 196 197 198 public void testLotsOfStructural() throws Exception { 199 200 MyFolder folder = new MyFolder(0, 0); 201 202 JMXServerJob server = new JMXServerJob(); 203 server.setRoot(folder); 204 server.setUrl("service:jmx:rmi://"); 205 server.start(); 206 207 JMXClientJob client = new JMXClientJob(); 209 client.setUrl(server.getAddress()); 210 client.run(); 211 212 Object proxy = ChildHelper.getChildren(client)[0]; 213 214 folder.addChildren(5, 3); 215 216 WaitForChildren w = new WaitForChildren(proxy); 217 w.waitFor(5); 218 219 folder.removeChildren(); 220 221 w.waitFor(0); 222 223 client.stop(); 224 server.stop(); 225 } 226 227 228 public void testDestroyServer() throws Exception { 229 230 MyFolder folder = new MyFolder(0, 0); 231 folder.addChildren(3, 2); 232 233 JMXServerJob server = new JMXServerJob(); 234 server.setRoot(folder); 235 server.setUrl("service:jmx:rmi://"); 236 server.start(); 237 238 JMXClientJob client = new JMXClientJob(); 240 client.setUrl(server.getAddress()); 241 client.run(); 242 243 Object proxy = ChildHelper.getChildren(client)[0]; 244 245 WaitForChildren w = new WaitForChildren(proxy); 246 w.waitFor(3); 247 248 server.stop(); 249 250 WaitJob wj = new WaitJob(); 251 wj.setState("not complete"); 252 wj.setFor(client); 253 wj.run(); 254 255 assertEquals(JobState.NOT_COMPLETE, client.lastJobStateEvent().getJobState()); 256 } 257 258 public void testBounceOddjob() throws Exception { 262 final String xml = "<oddjob><echo id='test' text='Hello'/></oddjob>"; 263 264 final Oddjob oj = new Oddjob(); 265 266 ComponentRegistry cr = new ComponentRegistry(); 267 cr.register("oj", oj); 268 ArooaContext ac = new ArooaContext(); 269 ac.set(ArooaConstants.COMPONENT_REGISTRY, cr); 270 ac.setLocator(new LocatorImpl ()); 272 273 oj.setContext(ac); 274 275 final JMXServerJob server = new JMXServerJob(); 276 server.setContext(ac); 277 server.setRoot(oj); 278 server.setUrl("service:jmx:rmi://"); 279 server.start(); 280 281 oj.setInput(new ByteArrayInputStream (xml.getBytes())); 282 oj.run(); 283 oj.hardReset(); 284 285 oj.setInput(new ByteArrayInputStream (xml.getBytes())); 287 oj.run(); 288 server.stop(); 289 assertEquals(JobState.COMPLETE, oj.lastJobStateEvent().getJobState()); 290 } 291 292 } 293 | Popular Tags |