Fix a concurrency bug in OpenSSLHeartbleedTest.

The test was not guaranteed to observe all of the data transmitted by
the client in the scenarios where the client failed. As a result, the
test was occasionally failing (instead of passing) when the client
terminated the TLS/SSL handshake with the fatal alert
unexpected_message.

This CL fixes the test by ensuring that the test observes all of the
data exchanged between the client and the server.

Bug: 13906893

(cherry picked from commit 352696d5699051ac2f92af8b0a1156ade0fc59a6)

Change-Id: I5091ae7f5e12bdb6fe76a9f0f44618e0e55042c5
diff --git a/tests/tests/security/src/android/security/cts/OpenSSLHeartbleedTest.java b/tests/tests/security/src/android/security/cts/OpenSSLHeartbleedTest.java
index 86957a8..3aa0268 100644
--- a/tests/tests/security/src/android/security/cts/OpenSSLHeartbleedTest.java
+++ b/tests/tests/security/src/android/security/cts/OpenSSLHeartbleedTest.java
@@ -215,10 +215,23 @@
             }
         });
 
+        // Wait for both client and server to terminate, to ensure that we observe all the traffic
+        // exchanged between them. Throw an exception if one of them failed.
         Log.i(TAG, "Waiting for client");
-        clientFuture.get(10, TimeUnit.SECONDS);
+        // Wait for the client, but don't yet throw an exception if it failed.
+        Exception clientException = null;
+        try {
+            clientFuture.get(10, TimeUnit.SECONDS);
+        } catch (Exception e) {
+            clientException = e;
+        }
         Log.i(TAG, "Waiting for server");
-        serverFuture.get(1, TimeUnit.SECONDS);
+        // Wait for the server and throw an exception if it failed.
+        serverFuture.get(5, TimeUnit.SECONDS);
+        // Throw an exception if the client failed.
+        if (clientException != null) {
+            throw clientException;
+        }
         Log.i(TAG, "Handshake completed and application data exchanged");
     }