Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/management/monitor/NonComparableAttributeValueTest.java
38839 views
1
/*
2
* Copyright (c) 2005, 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
* @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
97
// Create a new CounterMonitor MBean and add it to the MBeanServer.
98
//
99
echo(">>> CREATE a new CounterMonitor MBean");
100
ObjectName counterMonitorName = new ObjectName(
101
domain + ":type=" + CounterMonitor.class.getName());
102
counterMonitor = new CounterMonitor();
103
server.registerMBean(counterMonitor, counterMonitorName);
104
105
echo(">>> ADD a listener to the CounterMonitor");
106
counterMonitor.addNotificationListener(this, null, null);
107
108
//
109
// MANAGEMENT OF A STANDARD MBEAN
110
//
111
112
echo(">>> CREATE a new ObservedObject MBean");
113
114
ObjectName obsObjName =
115
ObjectName.getInstance(domain + ":type=ObservedObject");
116
ObservedObject obsObj = new ObservedObject();
117
server.registerMBean(obsObj, obsObjName);
118
119
echo(">>> SET the attributes of the CounterMonitor:");
120
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;
164
try {
165
MBeanServer server = MBeanServerFactory.newMBeanServer();
166
167
String domain = server.getDefaultDomain();
168
169
// Create a new GaugeMonitor MBean and add it to the MBeanServer.
170
//
171
echo(">>> CREATE a new GaugeMonitor MBean");
172
ObjectName gaugeMonitorName = new ObjectName(
173
domain + ":type=" + GaugeMonitor.class.getName());
174
gaugeMonitor = new GaugeMonitor();
175
server.registerMBean(gaugeMonitor, gaugeMonitorName);
176
177
echo(">>> ADD a listener to the GaugeMonitor");
178
gaugeMonitor.addNotificationListener(this, null, null);
179
180
//
181
// MANAGEMENT OF A STANDARD MBEAN
182
//
183
184
echo(">>> CREATE a new ObservedObject MBean");
185
186
ObjectName obsObjName =
187
ObjectName.getInstance(domain + ":type=ObservedObject");
188
ObservedObject obsObj = new ObservedObject();
189
server.registerMBean(obsObj, obsObjName);
190
191
echo(">>> SET the attributes of the GaugeMonitor:");
192
193
gaugeMonitor.addObservedObject(obsObjName);
194
echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
195
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;
239
try {
240
MBeanServer server = MBeanServerFactory.newMBeanServer();
241
242
String domain = server.getDefaultDomain();
243
244
// Create a new StringMonitor MBean and add it to the MBeanServer.
245
//
246
echo(">>> CREATE a new StringMonitor MBean");
247
ObjectName stringMonitorName = new ObjectName(
248
domain + ":type=" + StringMonitor.class.getName());
249
stringMonitor = new StringMonitor();
250
server.registerMBean(stringMonitor, stringMonitorName);
251
252
echo(">>> ADD a listener to the StringMonitor");
253
stringMonitor.addNotificationListener(this, null, null);
254
255
//
256
// MANAGEMENT OF A STANDARD MBEAN
257
//
258
259
echo(">>> CREATE a new ObservedObject MBean");
260
261
ObjectName obsObjName =
262
ObjectName.getInstance(domain + ":type=ObservedObject");
263
ObservedObject obsObj = new ObservedObject();
264
server.registerMBean(obsObj, obsObjName);
265
266
echo(">>> SET the attributes of the StringMonitor:");
267
268
stringMonitor.addObservedObject(obsObjName);
269
echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
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
while (!messageReceived) {
336
try {
337
wait();
338
} catch (InterruptedException e) {
339
System.err.println("Got unexpected exception: " + e);
340
e.printStackTrace();
341
break;
342
}
343
}
344
}
345
346
/*
347
* Standalone entry point.
348
*
349
* Run the test and report to stdout.
350
*/
351
public static void main (String args[]) throws Exception {
352
NonComparableAttributeValueTest test = new NonComparableAttributeValueTest();
353
int error = test.monitorNotifications();
354
if (error > 0) {
355
echo(">>> Unhappy Bye, Bye!");
356
throw new IllegalStateException("Test FAILED: Didn't get all " +
357
"the notifications that were " +
358
"expected by the test!");
359
} else {
360
echo(">>> Happy Bye, Bye!");
361
}
362
}
363
}
364
365