22 */
23
24 /*
25 * @test
26 * @bug 6273541
27 * @summary Test that the counter/gauge/string monitors emit a
28 * jmx.monitor.error.type notification when the attribute
29 * being monitored returns a non comparable value.
30 * @author Luis-Miguel Alventosa
31 * @run clean NonComparableAttributeValueTest
32 * @run build NonComparableAttributeValueTest
33 * @run main NonComparableAttributeValueTest
34 */
35
36 import javax.management.*;
37 import javax.management.monitor.*;
38
39 public class NonComparableAttributeValueTest implements NotificationListener {
40
41 // Flag to notify that a message has been received
42 private boolean messageReceived = false;
43
44 // MBean class
45 public class ObservedObject implements ObservedObjectMBean {
46 public Object getIntegerAttribute() {
47 return new Object();
48 }
49 public Object getStringAttribute() {
50 return new Object();
51 }
52 }
53
54 // MBean interface
55 public interface ObservedObjectMBean {
56 public Object getIntegerAttribute();
57 public Object getStringAttribute();
58 }
59
60 // Notification handler
61 public void handleNotification(Notification notification,
62 Object handback) {
63 MonitorNotification n = (MonitorNotification) notification;
64 echo("\tInside handleNotification...");
65 String type = n.getType();
66 try {
67 if (type.equals(
68 MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR)) {
69 echo("\t\t" + n.getObservedAttribute() + " is null");
70 echo("\t\tDerived Gauge = " + n.getDerivedGauge());
71 echo("\t\tTrigger = " + n.getTrigger());
72 messageReceived = true;
73 } else {
74 echo("\t\tSkipping notification of type: " + type);
75 }
76 } catch (Exception e) {
77 echo("\tError in handleNotification!");
78 e.printStackTrace(System.out);
79 }
80 }
81
82 /**
83 * Update the counter and check for notifications
84 */
85 public int counterMonitorNotification() throws Exception {
86
87 CounterMonitor counterMonitor = null;
88 try {
89 MBeanServer server = MBeanServerFactory.newMBeanServer();
90
91 String domain = server.getDefaultDomain();
92
117 counterMonitor.addObservedObject(obsObjName);
118 echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
119
120 counterMonitor.setObservedAttribute("IntegerAttribute");
121 echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
122
123 counterMonitor.setNotify(true);
124 echo("\tATTRIBUTE \"NotifyFlag\" = true");
125
126 Integer threshold = 2;
127 counterMonitor.setInitThreshold(threshold);
128 echo("\tATTRIBUTE \"Threshold\" = " + threshold);
129
130 int granularityperiod = 500;
131 counterMonitor.setGranularityPeriod(granularityperiod);
132 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
133
134 echo(">>> START the CounterMonitor");
135 counterMonitor.start();
136
137 // Wait for granularity period (multiplied by 2 for sure)
138 //
139 Thread.sleep(granularityperiod * 2);
140
141 // Check if notification was received
142 //
143 if (messageReceived) {
144 echo("\tOK: CounterMonitor notification received");
145 } else {
146 echo("\tKO: CounterMonitor notification missed or not emitted");
147 return 1;
148 }
149 } finally {
150 if (counterMonitor != null)
151 counterMonitor.stop();
152 }
153
154 return 0;
155 }
156
157 /**
158 * Update the gauge and check for notifications
159 */
160 public int gaugeMonitorNotification() throws Exception {
161
162 GaugeMonitor gaugeMonitor = null;
195 gaugeMonitor.setObservedAttribute("IntegerAttribute");
196 echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
197
198 gaugeMonitor.setNotifyLow(false);
199 gaugeMonitor.setNotifyHigh(true);
200 echo("\tATTRIBUTE \"Notify Low Flag\" = false");
201 echo("\tATTRIBUTE \"Notify High Flag\" = true");
202
203 Double highThreshold = 3.0, lowThreshold = 2.5;
204 gaugeMonitor.setThresholds(highThreshold, lowThreshold);
205 echo("\tATTRIBUTE \"Low Threshold\" = " + lowThreshold);
206 echo("\tATTRIBUTE \"High Threshold\" = " + highThreshold);
207
208 int granularityperiod = 500;
209 gaugeMonitor.setGranularityPeriod(granularityperiod);
210 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
211
212 echo(">>> START the GaugeMonitor");
213 gaugeMonitor.start();
214
215 // Wait for granularity period (multiplied by 2 for sure)
216 //
217 Thread.sleep(granularityperiod * 2);
218
219 // Check if notification was received
220 //
221 if (messageReceived) {
222 echo("\tOK: GaugeMonitor notification received");
223 } else {
224 echo("\tKO: GaugeMonitor notification missed or not emitted");
225 return 1;
226 }
227 } finally {
228 if (gaugeMonitor != null)
229 gaugeMonitor.stop();
230 }
231
232 return 0;
233 }
234
235 /**
236 * Update the string and check for notifications
237 */
238 public int stringMonitorNotification() throws Exception {
239
240 StringMonitor stringMonitor = null;
272
273 stringMonitor.setObservedAttribute("StringAttribute");
274 echo("\tATTRIBUTE \"ObservedAttribute\" = StringAttribute");
275
276 stringMonitor.setNotifyMatch(true);
277 echo("\tATTRIBUTE \"NotifyMatch\" = true");
278
279 stringMonitor.setNotifyDiffer(false);
280 echo("\tATTRIBUTE \"NotifyDiffer\" = false");
281
282 stringMonitor.setStringToCompare("do_match_now");
283 echo("\tATTRIBUTE \"StringToCompare\" = \"do_match_now\"");
284
285 int granularityperiod = 500;
286 stringMonitor.setGranularityPeriod(granularityperiod);
287 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
288
289 echo(">>> START the StringMonitor");
290 stringMonitor.start();
291
292 // Wait for granularity period (multiplied by 2 for sure)
293 //
294 Thread.sleep(granularityperiod * 2);
295
296 // Check if notification was received
297 //
298 if (messageReceived) {
299 echo("\tOK: StringMonitor notification received");
300 } else {
301 echo("\tKO: StringMonitor notification missed or not emitted");
302 return 1;
303 }
304 } finally {
305 if (stringMonitor != null)
306 stringMonitor.stop();
307 }
308
309 return 0;
310 }
311
312 /**
313 * Test the monitor notifications.
314 */
315 public int monitorNotifications() throws Exception {
316 echo(">>> ----------------------------------------");
317 messageReceived = false;
318 int error = counterMonitorNotification();
319 echo(">>> ----------------------------------------");
320 messageReceived = false;
321 error += gaugeMonitorNotification();
322 echo(">>> ----------------------------------------");
323 messageReceived = false;
324 error += stringMonitorNotification();
325 echo(">>> ----------------------------------------");
326 return error;
327 }
328
329 /*
330 * Print message
331 */
332 private static void echo(String message) {
333 System.out.println(message);
334 }
335
336 /*
337 * Standalone entry point.
338 *
339 * Run the test and report to stdout.
340 */
341 public static void main (String args[]) throws Exception {
342 NonComparableAttributeValueTest test = new NonComparableAttributeValueTest();
343 int error = test.monitorNotifications();
344 if (error > 0) {
345 echo(">>> Unhappy Bye, Bye!");
346 throw new IllegalStateException("Test FAILED: Didn't get all " +
347 "the notifications that were " +
348 "expected by the test!");
349 } else {
350 echo(">>> Happy Bye, Bye!");
351 }
352 }
353 }
|
22 */
23
24 /*
25 * @test
26 * @bug 6273541
27 * @summary Test that the counter/gauge/string monitors emit a
28 * jmx.monitor.error.type notification when the attribute
29 * being monitored returns a non comparable value.
30 * @author Luis-Miguel Alventosa
31 * @run clean NonComparableAttributeValueTest
32 * @run build NonComparableAttributeValueTest
33 * @run main NonComparableAttributeValueTest
34 */
35
36 import javax.management.*;
37 import javax.management.monitor.*;
38
39 public class NonComparableAttributeValueTest implements NotificationListener {
40
41 // Flag to notify that a message has been received
42 private volatile boolean messageReceived = false;
43
44 // MBean class
45 public class ObservedObject implements ObservedObjectMBean {
46 public Object getIntegerAttribute() {
47 return new Object();
48 }
49 public Object getStringAttribute() {
50 return new Object();
51 }
52 }
53
54 // MBean interface
55 public interface ObservedObjectMBean {
56 public Object getIntegerAttribute();
57 public Object getStringAttribute();
58 }
59
60 // Notification handler
61 public void handleNotification(Notification notification,
62 Object handback) {
63 MonitorNotification n = (MonitorNotification) notification;
64 echo("\tInside handleNotification...");
65 String type = n.getType();
66 try {
67 if (type.equals(
68 MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR)) {
69 echo("\t\t" + n.getObservedAttribute() + " is null");
70 echo("\t\tDerived Gauge = " + n.getDerivedGauge());
71 echo("\t\tTrigger = " + n.getTrigger());
72
73 synchronized (this) {
74 messageReceived = true;
75 notifyAll();
76 }
77 } else {
78 echo("\t\tSkipping notification of type: " + type);
79 }
80 } catch (Exception e) {
81 echo("\tError in handleNotification!");
82 e.printStackTrace(System.out);
83 }
84 }
85
86 /**
87 * Update the counter and check for notifications
88 */
89 public int counterMonitorNotification() throws Exception {
90
91 CounterMonitor counterMonitor = null;
92 try {
93 MBeanServer server = MBeanServerFactory.newMBeanServer();
94
95 String domain = server.getDefaultDomain();
96
121 counterMonitor.addObservedObject(obsObjName);
122 echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
123
124 counterMonitor.setObservedAttribute("IntegerAttribute");
125 echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
126
127 counterMonitor.setNotify(true);
128 echo("\tATTRIBUTE \"NotifyFlag\" = true");
129
130 Integer threshold = 2;
131 counterMonitor.setInitThreshold(threshold);
132 echo("\tATTRIBUTE \"Threshold\" = " + threshold);
133
134 int granularityperiod = 500;
135 counterMonitor.setGranularityPeriod(granularityperiod);
136 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
137
138 echo(">>> START the CounterMonitor");
139 counterMonitor.start();
140
141 // Check if notification was received
142 //
143 doWait();
144 if (messageReceived) {
145 echo("\tOK: CounterMonitor notification received");
146 } else {
147 echo("\tKO: CounterMonitor notification missed or not emitted");
148 return 1;
149 }
150 } finally {
151 if (counterMonitor != null)
152 counterMonitor.stop();
153 }
154
155 return 0;
156 }
157
158 /**
159 * Update the gauge and check for notifications
160 */
161 public int gaugeMonitorNotification() throws Exception {
162
163 GaugeMonitor gaugeMonitor = null;
196 gaugeMonitor.setObservedAttribute("IntegerAttribute");
197 echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
198
199 gaugeMonitor.setNotifyLow(false);
200 gaugeMonitor.setNotifyHigh(true);
201 echo("\tATTRIBUTE \"Notify Low Flag\" = false");
202 echo("\tATTRIBUTE \"Notify High Flag\" = true");
203
204 Double highThreshold = 3.0, lowThreshold = 2.5;
205 gaugeMonitor.setThresholds(highThreshold, lowThreshold);
206 echo("\tATTRIBUTE \"Low Threshold\" = " + lowThreshold);
207 echo("\tATTRIBUTE \"High Threshold\" = " + highThreshold);
208
209 int granularityperiod = 500;
210 gaugeMonitor.setGranularityPeriod(granularityperiod);
211 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
212
213 echo(">>> START the GaugeMonitor");
214 gaugeMonitor.start();
215
216 // Check if notification was received
217 //
218 doWait();
219 if (messageReceived) {
220 echo("\tOK: GaugeMonitor notification received");
221 } else {
222 echo("\tKO: GaugeMonitor notification missed or not emitted");
223 return 1;
224 }
225 } finally {
226 if (gaugeMonitor != null)
227 gaugeMonitor.stop();
228 }
229
230 return 0;
231 }
232
233 /**
234 * Update the string and check for notifications
235 */
236 public int stringMonitorNotification() throws Exception {
237
238 StringMonitor stringMonitor = null;
270
271 stringMonitor.setObservedAttribute("StringAttribute");
272 echo("\tATTRIBUTE \"ObservedAttribute\" = StringAttribute");
273
274 stringMonitor.setNotifyMatch(true);
275 echo("\tATTRIBUTE \"NotifyMatch\" = true");
276
277 stringMonitor.setNotifyDiffer(false);
278 echo("\tATTRIBUTE \"NotifyDiffer\" = false");
279
280 stringMonitor.setStringToCompare("do_match_now");
281 echo("\tATTRIBUTE \"StringToCompare\" = \"do_match_now\"");
282
283 int granularityperiod = 500;
284 stringMonitor.setGranularityPeriod(granularityperiod);
285 echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
286
287 echo(">>> START the StringMonitor");
288 stringMonitor.start();
289
290 // Check if notification was received
291 //
292 doWait();
293 if (messageReceived) {
294 echo("\tOK: StringMonitor notification received");
295 } else {
296 echo("\tKO: StringMonitor notification missed or not emitted");
297 return 1;
298 }
299 } finally {
300 if (stringMonitor != null)
301 stringMonitor.stop();
302 }
303
304 return 0;
305 }
306
307 /**
308 * Test the monitor notifications.
309 */
310 public int monitorNotifications() throws Exception {
311 echo(">>> ----------------------------------------");
312 messageReceived = false;
313 int error = counterMonitorNotification();
314 echo(">>> ----------------------------------------");
315 messageReceived = false;
316 error += gaugeMonitorNotification();
317 echo(">>> ----------------------------------------");
318 messageReceived = false;
319 error += stringMonitorNotification();
320 echo(">>> ----------------------------------------");
321 return error;
322 }
323
324 /*
325 * Print message
326 */
327 private static void echo(String message) {
328 System.out.println(message);
329 }
330
331 /*
332 * Wait messageReceived to be true
333 */
334 synchronized void doWait() {
335 System.out.println("---jsl doWait..."+messageReceived);
336 while (!messageReceived) {
337 try {
338 wait();
339 } catch (InterruptedException e) {
340 System.err.println("Got unexpected exception: " + e);
341 e.printStackTrace();
342 break;
343 }
344 }
345 System.out.println("---jsl doWait2..."+messageReceived);
346 }
347
348 /*
349 * Standalone entry point.
350 *
351 * Run the test and report to stdout.
352 */
353 public static void main (String args[]) throws Exception {
354 NonComparableAttributeValueTest test = new NonComparableAttributeValueTest();
355 int error = test.monitorNotifications();
356 if (error > 0) {
357 echo(">>> Unhappy Bye, Bye!");
358 throw new IllegalStateException("Test FAILED: Didn't get all " +
359 "the notifications that were " +
360 "expected by the test!");
361 } else {
362 echo(">>> Happy Bye, Bye!");
363 }
364 }
365 }
|