KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.javax.management.monitor;
10
11 import javax.management.MBeanServer JavaDoc;
12 import javax.management.Notification JavaDoc;
13 import javax.management.NotificationListener JavaDoc;
14 import javax.management.ObjectName JavaDoc;
15 import javax.management.monitor.GaugeMonitor JavaDoc;
16 import javax.management.monitor.Monitor JavaDoc;
17 import javax.management.monitor.MonitorNotification JavaDoc;
18
19 import test.MutableInteger;
20 import test.MutableObject;
21
22 /**
23  * @version $Revision: 1.12 $
24  */

25 public class GaugeMonitorTest extends MonitorTestCase
26 {
27    public GaugeMonitorTest(String JavaDoc name)
28    {
29       super(name);
30    }
31
32    protected Monitor JavaDoc createMonitor()
33    {
34       return new GaugeMonitor JavaDoc();
35    }
36
37    public void testCorrectInitialization() throws Exception JavaDoc
38    {
39       GaugeMonitor JavaDoc monitor = (GaugeMonitor JavaDoc)createMonitor();
40       assertEquals(new Integer JavaDoc(0), monitor.getHighThreshold());
41       assertEquals(new Integer JavaDoc(0), monitor.getLowThreshold());
42       assertFalse(monitor.getDifferenceMode());
43       assertFalse(monitor.getNotifyHigh());
44       assertFalse(monitor.getNotifyLow());
45    }
46
47    public void testSetThresholds() throws Exception JavaDoc
48    {
49       GaugeMonitor JavaDoc monitor = (GaugeMonitor JavaDoc)createMonitor();
50       try
51       {
52          monitor.setThresholds(null, null);
53          fail();
54       }
55       catch (IllegalArgumentException JavaDoc ignored)
56       {
57       }
58       try
59       {
60          monitor.setThresholds(new Integer JavaDoc(0), null);
61          fail();
62       }
63       catch (IllegalArgumentException JavaDoc ignored)
64       {
65       }
66       try
67       {
68          monitor.setThresholds(null, new Integer JavaDoc(0));
69          fail();
70       }
71       catch (IllegalArgumentException JavaDoc ignored)
72       {
73       }
74       try
75       {
76          // Different types
77
monitor.setThresholds(new Integer JavaDoc(1), new Long JavaDoc(0));
78          fail();
79       }
80       catch (IllegalArgumentException JavaDoc ignored)
81       {
82       }
83       try
84       {
85          // High less than low
86
monitor.setThresholds(new Integer JavaDoc(0), new Integer JavaDoc(1));
87          fail();
88       }
89       catch (IllegalArgumentException JavaDoc ignored)
90       {
91       }
92
93       monitor.setThresholds(new Float JavaDoc(5.7), new Float JavaDoc(5.0));
94    }
95
96    /**
97     * This also serves as a test case for bug #710028
98     */

99    public void testHighHysteresisStartBelow() throws Exception JavaDoc
100    {
101       ObjectName JavaDoc name = new ObjectName JavaDoc(":mbean=target");
102       ObjectName JavaDoc monitorName = new ObjectName JavaDoc(":monitor=gauge");
103
104       MBeanServer JavaDoc server = newMBeanServer();
105       GaugeMonitor JavaDoc monitor = (GaugeMonitor JavaDoc)createMonitor();
106       monitor.setDifferenceMode(true);
107       monitor.addObservedObject(name);
108       monitor.setObservedAttribute("Integer");
109       int period = 1000;
110       monitor.setGranularityPeriod(period);
111       Integer JavaDoc high = new Integer JavaDoc(10);
112       Integer JavaDoc low = new Integer JavaDoc(5);
113       monitor.setThresholds(high, low);
114       monitor.setNotifyHigh(true);
115       monitor.setNotifyLow(false);
116       server.registerMBean(monitor, monitorName);
117
118       // Initial value < lowThreshold
119
MonitorTarget target = new MonitorTarget();
120       int value = low.intValue() - 1;
121       target.setInteger(value);
122       server.registerMBean(target, name);
123
124       final MutableInteger times = new MutableInteger(0);
125       final MutableObject holder = new MutableObject(null);
126       NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
127       {
128          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
129          {
130             times.set(times.get() + 1);
131             holder.set(notification);
132          }
133       };
134       server.addNotificationListener(monitorName, listener, null, null);
135       monitor.start();
136
137       try
138       {
139          sleep(period * 3);
140          assertEquals(times.get(), 0);
141          assertNull(holder.get());
142
143          // Set gauge above high threshold
144
value = value + high.intValue() + 1;
145          target.setInteger(value);
146          sleep(period * 3);
147          assertEquals(times.get(), 1);
148          MonitorNotification JavaDoc notification = (MonitorNotification JavaDoc)holder.get();
149          assertEquals(notification.getType(), MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED);
150
151          times.set(0);
152          holder.set(null);
153          sleep(period * 3);
154          assertEquals(times.get(), 0);
155
156          // Set gauge inside threshold
157
value = value + low.intValue() + 1;
158          target.setInteger(value);
159          sleep(period * 3);
160          assertEquals(times.get(), 0);
161          assertNull(holder.get());
162
163          // Set gauge above threshold again
164
value = value + high.intValue() + 1;
165          target.setInteger(value);
166          sleep(period * 3);
167          assertEquals(times.get(), 1);
168          notification = (MonitorNotification JavaDoc)holder.get();
169          assertEquals(notification.getType(), MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED);
170       }
171       finally
172       {
173          monitor.stop();
174       }
175    }
176
177    /**
178     * This also serves as a test case for bug #742554
179     */

180    public void testLowHysteresisStartInside() throws Exception JavaDoc
181    {
182       ObjectName JavaDoc name = new ObjectName JavaDoc(":mbean=target");
183       ObjectName JavaDoc monitorName = new ObjectName JavaDoc(":monitor=gauge");
184
185       MBeanServer JavaDoc server = newMBeanServer();
186       GaugeMonitor JavaDoc monitor = (GaugeMonitor JavaDoc)createMonitor();
187       monitor.setDifferenceMode(true);
188       monitor.addObservedObject(name);
189       monitor.setObservedAttribute("Integer");
190       int period = 1000;
191       monitor.setGranularityPeriod(period);
192       Integer JavaDoc high = new Integer JavaDoc(5);
193       Integer JavaDoc low = new Integer JavaDoc(0);
194       monitor.setThresholds(high, low);
195       monitor.setNotifyHigh(true);
196       monitor.setNotifyLow(true);
197       server.registerMBean(monitor, monitorName);
198
199       // Initial gauge inside thresholds
200
MonitorTarget target = new MonitorTarget();
201       int value = low.intValue() + 1;
202       target.setInteger(value);
203       server.registerMBean(target, name);
204
205       final MutableInteger times = new MutableInteger(0);
206       final MutableObject holder = new MutableObject(null);
207       NotificationListener JavaDoc listener = new NotificationListener JavaDoc()
208       {
209          public void handleNotification(Notification JavaDoc notification, Object JavaDoc handback)
210          {
211             times.set(times.get() + 1);
212             holder.set(notification);
213          }
214       };
215       server.addNotificationListener(monitorName, listener, null, null);
216       monitor.start();
217
218       try
219       {
220          // Inside the thresholds, be sure low notification
221
sleep(period * 3);
222          assertEquals(times.get(), 1);
223          MonitorNotification JavaDoc notification = (MonitorNotification JavaDoc)holder.get();
224          assertEquals(notification.getType(), MonitorNotification.THRESHOLD_LOW_VALUE_EXCEEDED);
225
226          times.set(0);
227          holder.set(null);
228          sleep(period * 3);
229          assertEquals(times.get(), 0);
230
231          // Monitoring takes time, so I disable low notification to be sure to get only the high one
232
// The monitor is in difference mode, so the first time will get the high notification, but
233
// the second time will get zero, since the gauge did not change, which will triggers a low notification
234
monitor.setNotifyLow(false);
235          // Set gauge above high threshold
236
value = value + high.intValue() + 1;
237          target.setInteger(value);
238          sleep(period * 3);
239          assertEquals(times.get(), 1);
240          notification = (MonitorNotification JavaDoc)holder.get();
241          assertEquals(notification.getType(), MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED);
242
243          times.set(0);
244          holder.set(null);
245          sleep(period * 3);
246          assertEquals(times.get(), 0);
247
248          monitor.setNotifyHigh(false);
249          monitor.setNotifyLow(true);
250          // Set gauge above high threshold, so just after goes below low threshold
251
value = value + high.intValue() + 1;
252          target.setInteger(value);
253          sleep(period * 3);
254          assertEquals(times.get(), 1);
255          notification = (MonitorNotification JavaDoc)holder.get();
256          assertEquals(notification.getType(), MonitorNotification.THRESHOLD_LOW_VALUE_EXCEEDED);
257
258          times.set(0);
259          holder.set(null);
260          sleep(period * 3);
261          assertEquals(times.get(), 0);
262
263          // Set gauge inside threshold
264
value = value + low.intValue() + 1;
265          target.setInteger(value);
266          sleep(period * 3);
267          assertEquals(times.get(), 0);
268          assertNull(holder.get());
269       }
270       finally
271       {
272          monitor.stop();
273       }
274    }
275
276    /**
277     * This also serves as a test case for bug #822849
278     */

279    public void testGetDerivedGauge() throws Exception JavaDoc
280    {
281       ObjectName JavaDoc name = new ObjectName JavaDoc(":mbean=target");
282       ObjectName JavaDoc monitorName = new ObjectName JavaDoc(":monitor=gauge");
283
284       MBeanServer JavaDoc server = newMBeanServer();
285       GaugeMonitor JavaDoc monitor = (GaugeMonitor JavaDoc)createMonitor();
286       monitor.setDifferenceMode(false);
287       monitor.addObservedObject(name);
288       monitor.setObservedAttribute("Integer");
289       int period = 1000;
290       monitor.setGranularityPeriod(period);
291       server.registerMBean(monitor, monitorName);
292
293       // Set initial gauge
294
MonitorTarget target = new MonitorTarget();
295       int gauge = 4;
296       target.setInteger(gauge);
297       server.registerMBean(target, name);
298
299       monitor.start();
300
301       try
302       {
303          sleep(period * 3);
304
305          Number JavaDoc observed = monitor.getDerivedGauge(name);
306          assertEquals(observed.intValue(), gauge);
307       }
308       finally
309       {
310          monitor.stop();
311       }
312    }
313
314    public interface MonitorTargetMBean
315    {
316       public int getInteger();
317    }
318
319    public static class MonitorTarget implements MonitorTargetMBean
320    {
321       private int value;
322
323       public int getInteger()
324       {
325          return value;
326       }
327
328       public void setInteger(int value)
329       {
330          this.value = value;
331       }
332    }
333 }
334
Popular Tags