Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/management/ObjectInstance/MBeanInfoFailTest.java
41149 views
1
/*
2
* Copyright (c) 2004, 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 5001857
27
* @summary Test queryNames() and queryMBeans() with a buggy DynamicMBean
28
* @author Daniel Fuchs
29
*
30
* @run clean MBeanInfoFailTest
31
* @run build MBeanInfoFailTest
32
* @run main MBeanInfoFailTest
33
*/
34
35
import javax.management.*;
36
import java.util.*;
37
38
public class MBeanInfoFailTest {
39
40
public static class UnspeakableException extends RuntimeException {
41
public UnspeakableException(String unspeakableMessage) {
42
super(unspeakableMessage);
43
}
44
}
45
46
public interface ThornyDevilMBean {
47
public boolean isDormant();
48
public void setDormant(boolean sleep);
49
}
50
51
public static class ThornyDevil
52
extends StandardMBean implements ThornyDevilMBean {
53
private boolean sleep=true;
54
public ThornyDevil() throws NotCompliantMBeanException {
55
super(ThornyDevilMBean.class);
56
}
57
public boolean isDormant() {
58
return this.sleep;
59
}
60
public void setDormant(boolean sleep) {
61
this.sleep = sleep;
62
}
63
public MBeanInfo getMBeanInfo() {
64
if (isDormant()) return super.getMBeanInfo();
65
throw new UnspeakableException("The Thorny Devil has awoken!");
66
}
67
}
68
69
public static void printInstances(Set instances) {
70
for (Iterator it1 = instances.iterator(); it1.hasNext();) {
71
final ObjectInstance oi = (ObjectInstance)it1.next();
72
final ObjectName on = oi.getObjectName();
73
final String cn = oi.getClassName();
74
System.err.println(String.valueOf(on) + ": class is " + cn);
75
}
76
}
77
78
public static void main(String[] args) throws Exception {
79
System.out.println("Test queryNames() and queryMBeans() with a "+
80
"buggy DynamicMBean");
81
try {
82
final MBeanServer server = MBeanServerFactory.createMBeanServer();
83
84
final ObjectName troubleKeeper =
85
new ObjectName("ThornyDevil:name=TroubleKeeper");
86
final ObjectName troubleMaker =
87
new ObjectName("ThornyDevil:name=TroubleMaker");
88
final ObjectName thornyPattern =
89
new ObjectName("ThornyDevil:*");
90
91
server.createMBean(ThornyDevil.class.getName(),
92
troubleKeeper);
93
server.createMBean(ThornyDevil.class.getName(),
94
troubleMaker);
95
96
final MBeanInfo info1 = server.getMBeanInfo(troubleKeeper);
97
System.out.println(String.valueOf(troubleKeeper)+" is a " +
98
info1.getClassName());
99
final MBeanInfo info2 = server.getMBeanInfo(troubleMaker);
100
System.out.println(String.valueOf(troubleMaker)+" is a " +
101
info2.getClassName());
102
final Set thorny1 = server.queryNames(thornyPattern,null);
103
if (thorny1.size() != 2) {
104
System.err.println("queryNames(): " +
105
"Expected to find 2 ThornyDevils before" +
106
" trouble started! ");
107
System.err.println("Found "+thorny1.size()+" instead: "+
108
thorny1);
109
System.exit(1);
110
}
111
final Set thornyM1 = server.queryMBeans(thornyPattern,null);
112
if (thornyM1.size() != 2) {
113
System.err.println("queryMBeans(): " +
114
"Expected to find 2 ThornyDevils before" +
115
" trouble started! ");
116
System.err.println("Found "+thornyM1.size()+" instead: ");
117
printInstances(thornyM1);
118
System.exit(2);
119
}
120
for (Iterator it1 = thornyM1.iterator(); it1.hasNext();) {
121
final ObjectInstance oi = (ObjectInstance)it1.next();
122
final ObjectName on = oi.getObjectName();
123
final String cn = oi.getClassName();
124
if (cn == null || !ThornyDevil.class.getName().
125
equals(cn)) {
126
System.err.println("Expected no trouble yet!");
127
System.err.println(String.valueOf(on) + ": class is " +
128
cn);
129
System.exit(3);
130
}
131
System.out.println(String.valueOf(on) + ": class is " + cn);
132
}
133
134
System.out.println("Starting trouble with "+troubleMaker+" ...");
135
ThornyDevilMBean troubleMakerproxy =
136
(ThornyDevilMBean) MBeanServerInvocationHandler.
137
newProxyInstance(server, troubleMaker, ThornyDevilMBean.class,
138
false);
139
troubleMakerproxy.setDormant(false);
140
141
try {
142
final MBeanInfo mbi = server.getMBeanInfo(troubleMaker);
143
System.err.println("No trouble started!: " + mbi);
144
System.exit(2);
145
} catch (Exception x) {
146
if (x.getCause() instanceof UnspeakableException)
147
System.out.println("Trouble started as expected: "
148
+ x.getCause());
149
else {
150
System.err.println("Unexpected trouble: " + x.getCause());
151
x.printStackTrace();
152
System.exit(3);
153
}
154
}
155
156
final Set thorny2 = server.queryNames(thornyPattern,null);
157
if (thorny2.size() != 2) {
158
System.err.println("Expected to find 2 ThornyDevils after" +
159
" trouble started! ");
160
System.err.println("Found "+thorny2.size()+" instead: "+
161
thorny2);
162
System.exit(4);
163
}
164
165
final Set thornyM2 = server.queryMBeans(thornyPattern,null);
166
if (thornyM2.size() != 2) {
167
System.err.println("queryMBeans(): " +
168
"Expected to find 2 ThornyDevils after" +
169
" trouble started! ");
170
System.err.println("Found "+thornyM2.size()+" instead: ");
171
printInstances(thornyM2);
172
System.exit(5);
173
}
174
for (Iterator it1 = thornyM2.iterator(); it1.hasNext();) {
175
final ObjectInstance oi = (ObjectInstance)it1.next();
176
final ObjectName on = oi.getObjectName();
177
final String cn = oi.getClassName();
178
if (!on.equals(troubleMaker)) {
179
if (cn == null || !ThornyDevil.class.getName().
180
equals(cn)) {
181
System.err.println("Expected no trouble for " + on);
182
System.err.println(String.valueOf(on) + ": class is " +
183
cn);
184
System.exit(6);
185
}
186
} else {
187
if (cn != null) {
188
System.err.println("Expected trouble for " + on);
189
System.err.println(String.valueOf(on) + ": class is " +
190
cn);
191
System.exit(7);
192
}
193
}
194
System.out.println(String.valueOf(on) + ": class is " + cn);
195
}
196
197
System.out.println("Ahahah! " + troubleMaker +
198
" successfully thwarted!");
199
} catch( Exception x) {
200
System.err.println("Unexpected exception: " + x);
201
x.printStackTrace();
202
System.exit(8);
203
}
204
}
205
206
}
207
208