1 package tests.jfun.yan.monitoring; 2 3 import java.lang.reflect.Constructor ; 4 import java.lang.reflect.Method ; 5 import java.util.HashMap ; 6 7 import jfun.yan.ComponentInstantiationException; 8 import jfun.yan.Components; 9 import jfun.yan.Container; 10 import jfun.yan.monitoring.ComponentMonitor; 11 import jfun.yan.monitoring.ComponentMonitorQueue; 12 import jfun.yan.monitoring.CtorMonitor; 13 import jfun.yan.monitoring.MethodMonitor; 14 import jfun.yan.monitoring.MonitoringContainer; 15 import jfun.yan.monitoring.Monitors; 16 import junit.framework.TestCase; 17 18 public class MonitoredContainerTestCase extends TestCase { 19 private static final Integer arg0 = new Integer (11); 20 private static final String arg1 = "hello"; 21 private static final String arg2 = "world"; 22 public void testMonitoringContainer(){ 23 final BookmarkMonitor mon = new BookmarkMonitor(){ 24 private void verifyCtorArgs(Object [] args){ 25 assertEquals(2, args.length); 26 assertEquals(arg0, args[0]); 27 assertEquals(arg1, args[1]); 28 } 29 public void constructing(Constructor ctor, Object [] args) { 30 assertEquals(MonitoredObject.class, ctor.getDeclaringClass()); 32 verifyCtorArgs(args); 33 super.constructing(ctor, args); 34 } 35 public void constructionFailed(Constructor ctor, Object [] args, Throwable e, long duration) { 36 assertEquals(MonitoredObject.class, ctor.getDeclaringClass()); 38 verifyCtorArgs(args); 39 assertEquals(IllegalStateException .class, e.getClass()); 40 super.constructionFailed(ctor, args, e, duration); 41 } 42 private void verifyFactory(Object obj, Method mtd, Object [] args){ 43 assertNull(obj); 44 assertEquals("instance",mtd.getName()); 45 assertEquals(3, args.length); 46 assertEquals(arg0, args[0]); 47 assertEquals(arg1, args[1]); 48 assertEquals(arg0, args[0]); 49 assertEquals(arg2, args[2]); 50 } 51 public void invoked(Object obj, Method mtd, Object [] args, Object result, long duration) { 52 verifyFactory(obj, mtd, args); 54 final MonitoredObject mo = (MonitoredObject)result; 55 assertEquals(arg0.intValue(), mo.getId()); 56 assertEquals(arg1, mo.getName()); 57 assertEquals(arg2, mo.getDesc()); 58 super.invoked(obj, mtd, args, result, duration); 59 } 60 public void invoking(Object obj, Method mtd, Object [] args) { 61 verifyFactory(obj, mtd, args); 63 super.invoking(obj, mtd, args); 64 } 65 }; 66 testMonitor(mon, mon); 67 final BookmarkMonitor mon1 = new BookmarkMonitor(){ 68 private void verifyCtorArgs(Object [] args){ 69 assertEquals(2, args.length); 70 assertEquals(arg0, args[0]); 71 assertEquals(arg1, args[1]); 72 } 73 public void constructing(Constructor ctor, Object [] args) { 74 assertEquals(MonitoredObject.class, ctor.getDeclaringClass()); 76 verifyCtorArgs(args); 77 super.constructing(ctor, args); 78 } 79 public void constructionFailed(Constructor ctor, Object [] args, Throwable e, long duration) { 80 assertEquals(MonitoredObject.class, ctor.getDeclaringClass()); 82 verifyCtorArgs(args); 83 assertEquals(IllegalStateException .class, e.getClass()); 84 super.constructionFailed(ctor, args, e, duration); 85 } 86 }; 87 final BookmarkMonitor mon2 = new BookmarkMonitor(){ 88 private void verifyFactory(Object obj, Method mtd, Object [] args){ 89 assertNull(obj); 90 assertEquals("instance",mtd.getName()); 91 assertEquals(3, args.length); 92 assertEquals(arg0, args[0]); 93 assertEquals(arg1, args[1]); 94 assertEquals(arg0, args[0]); 95 assertEquals(arg2, args[2]); 96 } 97 public void invoked(Object obj, Method mtd, Object [] args, Object result, long duration) { 98 verifyFactory(obj, mtd, args); 100 final MonitoredObject mo = (MonitoredObject)result; 101 assertEquals(arg0.intValue(), mo.getId()); 102 assertEquals(arg1, mo.getName()); 103 assertEquals(arg2, mo.getDesc()); 104 super.invoked(obj, mtd, args, result, duration); 105 } 106 public void invoking(Object obj, Method mtd, Object [] args) { 107 verifyFactory(obj, mtd, args); 109 super.invoking(obj, mtd, args); 110 } 111 }; 112 final HashMap marks = new HashMap (); 113 final CtorMonitor cmon = new CtorMonitor(){ 114 public void constructed(Constructor ctor, Object [] args, Object instance, long duration) { 115 marks.put("constructed", "b"); 117 } 118 119 public void constructing(Constructor ctor, Object [] args) { 120 marks.put("constructing", "a"); 122 } 123 124 public void constructionFailed(Constructor ctor, Object [] args, Throwable e, long duration) { 125 marks.put("constructionFailed", "c"); 127 } 128 }; 129 final MethodMonitor mmon = new MethodMonitor(){ 130 131 public void invocationFailed(Object obj, Method mtd, Object [] args, Throwable err, long duration) { 132 marks.put("invocationFailed", "z"); 133 134 } 135 136 public void invoked(Object obj, Method mtd, Object [] args, Object result, long duration) { 137 marks.put("invoked", "y"); 139 } 140 141 public void invoking(Object obj, Method mtd, Object [] args) { 142 marks.put("invoking", "x"); 143 144 } 145 146 }; 147 final ComponentMonitor mm = new ComponentMonitorQueue() 148 .addCtorMonitor(mon1).addMethodMonitor(mon2) 149 .addCtorMonitor(cmon).addMethodMonitor(mmon) 150 .getComponentMonitor(); 151 testMonitor(mon1, mm); 152 assertEquals("a", marks.get("constructing")); 153 assertEquals("c", marks.get("constructionFailed")); 154 assertNull(marks.get("constructed")); 155 assertEquals("x", marks.get("invoking")); 156 assertEquals("y", marks.get("invoked")); 157 assertNull(marks.get("invocationFailed")); 158 verifyMonitor(mon1); 160 verifyMonitor(mon2); 161 } 162 private void verifyMonitor(BookmarkMonitor mon){ 163 assertTrue(mon.isConstructing()); 164 assertFalse(mon.isConstructed()); 165 assertTrue(mon.isConstructionFailed()); 166 assertTrue(mon.isInvoking()); 167 assertTrue(mon.isInvoked()); 168 assertFalse(mon.isInvocationFailed()); 169 } 170 private void testMonitor(BookmarkMonitor mon, ComponentMonitor m){ 171 final Container yan = new MonitoringContainer(m); 172 yan.registerValue(arg0); 173 yan.registerValue(arg1); 174 yan.registerConstructor("target", MonitoredObject.class); 175 try{ 176 yan.getInstance("target"); 177 fail("should have failed"); 178 } 179 catch(ComponentInstantiationException e){ 180 } 181 assertTrue(mon.isConstructing()); 182 assertFalse(mon.isConstructed()); 183 assertTrue(mon.isConstructionFailed()); 184 assertFalse(mon.isInvoking()); 185 yan.registerComponent("target", 186 new Monitors(m).static_method(MonitoredObject.class, "instance") 187 .withArgument(2, Components.value(arg2))); 188 yan.getInstance("target"); 189 assertTrue(mon.isInvoking()); 190 assertTrue(mon.isInvoked()); 191 assertFalse(mon.isInvocationFailed()); 192 } 193 } 194 | Popular Tags |