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");
}