summaryrefslogtreecommitdiffstats
path: root/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2011-01-24 14:34:57 -0800
committerBrian Carlstrom <bdc@google.com>2011-01-30 16:26:50 -0800
commitaa2be6b82cdf3bb292076d2a614a5f5b40e63123 (patch)
tree0cac343324114b691dd6650a69dc53e0c059ed74 /luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
parentfd5190acf9cae424c859aed5bf64e31ea7117903 (diff)
downloadlibcore-aa2be6b82cdf3bb292076d2a614a5f5b40e63123.tar.gz
libcore-aa2be6b82cdf3bb292076d2a614a5f5b40e63123.tar.bz2
libcore-aa2be6b82cdf3bb292076d2a614a5f5b40e63123.zip
SSLSocket.close() should not throw an IOException if there is a problem sending a close notify
Bug: 3405962 Bug: 3350645 git cherry-pick -e 1c64b3adb85345659ac60ad82216268acba18764
Diffstat (limited to 'luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java')
-rw-r--r--luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java44
1 files changed, 44 insertions, 0 deletions
diff --git a/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java b/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
index 92b152bf8..621f299e9 100644
--- a/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
+++ b/luni/src/test/java/libcore/javax/net/ssl/SSLSocketTest.java
@@ -801,6 +801,50 @@ public class SSLSocketTest extends TestCase {
}
}
+ /**
+ * b/3350645 Test to confirm that an SSLSocket.close() performing
+ * an SSL_shutdown does not throw an IOException if the peer
+ * socket has been closed.
+ */
+ public void test_SSLSocket_shutdownCloseOnClosedPeer() throws Exception {
+ TestSSLContext c = TestSSLContext.create();
+ final Socket underlying = new Socket(c.host, c.port);
+ final SSLSocket wrapping = (SSLSocket)
+ c.clientContext.getSocketFactory().createSocket(underlying,
+ c.host.getHostName(),
+ c.port,
+ false);
+ Thread clientThread = new Thread(new Runnable () {
+ public void run() {
+ try {
+ try {
+ wrapping.startHandshake();
+ wrapping.getOutputStream().write(42);
+ // close the underlying socket,
+ // so that no SSL shutdown is sent
+ underlying.close();
+ wrapping.close();
+ } catch (SSLException expected) {
+ }
+ } catch (RuntimeException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ });
+ clientThread.start();
+
+ SSLSocket server = (SSLSocket) c.serverSocket.accept();
+ server.startHandshake();
+ server.getInputStream().read();
+ // wait for thread to finish so we know client is closed.
+ clientThread.join();
+ // close should cause an SSL_shutdown which will fail
+ // because the peer has closed, but it shouldn't throw.
+ server.close();
+ }
+
public void test_SSLSocket_setSoTimeout_basic() throws Exception {
ServerSocket listening = new ServerSocket(0);