132 lines
4.8 KiB
Diff
132 lines
4.8 KiB
Diff
|
|
From c3aae68d629a3adc02fb0764c95d922e716f0ee3 Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhangyipeng <zhangyipeng7@huawei.com>
|
||
|
|
Date: Mon, 15 Jan 2024 11:13:55 +0800
|
||
|
|
Subject: [PATCH] [Backport]8260923: Add more tests for SSLSocket input/output shutdown
|
||
|
|
---
|
||
|
|
.../ssl/SSLSocketImpl/SSLSocketCloseHang.java | 69 ++++++++++++++--------
|
||
|
|
1 file changed, 46 insertions(+), 23 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/jdk/test/sun/security/ssl/SSLSocketImpl/SSLSocketCloseHang.java b/jdk/test/sun/security/ssl/SSLSocketImpl/SSLSocketCloseHang.java
|
||
|
|
index f74c1fe76..ff6334feb 100644
|
||
|
|
--- a/jdk/test/sun/security/ssl/SSLSocketImpl/SSLSocketCloseHang.java
|
||
|
|
+++ b/jdk/test/sun/security/ssl/SSLSocketImpl/SSLSocketCloseHang.java
|
||
|
|
@@ -23,12 +23,17 @@
|
||
|
|
|
||
|
|
/*
|
||
|
|
* @test
|
||
|
|
- * @bug 8184328 8253368
|
||
|
|
+ * @bug 8184328 8253368 8260923
|
||
|
|
* @summary JDK8u131-b34-socketRead0 hang at SSL read
|
||
|
|
- * @run main/othervm SSLSocketCloseHang
|
||
|
|
- * @run main/othervm SSLSocketCloseHang shutdownInputTest
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.2
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.2 shutdownInput
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.2 shutdownOutput
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.3
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.3 shutdownInput
|
||
|
|
+ * @run main/othervm SSLSocketCloseHang TLSv1.3 shutdownOutput
|
||
|
|
*/
|
||
|
|
|
||
|
|
+
|
||
|
|
import java.io.*;
|
||
|
|
import java.net.*;
|
||
|
|
import java.util.*;
|
||
|
|
@@ -36,7 +41,6 @@ import java.security.*;
|
||
|
|
import javax.net.ssl.*;
|
||
|
|
|
||
|
|
public class SSLSocketCloseHang {
|
||
|
|
-
|
||
|
|
/*
|
||
|
|
* =============================================================
|
||
|
|
* Set the various variables needed for the tests, then
|
||
|
|
@@ -73,7 +77,7 @@ public class SSLSocketCloseHang {
|
||
|
|
*/
|
||
|
|
static boolean debug = false;
|
||
|
|
|
||
|
|
- static boolean shutdownInputTest = false;
|
||
|
|
+ static String socketCloseType;
|
||
|
|
|
||
|
|
/*
|
||
|
|
* If the client or server is doing some kind of object creation
|
||
|
|
@@ -148,28 +152,45 @@ public class SSLSocketCloseHang {
|
||
|
|
Thread.sleep(500);
|
||
|
|
System.err.println("Client closing: " + System.nanoTime());
|
||
|
|
|
||
|
|
- if (shutdownInputTest) {
|
||
|
|
- try {
|
||
|
|
- sslSocket.shutdownInput();
|
||
|
|
- } catch (SSLException e) {
|
||
|
|
- if (!e.getMessage().contains
|
||
|
|
- ("closing inbound before receiving peer's close_notify")) {
|
||
|
|
- throw new RuntimeException("expected different exception message. " +
|
||
|
|
- e.getMessage());
|
||
|
|
- }
|
||
|
|
- }
|
||
|
|
- if (!sslSocket.getSession().isValid()) {
|
||
|
|
- throw new RuntimeException("expected session to remain valid");
|
||
|
|
- }
|
||
|
|
+ closeConnection(sslSocket);
|
||
|
|
+
|
||
|
|
+ clientClosed = true;
|
||
|
|
+ System.err.println("Client closed: " + System.nanoTime());
|
||
|
|
+ }
|
||
|
|
|
||
|
|
+ private void closeConnection(SSLSocket sslSocket) throws IOException {
|
||
|
|
+ if ("shutdownInput".equals(socketCloseType)) {
|
||
|
|
+ shutdownInput(sslSocket);
|
||
|
|
+ // second call to shutdownInput() should just return,
|
||
|
|
+ // shouldn't throw any exception
|
||
|
|
+ sslSocket.shutdownInput();
|
||
|
|
+ // invoking shutdownOutput() just after shutdownInput()
|
||
|
|
+ sslSocket.shutdownOutput();
|
||
|
|
+ } else if ("shutdownOutput".equals(socketCloseType)) {
|
||
|
|
+ sslSocket.shutdownOutput();
|
||
|
|
+ // second call to shutdownInput() should just return,
|
||
|
|
+ // shouldn't throw any exception
|
||
|
|
+ sslSocket.shutdownOutput();
|
||
|
|
+ // invoking shutdownInput() just after shutdownOutput()
|
||
|
|
+ shutdownInput(sslSocket);
|
||
|
|
} else {
|
||
|
|
sslSocket.close();
|
||
|
|
}
|
||
|
|
+ }
|
||
|
|
|
||
|
|
-
|
||
|
|
-
|
||
|
|
- clientClosed = true;
|
||
|
|
- System.err.println("Client closed: " + System.nanoTime());
|
||
|
|
+ private void shutdownInput(SSLSocket sslSocket) throws IOException {
|
||
|
|
+ try {
|
||
|
|
+ sslSocket.shutdownInput();
|
||
|
|
+ } catch (SSLException e) {
|
||
|
|
+ if (!e.getMessage().contains
|
||
|
|
+ ("closing inbound before receiving peer's close_notify")) {
|
||
|
|
+ throw new RuntimeException("expected different exception "
|
||
|
|
+ + "message. " + e.getMessage());
|
||
|
|
+ }
|
||
|
|
+ }
|
||
|
|
+ if (!sslSocket.getSession().isValid()) {
|
||
|
|
+ throw new RuntimeException("expected session to remain valid");
|
||
|
|
+ }
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
@@ -197,11 +218,13 @@ public class SSLSocketCloseHang {
|
||
|
|
System.setProperty("javax.net.ssl.keyStorePassword", passwd);
|
||
|
|
System.setProperty("javax.net.ssl.trustStore", trustFilename);
|
||
|
|
System.setProperty("javax.net.ssl.trustStorePassword", passwd);
|
||
|
|
+ System.setProperty("jdk.tls.client.protocols", args[0]);
|
||
|
|
|
||
|
|
if (debug)
|
||
|
|
System.setProperty("javax.net.debug", "all");
|
||
|
|
|
||
|
|
- shutdownInputTest = args.length > 0 ? true : false;
|
||
|
|
+ socketCloseType = args.length > 1 ? args[1] : "";
|
||
|
|
+
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Start the tests.
|
||
|
|
--
|
||
|
|
2.12.3
|
||
|
|
|