KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > javax > management > monitor > CounterNotificationTest


1 /* =====================================================================
2  *
3  * Copyright (c) 2004 Jeremy Boynes. All rights reserved.
4  *
5  * =====================================================================
6  */

7 package test.javax.management.monitor;
8
9 import junit.framework.TestCase;
10
11 import javax.management.*;
12 import javax.management.monitor.CounterMonitor JavaDoc;
13 import javax.management.monitor.MonitorNotification JavaDoc;
14 import java.util.ArrayList JavaDoc;
15 import java.util.List JavaDoc;
16
17 import mx4j.log.Log;
18 import mx4j.log.Logger;
19
20 /**
21  * @version $Revision: 1.1 $ $Date: 2005/02/15 22:31:40 $
22  */

23 public class CounterNotificationTest extends TestCase implements NotificationListener
24 {
25    private static final Number JavaDoc ZERO = new Integer JavaDoc(0);
26    private MBeanServer mbServer;
27
28    private ObjectName observedName;
29    private ObservedObject observed;
30
31    private ObjectName counterMonitorName;
32    private CounterMonitor JavaDoc counterMonitor;
33
34    private List JavaDoc notifications;
35    private int granularity;
36    private Logger logger;
37
38    public void testSimpleIncrementingCounter() throws Exception JavaDoc
39    {
40       initMonitor(ZERO, ZERO, ZERO, false);
41       counterMonitor.start();
42
43       setAttribute(new Integer JavaDoc(-2));
44       sleep();
45       assertEquals(0, notifications.size());
46       checkMonitor(new Integer JavaDoc(-2), ZERO);
47
48       setAttribute(new Integer JavaDoc(-1));
49       sleep();
50       assertEquals(0, notifications.size());
51       checkMonitor(new Integer JavaDoc(-1), ZERO);
52
53       setAttribute(new Integer JavaDoc(0));
54       sleep();
55       assertEquals(1, notifications.size());
56       checkMonitor(new Integer JavaDoc(0), ZERO);
57       checkNotification((Notification JavaDoc)notifications.get(0));
58
59       setAttribute(new Integer JavaDoc(1));
60       sleep();
61       assertEquals(1, notifications.size());
62       checkMonitor(new Integer JavaDoc(1), ZERO);
63
64       setAttribute(new Integer JavaDoc(2));
65       sleep();
66       assertEquals(1, notifications.size());
67       checkMonitor(new Integer JavaDoc(2), ZERO);
68    }
69
70    public void testSimpleCounterWithOffset() throws Exception JavaDoc
71    {
72       initMonitor(ZERO, new Integer JavaDoc(2), ZERO, false);
73       counterMonitor.start();
74
75       setAttribute(new Integer JavaDoc(0));
76       sleep();
77       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(2));
78       assertEquals(1, notifications.size());
79       checkNotification((Notification JavaDoc)notifications.get(0));
80
81       setAttribute(new Integer JavaDoc(1));
82       sleep();
83       checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(2));
84       assertEquals(1, notifications.size());
85
86       setAttribute(new Integer JavaDoc(2));
87       sleep();
88       checkMonitor(new Integer JavaDoc(2), new Integer JavaDoc(4));
89       assertEquals(2, notifications.size());
90       checkNotification((Notification JavaDoc)notifications.get(1));
91
92       setAttribute(new Integer JavaDoc(3));
93       sleep();
94       checkMonitor(new Integer JavaDoc(3), new Integer JavaDoc(4));
95       assertEquals(2, notifications.size());
96
97       setAttribute(new Integer JavaDoc(4));
98       sleep();
99       checkMonitor(new Integer JavaDoc(4), new Integer JavaDoc(6));
100       assertEquals(3, notifications.size());
101       checkNotification((Notification JavaDoc)notifications.get(2));
102
103       setAttribute(new Integer JavaDoc(5));
104       sleep();
105       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(6));
106       assertEquals(3, notifications.size());
107
108       setAttribute(new Integer JavaDoc(6));
109       sleep();
110       checkMonitor(new Integer JavaDoc(6), new Integer JavaDoc(8));
111       assertEquals(4, notifications.size());
112       checkNotification((Notification JavaDoc)notifications.get(3));
113    }
114
115    public void testSimpleCounterWithModulusAndDecreasingOffset() throws Exception JavaDoc
116    {
117       initMonitor(new Integer JavaDoc(1), new Integer JavaDoc(1), new Integer JavaDoc(5), false);
118       counterMonitor.start();
119
120       setAttribute(new Integer JavaDoc(1));
121       sleep();
122       checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(2));
123       assertEquals(1, notifications.size());
124
125       counterMonitor.setOffset(new Integer JavaDoc(2));
126       setAttribute(new Integer JavaDoc(2));
127       sleep();
128       checkMonitor(new Integer JavaDoc(2), new Integer JavaDoc(4));
129       assertEquals(2, notifications.size());
130
131       counterMonitor.setOffset(new Integer JavaDoc(1));
132       setAttribute(new Integer JavaDoc(4));
133       sleep();
134       checkMonitor(new Integer JavaDoc(4), new Integer JavaDoc(5));
135       assertEquals(3, notifications.size());
136
137       setAttribute(new Integer JavaDoc(5));
138       sleep();
139       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(6));
140       assertEquals(4, notifications.size());
141
142       setAttribute(new Integer JavaDoc(5));
143       sleep();
144       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(6));
145       assertEquals(4, notifications.size());
146
147       setAttribute(new Integer JavaDoc(2));
148       sleep();
149       checkMonitor(new Integer JavaDoc(2), new Integer JavaDoc(3));
150       assertEquals(5, notifications.size());
151
152       setAttribute(new Integer JavaDoc(1));
153       sleep();
154 // Thread.sleep(10000000);
155
checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(3));
156       assertEquals(5, notifications.size());
157
158       setAttribute(new Integer JavaDoc(1));
159       sleep();
160       checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(3));
161       assertEquals(5, notifications.size());
162
163       setAttribute(new Integer JavaDoc(3));
164       sleep();
165       checkMonitor(new Integer JavaDoc(3), new Integer JavaDoc(4));
166       assertEquals(6, notifications.size());
167    }
168
169    public void testDeltaWithModulus() throws Exception JavaDoc
170    {
171       initMonitor(new Integer JavaDoc(2), ZERO, new Integer JavaDoc(7), true);
172       counterMonitor.start();
173
174       setAttribute(new Integer JavaDoc(-2));
175       sleep();
176       checkMonitor(new Integer JavaDoc(-2), new Integer JavaDoc(2));
177       assertEquals(0, notifications.size());
178
179       setAttribute(new Integer JavaDoc(-1));
180       sleep();
181       checkMonitor(new Integer JavaDoc(-1), new Integer JavaDoc(2));
182       assertEquals(0, notifications.size());
183
184       setAttribute(new Integer JavaDoc(0));
185       sleep();
186       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(2));
187       assertEquals(0, notifications.size());
188
189       setAttribute(new Integer JavaDoc(8));
190       sleep();
191       checkMonitor(new Integer JavaDoc(8), new Integer JavaDoc(2));
192       assertEquals(1, notifications.size());
193
194       setAttribute(new Integer JavaDoc(3));
195       sleep();
196       checkMonitor(new Integer JavaDoc(3), new Integer JavaDoc(2));
197       assertEquals(2, notifications.size());
198
199       setAttribute(new Integer JavaDoc(5));
200       sleep();
201       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(2));
202       assertEquals(3, notifications.size());
203
204       setAttribute(new Integer JavaDoc(0));
205       sleep();
206       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(2));
207       assertEquals(4, notifications.size());
208
209       setAttribute(new Integer JavaDoc(1));
210       sleep();
211       checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(2));
212       assertEquals(4, notifications.size());
213
214       setAttribute(new Integer JavaDoc(4));
215       sleep();
216       checkMonitor(new Integer JavaDoc(4), new Integer JavaDoc(2));
217       assertEquals(5, notifications.size());
218
219       setAttribute(new Integer JavaDoc(5));
220       sleep();
221       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(2));
222       assertEquals(5, notifications.size());
223
224       setAttribute(new Integer JavaDoc(0));
225       sleep();
226       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(2));
227       assertEquals(6, notifications.size());
228    }
229
230    public void testDeltaWithOffsetAndModulus() throws Exception JavaDoc
231    {
232       initMonitor(new Integer JavaDoc(2), new Integer JavaDoc(1), new Integer JavaDoc(7), true);
233       counterMonitor.start();
234
235       setAttribute(new Integer JavaDoc(0));
236       sleep();
237       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(2));
238       assertEquals(0, notifications.size());
239
240       setAttribute(new Integer JavaDoc(2));
241       sleep();
242       checkMonitor(new Integer JavaDoc(2), new Integer JavaDoc(3));
243       assertEquals(1, notifications.size());
244
245       setAttribute(new Integer JavaDoc(3));
246       sleep();
247       checkMonitor(new Integer JavaDoc(3), new Integer JavaDoc(3));
248       assertEquals(1, notifications.size());
249
250       setAttribute(new Integer JavaDoc(5));
251       sleep();
252       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(3));
253       assertEquals(1, notifications.size());
254
255       setAttribute(new Integer JavaDoc(0));
256       sleep();
257       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(3));
258       assertEquals(2, notifications.size());
259
260       setAttribute(new Integer JavaDoc(1));
261       sleep();
262       checkMonitor(new Integer JavaDoc(1), new Integer JavaDoc(3));
263       assertEquals(2, notifications.size());
264
265       setAttribute(new Integer JavaDoc(4));
266       sleep();
267       checkMonitor(new Integer JavaDoc(4), new Integer JavaDoc(4));
268       assertEquals(3, notifications.size());
269
270       setAttribute(new Integer JavaDoc(5));
271       sleep();
272       checkMonitor(new Integer JavaDoc(5), new Integer JavaDoc(4));
273       assertEquals(3, notifications.size());
274
275       setAttribute(new Integer JavaDoc(0));
276       sleep();
277       checkMonitor(new Integer JavaDoc(0), new Integer JavaDoc(3));
278       assertEquals(4, notifications.size());
279    }
280
281    private void setAttribute(Number JavaDoc value) throws Exception JavaDoc
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 JavaDoc e)
294       {
295       }
296    }
297
298    private void initMonitor(Number JavaDoc initThreshold, Number JavaDoc offset, Number JavaDoc 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 JavaDoc value, Number JavaDoc threshold) throws Exception JavaDoc
312    {
313       assertEquals(value, mbServer.getAttribute(observedName, "Counter"));
314       assertEquals(threshold, counterMonitor.getThreshold());
315    }
316
317    private void checkNotification(Notification JavaDoc notification)
318    {
319       assertEquals(MonitorNotification.THRESHOLD_VALUE_EXCEEDED, notification.getType());
320    }
321
322    public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
323    {
324       notifications.add(notification);
325    }
326
327    protected void setUp() throws Exception JavaDoc
328    {
329       logger = Log.getLogger(this.getClass().getName());
330
331       granularity = 200;
332       notifications = new ArrayList JavaDoc();
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 JavaDoc();
341       mbServer.registerMBean(counterMonitor, counterMonitorName);
342       counterMonitor.addNotificationListener(this, null, null);
343    }
344
345    protected void tearDown() throws Exception JavaDoc
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 JavaDoc getCounter();
355
356       void setCounter(Number JavaDoc counter);
357    }
358
359    public static class ObservedObject implements ObservedObjectMBean
360    {
361       private Number JavaDoc counter;
362
363       public Number JavaDoc getCounter()
364       {
365          return counter;
366       }
367
368       public void setCounter(Number JavaDoc counter)
369       {
370          this.counter = counter;
371       }
372    }
373 }
374
Popular Tags