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/ObjectName/SerialCompatTest.java
38839 views
1
/*
2
* Copyright (c) 2004, 2008, 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 6211220 6616825
27
* @summary Test that jmx.serial.form=1.0 works for ObjectName
28
* @author Eamonn McManus, Daniel Fuchs
29
* @run clean SerialCompatTest
30
* @run build SerialCompatTest
31
* @run main/othervm -Djdk.jmx.mbeans.allowNonPublic=true -Djmx.serial.form=1.0 SerialCompatTest
32
*/
33
34
import java.io.*;
35
import java.util.*;
36
import javax.management.ObjectName;
37
38
public class SerialCompatTest {
39
40
public static void check6211220() throws Exception {
41
42
ObjectName on = new ObjectName("a:b=c");
43
ByteArrayOutputStream bos = new ByteArrayOutputStream();
44
ObjectOutputStream oos = new ObjectOutputStream(bos);
45
oos.writeObject(on);
46
oos.close();
47
byte[] bytes = bos.toByteArray();
48
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
49
ObjectInputStream ois = new ObjectInputStream(bis);
50
ObjectName on1 = (ObjectName) ois.readObject();
51
52
// if the bug is present, these will get NullPointerException
53
for (int i = 0; i <= 11; i++) {
54
String msg = "6211220 case(" + i + ")";
55
try {
56
switch (i) {
57
case 0:
58
check(msg, on1.getDomain().equals("a"));
59
break;
60
case 1:
61
check(msg, on1.getCanonicalName().equals("a:b=c"));
62
break;
63
case 2:
64
check(msg, on1.getKeyPropertyListString()
65
.equals("b=c"));
66
break;
67
case 3:
68
check(msg, on1.getCanonicalKeyPropertyListString()
69
.equals("b=c"));
70
break;
71
case 4:
72
check(msg, on1.getKeyProperty("b").equals("c"));
73
break;
74
case 5:
75
check(msg, on1.getKeyPropertyList()
76
.equals(Collections.singletonMap("b", "c")));
77
break;
78
case 6:
79
check(msg, !on1.isDomainPattern());
80
break;
81
case 7:
82
check(msg, !on1.isPattern());
83
break;
84
case 8:
85
check(msg, !on1.isPropertyPattern());
86
break;
87
case 9:
88
check(msg, on1.equals(on));
89
break;
90
case 10:
91
check(msg, on.equals(on1));
92
break;
93
case 11:
94
check(msg, on1.apply(on));
95
break;
96
default:
97
throw new Exception(msg + ": Test incorrect");
98
}
99
} catch (Exception e) {
100
System.out.println(msg + ": Test failed with exception:");
101
e.printStackTrace(System.out);
102
failed = true;
103
}
104
}
105
106
if (failed) {
107
throw new Exception("Some tests for 6211220 failed");
108
} else {
109
System.out.println("All tests for 6211220 passed");
110
}
111
}
112
113
static void checkName(String testname, ObjectName on)
114
throws Exception {
115
ByteArrayOutputStream bos = new ByteArrayOutputStream();
116
ObjectOutputStream oos = new ObjectOutputStream(bos);
117
oos.writeObject(on);
118
oos.close();
119
byte[] bytes = bos.toByteArray();
120
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
121
ObjectInputStream ois = new ObjectInputStream(bis);
122
ObjectName on1 = (ObjectName) ois.readObject();
123
// if the bug is present, these will get NullPointerException
124
for (int i = 0; i <= 11; i++) {
125
String msg = testname + " case(" + i + ")";
126
try {
127
switch (i) {
128
case 0:
129
check(msg, on1.getDomain().equals(on.getDomain()));
130
break;
131
case 1:
132
check(msg, on1.getCanonicalName().
133
equals(on.getCanonicalName()));
134
break;
135
case 2:
136
check(msg, on1.getKeyPropertyListString().
137
equals(on.getKeyPropertyListString()));
138
break;
139
case 3:
140
check(msg, on1.getCanonicalKeyPropertyListString().
141
equals(on.getCanonicalKeyPropertyListString()));
142
break;
143
case 4:
144
for (Object ko : on1.getKeyPropertyList().keySet()) {
145
final String key = (String) ko;
146
check(msg, on1.getKeyProperty(key).
147
equals(on.getKeyProperty(key)));
148
}
149
for (Object ko : on.getKeyPropertyList().keySet()) {
150
final String key = (String) ko;
151
check(msg, on1.getKeyProperty(key).
152
equals(on.getKeyProperty(key)));
153
}
154
case 5:
155
check(msg, on1.getKeyPropertyList()
156
.equals(on.getKeyPropertyList()));
157
break;
158
case 6:
159
check(msg, on1.isDomainPattern()==on.isDomainPattern());
160
break;
161
case 7:
162
check(msg, on1.isPattern() == on.isPattern());
163
break;
164
case 8:
165
check(msg,
166
on1.isPropertyPattern()==on.isPropertyPattern());
167
break;
168
case 9:
169
check(msg, on1.equals(on));
170
break;
171
case 10:
172
check(msg, on.equals(on1));
173
break;
174
case 11:
175
if (!on.isPattern()) {
176
check(msg, on1.apply(on));
177
}
178
break;
179
default:
180
throw new Exception("Test incorrect: case: " + i);
181
}
182
} catch (Exception e) {
183
System.out.println("Test (" + i + ") failed with exception:");
184
e.printStackTrace(System.out);
185
failed = true;
186
}
187
}
188
189
}
190
private static String[] names6616825 = {
191
"a:b=c", "a:b=c,*", "*:*", ":*", ":b=c", ":b=c,*",
192
"a:*,b=c", ":*", ":*,b=c", "*x?:k=\"x\\*z\"", "*x?:k=\"x\\*z\",*",
193
"*x?:*,k=\"x\\*z\"", "*x?:k=\"x\\*z\",*,b=c"
194
};
195
196
static void check6616825() throws Exception {
197
System.out.println("Testing 616825");
198
for (String n : names6616825) {
199
final ObjectName on;
200
try {
201
on = new ObjectName(n);
202
} catch (Exception x) {
203
failed = true;
204
System.out.println("Unexpected failure for 6616825 [" + n +
205
"]: " + x);
206
x.printStackTrace(System.out);
207
continue;
208
}
209
try {
210
checkName("616825 " + n, on);
211
} catch (Exception x) {
212
failed = true;
213
System.out.println("6616825 failed for [" + n + "]: " + x);
214
x.printStackTrace(System.out);
215
}
216
}
217
218
if (failed) {
219
throw new Exception("Some tests for 6616825 failed");
220
} else {
221
System.out.println("All tests for 6616825 passed");
222
}
223
}
224
225
public static void main(String[] args) throws Exception {
226
/* Check that we really are in jmx.serial.form=1.0 mode.
227
The property is frozen the first time the ObjectName class
228
is referenced so checking that it is set to the correct
229
value now is not enough. */
230
ObjectStreamClass osc = ObjectStreamClass.lookup(ObjectName.class);
231
if (osc.getFields().length != 6) {
232
throw new Exception("Not using old serial form: fields: " +
233
Arrays.asList(osc.getFields()));
234
// new serial form has no fields, uses writeObject
235
}
236
237
try {
238
check6211220();
239
} catch (Exception x) {
240
System.err.println(x.getMessage());
241
}
242
try {
243
check6616825();
244
} catch (Exception x) {
245
System.err.println(x.getMessage());
246
}
247
248
if (failed) {
249
throw new Exception("Some tests failed");
250
} else {
251
System.out.println("All tests passed");
252
}
253
}
254
255
private static void check(String msg, boolean condition) {
256
if (!condition) {
257
new Throwable("Test failed " + msg).printStackTrace(System.out);
258
failed = true;
259
}
260
}
261
private static boolean failed;
262
}
263
264