Skip to content

Commit bb9f0f0

Browse files
ArnoZellerRealCLanger
authored andcommitted
8371559: Intermittent timeouts in test javax/net/ssl/Stapling/HttpsUrlConnClient.java
Reviewed-by: myankelevich, clanger Backport-of: af18fbd
1 parent 7ac780d commit bb9f0f0

File tree

1 file changed

+48
-38
lines changed

1 file changed

+48
-38
lines changed

test/jdk/javax/net/ssl/Stapling/HttpsUrlConnClient.java

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,21 @@
3333
* @run main/othervm HttpsUrlConnClient RSASSA-PSS RSASSA-PSS
3434
*/
3535

36-
import java.io.*;
36+
import java.io.BufferedReader;
37+
import java.io.IOException;
38+
import java.io.InputStream;
39+
import java.io.InputStreamReader;
40+
import java.io.OutputStream;
3741
import java.math.BigInteger;
3842
import java.security.KeyPair;
3943
import java.security.KeyPairGenerator;
4044
import java.net.Socket;
4145
import java.net.URL;
4246
import java.net.HttpURLConnection;
4347
import java.net.InetAddress;
48+
4449
import javax.net.ssl.*;
50+
4551
import java.security.KeyStore;
4652
import java.security.PublicKey;
4753
import java.security.Security;
@@ -55,7 +61,16 @@
5561
import java.security.cert.PKIXRevocationChecker;
5662
import java.security.spec.PKCS8EncodedKeySpec;
5763
import java.text.SimpleDateFormat;
58-
import java.util.*;
64+
import java.util.ArrayList;
65+
import java.util.Arrays;
66+
import java.util.Base64;
67+
import java.util.Collections;
68+
import java.util.Date;
69+
import java.util.HashMap;
70+
import java.util.List;
71+
import java.util.Map;
72+
import java.util.TimeZone;
73+
import java.util.concurrent.CountDownLatch;
5974
import java.util.concurrent.TimeUnit;
6075

