1 8 9 package test.mx4j.tools.stats; 10 11 import java.util.Date ; 12 import java.util.SortedMap ; 13 import javax.management.Attribute ; 14 import javax.management.AttributeChangeNotification ; 15 import javax.management.MBeanServer ; 16 import javax.management.MBeanServerFactory ; 17 import javax.management.NotificationBroadcasterSupport ; 18 import javax.management.ObjectName ; 19 20 import junit.framework.TestCase; 21 import mx4j.tools.stats.PointTime; 22 23 28 public class StatsMBeansTest extends TestCase 29 { 30 private MBeanServer server; 31 32 35 public StatsMBeansTest() 36 { 37 super("StatsMBeansTest Test"); 38 } 39 40 43 public StatsMBeansTest(String name) 44 { 45 super(name); 46 } 47 48 public void setUp() 49 { 50 try 51 { 52 server = MBeanServerFactory.createMBeanServer("Stats"); 53 } 54 catch (Exception e) 55 { 56 e.printStackTrace(); 57 } 58 } 59 60 public void tearDown() 61 { 62 try 63 { 64 MBeanServerFactory.releaseMBeanServer(server); 65 } 66 catch (Exception e) 67 { 68 e.printStackTrace(); 69 } 70 } 71 72 public void testValueMBean() throws Exception 73 { 74 ObjectName name = new ObjectName ("Domain:name=value"); 75 try 76 { 77 server.createMBean("mx4j.tools.stats.ValueStatisticsRecorder", name, null); 78 79 81 server.setAttribute(name, new Attribute ("Value", new Double (10))); 83 server.setAttribute(name, new Attribute ("Value", new Double (5))); 84 server.setAttribute(name, new Attribute ("Value", new Double (20))); 85 86 assertEquals(new Long (0), server.getAttribute(name, "Max")); 87 assertEquals(new Long (0), server.getAttribute(name, "Min")); 88 assertEquals(new Long (0), server.getAttribute(name, "Average")); 89 assertNull(server.getAttribute(name, "RecordingStart")); 90 assertEquals(0, ((SortedMap )server.getAttribute(name, "Entries")).size()); 91 92 server.invoke(name, "start", null, null); 94 95 server.setAttribute(name, new Attribute ("Value", new Double (10))); 97 server.setAttribute(name, new Attribute ("Value", new Double (5))); 98 server.setAttribute(name, new Attribute ("Value", new Double (20))); 99 100 assertEquals(new Double (20), server.getAttribute(name, "Max")); 101 assertEquals(new Double (5), server.getAttribute(name, "Min")); 102 assertEquals(11.6, ((Double )server.getAttribute(name, "Average")).doubleValue(), 0.1); 103 assertEquals(3, ((SortedMap )server.getAttribute(name, "Entries")).size()); 104 Date start1 = (Date )server.getAttribute(name, "RecordingStart"); 105 106 server.invoke(name, "stop", null, null); 108 server.invoke(name, "start", null, null); 109 110 server.setAttribute(name, new Attribute ("Value", new Long (10))); 112 server.setAttribute(name, new Attribute ("Value", new Long (5))); 113 server.setAttribute(name, new Attribute ("Value", new Long (20))); 114 115 assertEquals(new Long (20), server.getAttribute(name, "Max")); 116 assertEquals(new Long (5), server.getAttribute(name, "Min")); 117 assertEquals(11, ((Long )server.getAttribute(name, "Average")).longValue()); 118 assertEquals(((SortedMap )server.getAttribute(name, "Entries")).size(), 3); 119 Date start2 = (Date )server.getAttribute(name, "RecordingStart"); 120 121 assertTrue(start1.equals(start2) || start1.before(start2)); 122 SortedMap values = (SortedMap )server.getAttribute(name, "Entries"); 123 PointTime point1 = (PointTime)values.firstKey(); 124 PointTime point2 = (PointTime)values.lastKey(); 125 assertTrue(point1.getDate().equals(point2.getDate()) || point1.getDate().before(point2.getDate())); 126 127 server.invoke(name, "stop", null, null); 129 server.invoke(name, "start", null, null); 130 131 int maxSize = ((Integer )server.getAttribute(name, "MaxEntries")).intValue(); 132 for (int i = 0; i < maxSize * 2; i++) 134 { 135 server.setAttribute(name, new Attribute ("Value", new Double (Math.random()))); 136 } 137 138 assertTrue(((Double )server.getAttribute(name, "Min")).doubleValue() >= 0); 140 assertTrue(((Double )server.getAttribute(name, "Max")).doubleValue() <= 1); 142 143 assertEquals(((SortedMap )server.getAttribute(name, "Entries")).size(), maxSize); 145 } 146 finally 147 { 148 server.unregisterMBean(name); 149 } 150 } 151 152 public void testNotificationMBean() throws Exception 153 { 154 ObjectName name = new ObjectName ("Domain:name=notification"); 155 ObjectName beanName = new ObjectName ("Domain:name=observed"); 156 try 157 { 158 server.createMBean("mx4j.tools.stats.NotificationStatisticsRecorder", name, null); 159 Test t = new Test(); 160 server.registerMBean(t, beanName); 161 server.setAttribute(name, new Attribute ("ObservedObject", beanName)); 162 server.setAttribute(name, new Attribute ("ObservedAttribute", "Value")); 163 164 166 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 168 server.setAttribute(beanName, new Attribute ("Value", new Double (5))); 169 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 170 171 assertEquals(new Long (0), server.getAttribute(name, "Max")); 172 assertEquals(new Long (0), server.getAttribute(name, "Min")); 173 assertEquals(new Long (0), server.getAttribute(name, "Average")); 174 assertEquals(0, ((SortedMap )server.getAttribute(name, "Entries")).size()); 175 176 server.invoke(name, "start", null, null); 178 179 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 181 server.setAttribute(beanName, new Attribute ("Value", new Double (5))); 182 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 183 184 assertEquals(new Double (20), server.getAttribute(name, "Max")); 185 assertEquals(new Double (5), server.getAttribute(name, "Min")); 186 assertEquals(11.6, ((Double )server.getAttribute(name, "Average")).doubleValue(), 0.1); 187 assertEquals(3, ((SortedMap )server.getAttribute(name, "Entries")).size()); 188 189 server.invoke(name, "stop", null, null); 191 server.invoke(name, "start", null, null); 192 193 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 195 server.setAttribute(beanName, new Attribute ("Value", new Double (15))); 196 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 197 198 assertEquals(new Double (20), server.getAttribute(name, "Max")); 199 assertEquals(new Double (10), server.getAttribute(name, "Min")); 200 assertEquals(15, ((Double )server.getAttribute(name, "Average")).longValue()); 201 assertEquals(((SortedMap )server.getAttribute(name, "Entries")).size(), 3); 202 203 } 204 finally 205 { 206 server.unregisterMBean(name); 207 } 208 } 209 210 public synchronized void testTimedMBean() throws Exception 211 { 212 ObjectName name = new ObjectName ("Domain:name=notification"); 213 ObjectName beanName = new ObjectName ("Domain:name=observed"); 214 try 215 { 216 server.createMBean("mx4j.tools.stats.TimedStatisticsRecorder", name, null); 217 Test t = new Test(); 218 server.registerMBean(t, beanName); 219 server.setAttribute(name, new Attribute ("ObservedObject", beanName)); 220 server.setAttribute(name, new Attribute ("ObservedAttribute", "Value")); 221 server.setAttribute(name, new Attribute ("Granularity", new Long (1000))); 222 223 225 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 227 server.setAttribute(beanName, new Attribute ("Value", new Double (5))); 228 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 229 230 assertEquals(new Long (0), server.getAttribute(name, "Max")); 231 assertEquals(new Long (0), server.getAttribute(name, "Min")); 232 assertEquals(new Long (0), server.getAttribute(name, "Average")); 233 assertEquals(0, ((SortedMap )server.getAttribute(name, "Entries")).size()); 234 235 server.invoke(name, "start", null, null); 237 238 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 240 Thread.currentThread().sleep(1500); 241 server.setAttribute(beanName, new Attribute ("Value", new Double (5))); 242 Thread.currentThread().sleep(1500); 243 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 244 Thread.currentThread().sleep(1500); 245 246 assertEquals(new Double (20), server.getAttribute(name, "Max")); 247 assertEquals(new Double (5), server.getAttribute(name, "Min")); 248 assertTrue(((Double )server.getAttribute(name, "Average")).longValue() > 5 && ((Double )server.getAttribute(name, "Average")).longValue() < 20); 250 assertTrue(((SortedMap )server.getAttribute(name, "Entries")).size() >= 3); 251 252 server.invoke(name, "stop", null, null); 254 server.invoke(name, "start", null, null); 255 256 server.setAttribute(beanName, new Attribute ("Value", new Double (10))); 258 Thread.currentThread().sleep(1500); 259 server.setAttribute(beanName, new Attribute ("Value", new Double (15))); 260 Thread.currentThread().sleep(1500); 261 server.setAttribute(beanName, new Attribute ("Value", new Double (20))); 262 Thread.currentThread().sleep(1500); 263 264 assertEquals(new Double (20), server.getAttribute(name, "Max")); 265 assertEquals(new Double (10), server.getAttribute(name, "Min")); 266 assertTrue(((Double )server.getAttribute(name, "Average")).longValue() >= 15 && ((Double )server.getAttribute(name, "Average")).longValue() <= 20); 268 assertTrue(((SortedMap )server.getAttribute(name, "Entries")).size() >= 3); 269 270 } 271 finally 272 { 273 server.unregisterMBean(name); 274 } 275 } 276 277 public interface TestMBean 278 { 279 public double getValue(); 280 281 public void setValue(double value); 282 } 283 284 public class Test extends NotificationBroadcasterSupport implements TestMBean 285 { 286 private double value; 287 288 public double getValue() 289 { 290 return value; 291 } 292 293 public void setValue(double value) 294 { 295 double oldValue = this.value; 296 this.value = value; 297 sendNotification(new AttributeChangeNotification (this, 0L, System.currentTimeMillis(), "test", "Value", Double .class.toString(), new Double (oldValue), new Double (value))); 298 } 299 } 300 301 } 302 303 | Popular Tags |