Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/sun/security/ssl/SSLSocketImpl/SSLSocketImplThrowsWrongExceptions.java
38853 views
1
/*
2
* Copyright (c) 2001, 2013, 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
// SunJSSE does not support dynamic system properties, no way to re-use
26
// system properties in samevm/agentvm mode.
27
//
28
29
/*
30
* @test
31
* @bug 4361124 4325806
32
* @summary SSLServerSocket isn't throwing exceptions when negotiations are
33
* failing & java.net.SocketException: occures in Auth and clientmode
34
* @run main/othervm SSLSocketImplThrowsWrongExceptions
35
* @author Brad Wetmore
36
*/
37
38
import java.io.*;
39
import java.net.*;
40
import javax.net.ssl.*;
41
42
public class SSLSocketImplThrowsWrongExceptions {
43
44
/*
45
* =============================================================
46
* Set the various variables needed for the tests, then
47
* specify what tests to run on each side.
48
*/
49
50
/*
51
* Should we run the client or server in a separate thread?
52
* Both sides can throw exceptions, but do you have a preference
53
* as to which side should be the main thread.
54
*/
55
static boolean separateServerThread = true;
56
57
/*
58
* Where do we find the keystores?
59
*/
60
static String pathToStores = "../../../../javax/net/ssl/etc";
61
static String keyStoreFile = "keystore";
62
static String passwd = "passphrase";
63
64
/*
65
* Is the server ready to serve?
66
*/
67
volatile static boolean serverReady = false;
68
69
/*
70
* Turn on SSL debugging?
71
*/
72
static boolean debug = false;
73
74
75
/*
76
* Define the server side of the test.
77
*/
78
void doServerSide() throws Exception {
79
System.out.println("starting Server");
80
SSLServerSocketFactory sslssf =
81
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
82
SSLServerSocket sslServerSocket =
83
(SSLServerSocket) sslssf.createServerSocket(serverPort);
84
serverPort = sslServerSocket.getLocalPort();
85
System.out.println("got server socket");
86
87
/*
88
* Signal Client, we're ready for his connect.
89
*/
90
serverReady = true;
91
92
try {
93
System.out.println("Server socket accepting...");
94
SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
95
System.out.println("Server starting handshake");
96
sslSocket.startHandshake();
97
throw new Exception("Handshake was successful");
98
} catch (SSLException e) {
99
/*
100
* Caught the right Exeption. Swallow it.
101
*/
102
System.out.println("Server reported the right exception");
103
System.out.println(e.toString());
104
} catch (Exception e) {
105
/*
106
* Caught the wrong exception. Rethrow it.
107
*/
108
System.out.println("Server reported the wrong exception");
109
throw e;
110
}
111
112
}
113
114
/*
115
* Define the client side of the test.
116
*/
117
void doClientSide() throws Exception {
118
119
System.out.println(" Client starting");
120
121
/*
122
* Wait for server to get started.
123
*/
124
while (!serverReady) {
125
Thread.sleep(50);
126
}
127
128
SSLSocketFactory sslsf =
129
(SSLSocketFactory) SSLSocketFactory.getDefault();
130
try {
131
System.out.println(" Client creating socket");
132
SSLSocket sslSocket = (SSLSocket)
133
sslsf.createSocket("localhost", serverPort);
134
System.out.println(" Client starting handshake");
135
sslSocket.startHandshake();
136
throw new Exception("Handshake was successful");
137
} catch (SSLException e) {
138
/*
139
* Caught the right Exception. Swallow it.
140
*/
141
System.out.println(" Client reported correct exception");
142
System.out.println(" " + e.toString());
143
} catch (Exception e) {
144
/*
145
* Caught the wrong exception. Rethrow it.
146
*/
147
System.out.println(" Client reported the wrong exception");
148
throw e;
149
}
150
}
151
152
/*
153
* =============================================================
154
* The remainder is just support stuff
155
*/
156
157
// use any free port by default
158
volatile int serverPort = 0;
159
160
volatile Exception serverException = null;
161
volatile Exception clientException = null;
162
163
public static void main(String[] args) throws Exception {
164
String keyFilename =
165
System.getProperty("test.src", "./") + "/" + pathToStores +
166
"/" + keyStoreFile;
167
168
System.setProperty("javax.net.ssl.keyStore", keyFilename);
169
System.setProperty("javax.net.ssl.keyStorePassword", passwd);
170
171
if (debug)
172
System.setProperty("javax.net.debug", "all");
173
174
/*
175
* Start the tests.
176
*/
177
new SSLSocketImplThrowsWrongExceptions();
178
}
179
180
Thread clientThread = null;
181
Thread serverThread = null;
182
183
/*
184
* Primary constructor, used to drive remainder of the test.
185
*
186
* Fork off the other side, then do your work.
187
*/
188
SSLSocketImplThrowsWrongExceptions () throws Exception {
189
Exception startException = null;
190
try {
191
if (separateServerThread) {
192
startServer(true);
193
startClient(false);
194
} else {
195
startClient(true);
196
startServer(false);
197
}
198
} catch (Exception e) {
199
startException = e;
200
}
201
202
/*
203
* Wait for other side to close down.
204
*/
205
if (separateServerThread) {
206
if (serverThread != null) {
207
serverThread.join();
208
}
209
} else {
210
if (clientThread != null) {
211
clientThread.join();
212
}
213
}
214
215
/*
216
* When we get here, the test is pretty much over.
217
* Which side threw the error?
218
*/
219
Exception local;
220
Exception remote;
221
222
if (separateServerThread) {
223
remote = serverException;
224
local = clientException;
225
} else {
226
remote = clientException;
227
local = serverException;
228
}
229
230
Exception exception = null;
231
232
/*
233
* Check various exception conditions.
234
*/
235
if ((local != null) && (remote != null)) {
236
// If both failed, return the curthread's exception.
237
local.initCause(remote);
238
exception = local;
239
} else if (local != null) {
240
exception = local;
241
} else if (remote != null) {
242
exception = remote;
243
} else if (startException != null) {
244
exception = startException;
245
}
246
247
/*
248
* If there was an exception *AND* a startException,
249
* output it.
250
*/
251
if (exception != null) {
252
if (exception != startException && startException != null) {
253
exception.addSuppressed(startException);
254
}
255
throw exception;
256
}
257
258
// Fall-through: no exception to throw!
259
}
260
261
void startServer(boolean newThread) throws Exception {
262
if (newThread) {
263
serverThread = new Thread() {
264
public void run() {
265
try {
266
doServerSide();
267
} catch (Exception e) {
268
/*
269
* Our server thread just died.
270
*
271
* Release the client, if not active already...
272
*/
273
System.err.println("Server died...");
274
serverReady = true;
275
serverException = e;
276
}
277
}
278
};
279
serverThread.start();
280
} else {
281
try {
282
doServerSide();
283
} catch (Exception e) {
284
serverException = e;
285
} finally {
286
serverReady = true;
287
}
288
}
289
}
290
291
void startClient(boolean newThread) throws Exception {
292
if (newThread) {
293
clientThread = new Thread() {
294
public void run() {
295
try {
296
doClientSide();
297
} catch (Exception e) {
298
/*
299
* Our client thread just died.
300
*/
301
System.err.println("Client died...");
302
clientException = e;
303
}
304
}
305
};
306
clientThread.start();
307
} else {
308
try {
309
doClientSide();
310
} catch (Exception e) {
311
clientException = e;
312
}
313
}
314
}
315
}
316
317