1 7 package test.javax.management.monitor; 8 9 import junit.framework.TestCase; 10 11 import javax.management.*; 12 import javax.management.monitor.CounterMonitor ; 13 import javax.management.monitor.MonitorNotification ; 14 import java.util.ArrayList ; 15 import java.util.List ; 16 17 import mx4j.log.Log; 18 import mx4j.log.Logger; 19 20 23 public class CounterNotificationTest extends TestCase implements NotificationListener 24 { 25 private static final Number ZERO = new Integer (0); 26 private MBeanServer mbServer; 27 28 private ObjectName observedName; 29 private ObservedObject observed; 30 31 private ObjectName counterMonitorName; 32 private CounterMonitor counterMonitor; 33 34 private List notifications; 35 private int granularity; 36 private Logger logger; 37 38 public void testSimpleIncrementingCounter() throws Exception  39 { 40 initMonitor(ZERO, ZERO, ZERO, false); 41 counterMonitor.start(); 42 43 setAttribute(new Integer (-2)); 44 sleep(); 45 assertEquals(0, notifications.size()); 46 checkMonitor(new Integer (-2), ZERO); 47 48 setAttribute(new Integer (-1)); 49 sleep(); 50 assertEquals(0, notifications.size()); 51 checkMonitor(new Integer (-1), ZERO); 52 53 setAttribute(new Integer (0)); 54 sleep(); 55 assertEquals(1, notifications.size()); 56 checkMonitor(new Integer (0), ZERO); 57 checkNotification((Notification )notifications.get(0)); 58 59 setAttribute(new Integer (1)); 60 sleep(); 61 assertEquals(1, notifications.size()); 62 checkMonitor(new Integer (1), ZERO); 63 64 setAttribute(new Integer (2)); 65 sleep(); 66 assertEquals(1, notifications.size()); 67 checkMonitor(new Integer (2), ZERO); 68 } 69 70 public void testSimpleCounterWithOffset() throws Exception  71 { 72 initMonitor(ZERO, new Integer (2), ZERO, false); 73 counterMonitor.start(); 74 75 setAttribute(new Integer (0)); 76 sleep(); 77 checkMonitor(new Integer (0), new Integer (2)); 78 assertEquals(1, notifications.size()); 79 checkNotification((Notification )notifications.get(0)); 80 81 setAttribute(new Integer (1)); 82 sleep(); 83 checkMonitor(new Integer (1), new Integer (2)); 84 assertEquals(1, notifications.size()); 85 86 setAttribute(new Integer (2)); 87 sleep(); 88 checkMonitor(new Integer (2), new Integer (4)); 89 assertEquals(2, notifications.size()); 90 checkNotification((Notification )notifications.get(1)); 91 92 setAttribute(new Integer (3)); 93 sleep(); 94 checkMonitor(new Integer (3), new Integer (4)); 95 assertEquals(2, notifications.size()); 96 97 setAttribute(new Integer (4)); 98 sleep(); 99 checkMonitor(new Integer (4), new Integer (6)); 100 assertEquals(3, notifications.size()); 101 checkNotification((Notification )notifications.get(2)); 102 103 setAttribute(new Integer (5)); 104 sleep(); 105 checkMonitor(new Integer (5), new Integer (6)); 106 assertEquals(3, notifications.size()); 107 108 setAttribute(new Integer (6)); 109 sleep(); 110 checkMonitor(new Integer (6), new Integer (8)); 111 assertEquals(4, notifications.size()); 112 checkNotification((Notification )notifications.get(3)); 113 } 114 115 public void testSimpleCounterWithModulusAndDecreasingOffset() throws Exception  116 { 117 initMonitor(new Integer (1), new Integer (1), new Integer (5), false); 118 counterMonitor.start(); 119 120 setAttribute(new Integer (1)); 121 sleep(); 122 checkMonitor(new Integer (1), new Integer (2)); 123 assertEquals(1, notifications.size()); 124 125 counterMonitor.setOffset(new Integer (2)); 126 setAttribute(new Integer (2)); 127 sleep(); 128 checkMonitor(new Integer (2), new Integer (4)); 129 assertEquals(2, notifications.size()); 130 131 counterMonitor.setOffset(new Integer (1)); 132 setAttribute(new Integer (4)); 133 sleep(); 134 checkMonitor(new Integer (4), new Integer (5)); 135 assertEquals(3, notifications.size()); 136 137 setAttribute(new Integer (5)); 138 sleep(); 139 checkMonitor(new Integer (5), new Integer (6)); 140 assertEquals(4, notifications.size()); 141 142 setAttribute(new Integer (5)); 143 sleep(); 144 checkMonitor(new Integer (5), new Integer (6)); 145 assertEquals(4, notifications.size()); 146 147 setAttribute(new Integer (2)); 148 sleep(); 149 checkMonitor(new Integer (2), new Integer (3)); 150 assertEquals(5, notifications.size()); 151 152 setAttribute(new Integer (1)); 153 sleep(); 154 checkMonitor(new Integer (1), new Integer (3)); 156 assertEquals(5, notifications.size()); 157 158 setAttribute(new Integer (1)); 159 sleep(); 160 checkMonitor(new Integer (1), new Integer (3)); 161 assertEquals(5, notifications.size()); 162 163 setAttribute(new Integer (3)); 164 sleep(); 165 checkMonitor(new Integer (3), new Integer (4)); 166 assertEquals(6, notifications.size()); 167 } 168 169 public void testDeltaWithModulus() throws Exception  170 { 171 initMonitor(new Integer (2), ZERO, new Integer (7), true); 172 counterMonitor.start(); 173 174 setAttribute(new Integer (-2)); 175 sleep(); 176 checkMonitor(new Integer (-2), new Integer (2)); 177 assertEquals(0, notifications.size()); 178 179 setAttribute(new Integer (-1)); 180 sleep(); 181 checkMonitor(new Integer (-1), new Integer (2)); 182 assertEquals(0, notifications.size()); 183 184 setAttribute(new Integer (0)); 185 sleep(); 186 checkMonitor(new Integer (0), new Integer (2)); 187 assertEquals(0, notifications.size()); 188 189 setAttribute(new Integer (8)); 190 sleep(); 191 checkMonitor(new Integer (8), new Integer (2)); 192 assertEquals(1, notifications.size()); 193 194 setAttribute(new Integer (3)); 195 sleep(); 196 checkMonitor(new Integer (3), new Integer (2)); 197 assertEquals(2, notifications.size()); 198 199 setAttribute(new Integer (5)); 200 sleep(); 201 checkMonitor(new Integer (5), new Integer (2)); 202 assertEquals(3, notifications.size()); 203 204 setAttribute(new Integer (0)); 205 sleep(); 206 checkMonitor(new Integer (0), new Integer (2)); 207 assertEquals(4, notifications.size()); 208 209 setAttribute(new Integer (1)); 210 sleep(); 211 checkMonitor(new Integer (1), new Integer (2)); 212 assertEquals(4, notifications.size()); 213 214 setAttribute(new Integer (4)); 215 sleep(); 216 checkMonitor(new Integer (4), new Integer (2)); 217 assertEquals(5, notifications.size()); 218 219 setAttribute(new Integer (5)); 220 sleep(); 221 checkMonitor(new Integer (5), new Integer (2)); 222 assertEquals(5, notifications.size()); 223 224 setAttribute(new Integer (0)); 225 sleep(); 226 checkMonitor(new Integer (0), new Integer (2)); 227 assertEquals(6, notifications.size()); 228 } 229 230 public void testDeltaWithOffsetAndModulus() throws Exception  231 { 232 initMonitor(new Integer (2), new Integer (1), new Integer (7), true); 233 counterMonitor.start(); 234 235 setAttribute(new Integer (0)); 236 sleep(); 237 checkMonitor(new Integer (0), new Integer (2)); 238 assertEquals(0, notifications.size()); 239 240 setAttribute(new Integer (2)); 241 sleep(); 242 checkMonitor(new Integer (2), new Integer (3)); 243 assertEquals(1, notifications.size()); 244 245 setAttribute(new Integer (3)); 246 sleep(); 247 checkMonitor(new Integer (3), new Integer (3)); 248 assertEquals(1, notifications.size()); 249 250 setAttribute(new Integer (5)); 251 sleep(); 252 checkMonitor(new Integer (5), new Integer (3)); 253 assertEquals(1, notifications.size()); 254 255 setAttribute(new Integer (0)); 256 sleep(); 257 checkMonitor(new Integer (0), new Integer (3)); 258 assertEquals(2, notifications.size()); 259 260 setAttribute(new Integer (1)); 261 sleep(); 262 checkMonitor(new Integer (1), new Integer (3)); 263 assertEquals(2, notifications.size()); 264 265 setAttribute(new Integer (4)); 266 sleep(); 267 checkMonitor(new Integer (4), new Integer (4)); 268 assertEquals(3, notifications.size()); 269 270 setAttribute(new Integer (5)); 271 sleep(); 272 checkMonitor(new Integer (5), new Integer (4)); 273 assertEquals(3, notifications.size()); 274 275 setAttribute(new Integer (0)); 276 sleep(); 277 checkMonitor(new Integer (0), new Integer (3)); 278 assertEquals(4, notifications.size()); 279 } 280 281 private void setAttribute(Number value) throws Exception  282 { 283 logger.debug("Setting attribute to " + value); 284 mbServer.setAttribute(observedName, new Attribute("Counter", value)); 285 } 286 287 private void sleep() 288 { 289 try 290 { 291 Thread.sleep(granularity * 3); 292 } 293 catch (InterruptedException e) 294 { 295 } 296 } 297 298 private void initMonitor(Number initThreshold, Number offset, Number modulus, boolean difference) 299 { 300 counterMonitor.setObservedObject(observedName); 301 counterMonitor.setObservedAttribute("Counter"); 302 counterMonitor.setGranularityPeriod(granularity); 303 counterMonitor.setNotify(true); 304 305 counterMonitor.setThreshold(initThreshold); 306 counterMonitor.setOffset(offset); 307 counterMonitor.setModulus(modulus); 308 counterMonitor.setDifferenceMode(difference); 309 } 310 311 private void checkMonitor(Number value, Number threshold) throws Exception  312 { 313 assertEquals(value, mbServer.getAttribute(observedName, "Counter")); 314 assertEquals(threshold, counterMonitor.getThreshold()); 315 } 316 317 private void checkNotification(Notification notification) 318 { 319 assertEquals(MonitorNotification.THRESHOLD_VALUE_EXCEEDED, notification.getType()); 320 } 321 322 public void handleNotification(Notification notification, Object handback) 323 { 324 notifications.add(notification); 325 } 326 327 protected void setUp() throws Exception  328 { 329 logger = Log.getLogger(this.getClass().getName()); 330 331 granularity = 200; 332 notifications = new ArrayList (); 333 mbServer = MBeanServerFactory.newMBeanServer(); 334 335 observedName = new ObjectName("test:name=ObservedObject"); 336 observed = new ObservedObject(); 337 mbServer.registerMBean(observed, observedName); 338 339 counterMonitorName = new ObjectName("test:name=CounterMonitor"); 340 counterMonitor = new CounterMonitor (); 341 mbServer.registerMBean(counterMonitor, counterMonitorName); 342 counterMonitor.addNotificationListener(this, null, null); 343 } 344 345 protected void tearDown() throws Exception  346 { 347 if (counterMonitor.isActive()) counterMonitor.stop(); 348 mbServer.unregisterMBean(counterMonitorName); 349 mbServer.unregisterMBean(observedName); 350 } 351 352 public static interface ObservedObjectMBean 353 { 354 Number getCounter(); 355 356 void setCounter(Number counter); 357 } 358 359 public static class ObservedObject implements ObservedObjectMBean 360 { 361 private Number counter; 362 363 public Number getCounter() 364 { 365 return counter; 366 } 367 368 public void setCounter(Number counter) 369 { 370 this.counter = counter; 371 } 372 } 373 } 374 | Popular Tags |