Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/management/monitor/NonComparableAttributeValueTest.java
41149 views
1
/*
2
* Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
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
*
32
* @run clean NonComparableAttributeValueTest
33
* @run build NonComparableAttributeValueTest
34
* @run main NonComparableAttributeValueTest
35
*/
36
37
import javax.management.*;
38
import javax.management.monitor.*;
39
40
public class NonComparableAttributeValueTest implements NotificationListener {
41
42
// Flag to notify that a message has been received
43
private volatile boolean messageReceived = false;
44
45
// MBean class
46
public class ObservedObject implements ObservedObjectMBean {
47
public Object getIntegerAttribute() {
48
return new Object();
49
}
50
public Object getStringAttribute() {
51
return new Object();
52
}
53
}
54
55
// MBean interface
56
public interface ObservedObjectMBean {
57
public Object getIntegerAttribute();
58
public Object getStringAttribute();
59
}
60
61
// Notification handler
62
public void handleNotification(Notification notification,
63
Object handback) {
64
MonitorNotification n = (MonitorNotification) notification;
65
echo("\tInside handleNotification...");
66
String type = n.getType();
67
try {
68
if (type.equals(
69
MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR)) {
70
echo("\t\t" + n.getObservedAttribute() + " is null");
71
echo("\t\tDerived Gauge = " + n.getDerivedGauge());
72
echo("\t\tTrigger = " + n.getTrigger());
73
74
synchronized (this) {
75
messageReceived = true;
76
notifyAll();
77
}
78
} else {
79
echo("\t\tSkipping notification of type: " + type);
80
}
81
} catch (Exception e) {
82
echo("\tError in handleNotification!");
83
e.printStackTrace(System.out);
84
}
85
}
86
87
/**
88
* Update the counter and check for notifications
89
*/
90
public int counterMonitorNotification() throws Exception {
91
92
CounterMonitor counterMonitor = null;
93
try {
94
MBeanServer server = MBeanServerFactory.newMBeanServer();
95
96
String domain = server.getDefaultDomain();
97
98
// Create a new CounterMonitor MBean and add it to the MBeanServer.
99
//
100
echo(">>> CREATE a new CounterMonitor MBean");
101
ObjectName counterMonitorName = new ObjectName(
102
domain + ":type=" + CounterMonitor.class.getName());
103
counterMonitor = new CounterMonitor();
104
server.registerMBean(counterMonitor, counterMonitorName);
105
106
echo(">>> ADD a listener to the CounterMonitor");
107
counterMonitor.addNotificationListener(this, null, null);
108
109
//
110
// MANAGEMENT OF A STANDARD MBEAN
111
//
112
113
echo(">>> CREATE a new ObservedObject MBean");
114
115
ObjectName obsObjName =
116
ObjectName.getInstance(domain + ":type=ObservedObject");
117
ObservedObject obsObj = new ObservedObject();
118
server.registerMBean(obsObj, obsObjName);
119
120
echo(">>> SET the attributes of the CounterMonitor:");
121
122
counterMonitor.addObservedObject(obsObjName);
123
echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
124
125
counterMonitor.setObservedAttribute("IntegerAttribute");
126
echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
127
128
counterMonitor.setNotify(true);
129
echo("\tATTRIBUTE \"NotifyFlag\" = true");
130
131
Integer threshold = 2;
132
counterMonitor.setInitThreshold(threshold);
133
echo("\tATTRIBUTE \"Threshold\" = " + threshold);
134
135
int granularityperiod = 500;
136
counterMonitor.setGranularityPeriod(granularityperiod);
137
echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
138
139
echo(">>> START the CounterMonitor");
140
counterMonitor.start();
141
142
// Check if notification was received
143
//
144
doWait();
145
if (messageReceived) {
146
echo("\tOK: CounterMonitor notification received");
147
} else {
148
echo("\tKO: CounterMonitor notification missed or not emitted");
149
return 1;
150
}
151
} finally {
152
if (counterMonitor != null)
153
counterMonitor.stop();
154
}
155
156
return 0;
157
}
158
159
/**
160
* Update the gauge and check for notifications
161
*/
162
public int gaugeMonitorNotification() throws Exception {
163
164
GaugeMonitor gaugeMonitor = null;
165
try {
166
MBeanServer server = MBeanServerFactory.newMBeanServer();
167
168
String domain = server.getDefaultDomain();
169
170
// Create a new GaugeMonitor MBean and add it to the MBeanServer.
171
//
172
echo(">>> CREATE a new GaugeMonitor MBean");
173
ObjectName gaugeMonitorName = new ObjectName(
174
domain + ":type=" + GaugeMonitor.class.getName());
175
gaugeMonitor = new GaugeMonitor();
176
server.registerMBean(gaugeMonitor, gaugeMonitorName);
177
178
echo(">>> ADD a listener to the GaugeMonitor");
179
gaugeMonitor.addNotificationListener(this, null, null);
180
181
//
182
// MANAGEMENT OF A STANDARD MBEAN
183
//
184
185
echo(">>> CREATE a new ObservedObject MBean");
186
187
ObjectName obsObjName =
188
ObjectName.getInstance(domain + ":type=ObservedObject");
189
ObservedObject obsObj = new ObservedObject();
190
server.registerMBean(obsObj, obsObjName);
191
192
echo(">>> SET the attributes of the GaugeMonitor:");
193
194
gaugeMonitor.addObservedObject(obsObjName);
195
echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
196
197
gaugeMonitor.setObservedAttribute("IntegerAttribute");
198
echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
199
200
gaugeMonitor.setNotifyLow(false);
201
gaugeMonitor.setNotifyHigh(true);
202
echo("\tATTRIBUTE \"Notify Low Flag\" = false");
203
echo("\tATTRIBUTE \"Notify High Flag\" = true");
204
205
Double highThreshold = 3.0, lowThreshold = 2.5;
206
gaugeMonitor.setThresholds(highThreshold, lowThreshold);
207
echo("\tATTRIBUTE \"Low Threshold\" = " + lowThreshold);
208
echo("\tATTRIBUTE \"High Threshold\" = " + highThreshold);
209
210
int granularityperiod = 500;
211
gaugeMonitor.setGranularityPeriod(granularityperiod);
212
echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
213
214
echo(">>> START the GaugeMonitor");
215
gaugeMonitor.start();
216
217
// Check if notification was received
218
//
219
doWait();
220
if (messageReceived) {
221
echo("\tOK: GaugeMonitor notification received");
222
} else {
223
echo("\tKO: GaugeMonitor notification missed or not emitted");
224
return 1;
225
}
226
} finally {
227
if (gaugeMonitor != null)
228
gaugeMonitor.stop();
229
}
230
231
return 0;
232
}
233
234
/**
235
* Update the string and check for notifications
236
*/
237
public int stringMonitorNotification() throws Exception {
238
239
StringMonitor stringMonitor = null;
240
try {
241
MBeanServer server = MBeanServerFactory.newMBeanServer();
242
243
String domain = server.getDefaultDomain();
244
245
// Create a new StringMonitor MBean and add it to the MBeanServer.
246
//
247
echo(">>> CREATE a new StringMonitor MBean");
248
ObjectName stringMonitorName = new ObjectName(
249
domain + ":type=" + StringMonitor.class.getName());
250
stringMonitor = new StringMonitor();
251
server.registerMBean(stringMonitor, stringMonitorName);
252
253
echo(">>> ADD a listener to the StringMonitor");
254
stringMonitor.addNotificationListener(this, null, null);
255
256
//
257
// MANAGEMENT OF A STANDARD MBEAN
258
//
259
260
echo(">>> CREATE a new ObservedObject MBean");
261
262
ObjectName obsObjName =
263
ObjectName.getInstance(domain + ":type=ObservedObject");
264
ObservedObject obsObj = new ObservedObject();
265
server.registerMBean(obsObj, obsObjName);
266
267
echo(">>> SET the attributes of the StringMonitor:");
268
269
stringMonitor.addObservedObject(obsObjName);
270
echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
271
272
stringMonitor.setObservedAttribute("StringAttribute");
273
echo("\tATTRIBUTE \"ObservedAttribute\" = StringAttribute");
274
275
stringMonitor.setNotifyMatch(true);
276
echo("\tATTRIBUTE \"NotifyMatch\" = true");
277
278
stringMonitor.setNotifyDiffer(false);
279
echo("\tATTRIBUTE \"NotifyDiffer\" = false");
280
281
stringMonitor.setStringToCompare("do_match_now");
282
echo("\tATTRIBUTE \"StringToCompare\" = \"do_match_now\"");
283
284
int granularityperiod = 500;
285
stringMonitor.setGranularityPeriod(granularityperiod);
286
echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
287
288
echo(">>> START the StringMonitor");
289
stringMonitor.start();
290
291
// Check if notification was received
292
//
293
doWait();
294
if (messageReceived) {
295
echo("\tOK: StringMonitor notification received");
296
} else {
297
echo("\tKO: StringMonitor notification missed or not emitted");
298
return 1;
299
}
300
} finally {
301
if (stringMonitor != null)
302
stringMonitor.stop();
303
}
304
305
return 0;
306
}
307
308
/**
309
* Test the monitor notifications.
310
*/
311
public int monitorNotifications() throws Exception {
312
echo(">>> ----------------------------------------");
313
messageReceived = false;
314
int error = counterMonitorNotification();
315
echo(">>> ----------------------------------------");
316
messageReceived = false;
317
error += gaugeMonitorNotification();
318
echo(">>> ----------------------------------------");
319
messageReceived = false;
320
error += stringMonitorNotification();
321
echo(">>> ----------------------------------------");
322
return error;
323
}
324
325
/*
326
* Print message
327
*/
328
private static void echo(String message) {
329
System.out.println(message);
330
}
331
332
/*
333
* Wait messageReceived to be true
334
*/
335
synchronized void doWait() {
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
}
346
347
/*
348
* Standalone entry point.
349
*
350
* Run the test and report to stdout.
351
*/
352
public static void main (String args[]) throws Exception {
353
NonComparableAttributeValueTest test = new NonComparableAttributeValueTest();
354
int error = test.monitorNotifications();
355
if (error > 0) {
356
echo(">>> Unhappy Bye, Bye!");
357
throw new IllegalStateException("Test FAILED: Didn't get all " +
358
"the notifications that were " +
359
"expected by the test!");
360
} else {
361
echo(">>> Happy Bye, Bye!");
362
}
363
}
364
}
365
366