6176
import jdk.test.lib.security.SimpleOCSPServer;
@@ -92,10 +107,6 @@ public class HttpsUrlConnClient {
92107
static String INT_ALIAS = "intermediate";
93108
static String SSL_ALIAS = "ssl";
94109

95-
/*
96-
* Is the server ready to serve?
97-
*/
98-
volatile static boolean serverReady = false;
99110
volatile int serverPort = 0;
100111

101112
volatile Exception serverException = null;
@@ -164,7 +175,7 @@ static void testPKIXParametersRevEnabled(String[] allowedProts)
164175
ClientParameters cliParams = new ClientParameters();
165176
cliParams.protocols = allowedProts;
166177
ServerParameters servParams = new ServerParameters();
167-
serverReady = false;
178+
CountDownLatch serverReady = new CountDownLatch(1);
168179

169180
System.out.println("=====================================");
170181
System.out.println("Stapling enabled, PKIXParameters with");
@@ -192,7 +203,7 @@ static void testPKIXParametersRevEnabled(String[] allowedProts)
192203
Security.setProperty("ocsp.enable", "false");
193204

194205
HttpsUrlConnClient sslTest = new HttpsUrlConnClient(cliParams,
195-
servParams);
206+
servParams, serverReady);
196207
TestResult tr = sslTest.getResult();
197208
if (!checkClientValidationFailure(tr.clientExc, BasicReason.REVOKED)) {
198209
if (tr.clientExc != null) {
@@ -219,10 +230,11 @@ static void testPKIXParametersRevEnabled(String[] allowedProts)
219230
/*
220231
* Define the server side of the test.
221232
*
222-
* If the server prematurely exits, serverReady will be set to true
233+
* If the server prematurely exits, serverReady will be counted down
223234
* to avoid infinite hangs.
224235
*/
225-
void doServerSide(ServerParameters servParams) throws Exception {
236+
void doServerSide(ServerParameters servParams, CountDownLatch serverReady)
237+
throws Exception {
226238

227239
// Selectively enable or disable the feature
228240
System.setProperty("jdk.tls.server.enableStatusRequestExtension",
@@ -274,7 +286,7 @@ void doServerSide(ServerParameters servParams) throws Exception {
274286
/*
275287
* Signal Client, we're ready for his connect.
276288
*/
277-
serverReady = true;
289+
serverReady.countDown();
278290

279291
try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
280292
BufferedReader in = new BufferedReader(
@@ -306,18 +318,13 @@ void doServerSide(ServerParameters servParams) throws Exception {
306318
/*
307319
* Define the client side of the test.
308320
*
309-
* If the server prematurely exits, serverReady will be set to true
321+
* If the server prematurely exits, serverReady will be counted down
310322
* to avoid infinite hangs.
311323
*/
312-
void doClientSide(ClientParameters cliParams) throws Exception {
324+
void doClientSide(ClientParameters cliParams, CountDownLatch serverReady)
325+
throws Exception {
313326

314-
// Wait 5 seconds for server ready
315-
for (int i = 0; (i < 100 && !serverReady); i++) {
316-
Thread.sleep(50);
317-
}
318-
if (!serverReady) {
319-
throw new RuntimeException("Server not ready yet");
320-
}
327+
serverReady.await();
321328

322329
// Selectively enable or disable the feature
323330
System.setProperty("jdk.tls.client.enableStatusRequestExtension",
@@ -373,16 +380,16 @@ void doClientSide(ClientParameters cliParams) throws Exception {
373380
*
374381
* Fork off the other side, then do your work.
375382
*/
376-
HttpsUrlConnClient(ClientParameters cliParams,
377-
ServerParameters servParams) throws Exception {
383+
HttpsUrlConnClient(ClientParameters cliParams, ServerParameters servParams,
384+
CountDownLatch serverReady) throws Exception {
378385
Exception startException = null;
379386
try {
380387
if (separateServerThread) {
381-
startServer(servParams, true);
382-
startClient(cliParams, false);
388+
startServer(servParams, true, serverReady);
389+
startClient(cliParams, false, serverReady);
383390
} else {
384-
startClient(cliParams, true);
385-
startServer(servParams, false);
391+
startClient(cliParams, true, serverReady);
392+
startServer(servParams, false, serverReady);
386393
}
387394
} catch (Exception e) {
388395
startException = e;
@@ -453,61 +460,64 @@ TestResult getResult() {
453460
return tr;
454461
}
455462

456-
final void startServer(ServerParameters servParams, boolean newThread)
457-
throws Exception {
463+
final void startServer(ServerParameters servParams, boolean newThread,
464+
CountDownLatch serverReady) throws IOException {
458465
if (newThread) {
459466
serverThread = new Thread() {
460467
@Override
461468
public void run() {
462469
try {
463-
doServerSide(servParams);
470+
doServerSide(servParams, serverReady);
464471
} catch (Exception e) {
465472
/*
466473
* Our server thread just died.
467474
*
468475
* Release the client, if not active already...
469476
*/
470-
System.err.println("Server died...");
471-
serverReady = true;
477+
System.err.println("Server died: " + e);
472478
serverException = e;
479+
} finally {
480+
serverReady.countDown();
473481
}
474482
}
475483
};
476484
serverThread.start();
477485
} else {
478486
try {
479-
doServerSide(servParams);
487+
doServerSide(servParams, serverReady);
480488
} catch (Exception e) {
489+
System.err.println("Server died: " + e);
481490
serverException = e;
482491
} finally {
483-
serverReady = true;
492+
serverReady.countDown();
484493
}
485494
}
486495
}
487496

488-
final void startClient(ClientParameters cliParams, boolean newThread)
489-
throws Exception {
497+
final void startClient(ClientParameters cliParams, boolean newThread,
498+
CountDownLatch serverReady) throws Exception {
490499
if (newThread) {
491500
clientThread = new Thread() {
492501
@Override
493502
public void run() {
494503
try {
495-
doClientSide(cliParams);
504+
doClientSide(cliParams, serverReady);
496505
} catch (Exception e) {
497506
/*
498507
* Our client thread just died.
499508
*/
500-
System.err.println("Client died...");
509+
System.err.println("Client died: " + e);
501510
clientException = e;
502511
}
503512
}
504513
};
505514
clientThread.start();
506515
} else {
507516
try {
508-
doClientSide(cliParams);
517+
doClientSide(cliParams, serverReady);
509518
} catch (Exception e) {
510519
clientException = e;
520+
System.err.println("Client died: " + e);
511521
}
512522
}
513523
}

0 commit comments

Comments
 (0)