diff options
author | Kenny Root <kroot@google.com> | 2014-02-24 15:15:04 -0800 |
---|---|---|
committer | Kenny Root <kroot@android.com> | 2014-02-25 17:08:46 +0000 |
commit | 78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9 (patch) | |
tree | 5be086b9a6442aa9cd9313207cb273408acabf82 /luni | |
parent | 59ada9f28275ee6d43a3d9f4c5a3268d04e5ebb8 (diff) | |
download | libcore-78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9.zip libcore-78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9.tar.gz libcore-78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9.tar.bz2 |
NativeCrypto: use crypto APIs from different threads in tests
This is not a thread-safe use of the API, but it shouldn't crash.
Bug: 8787753
Change-Id: I553a4d5367f9070e326016b376758feef5cabd36
Diffstat (limited to 'luni')
-rw-r--r-- | luni/src/test/java/libcore/java/security/MessageDigestTest.java | 34 | ||||
-rw-r--r-- | luni/src/test/java/libcore/java/security/SignatureTest.java | 37 |
2 files changed, 71 insertions, 0 deletions
diff --git a/luni/src/test/java/libcore/java/security/MessageDigestTest.java b/luni/src/test/java/libcore/java/security/MessageDigestTest.java index 1370287..ad410e4 100644 --- a/luni/src/test/java/libcore/java/security/MessageDigestTest.java +++ b/luni/src/test/java/libcore/java/security/MessageDigestTest.java @@ -24,6 +24,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import junit.framework.TestCase; public final class MessageDigestTest extends TestCase { @@ -239,4 +244,33 @@ public final class MessageDigestTest extends TestCase { return buf.toString(); } + private final int THREAD_COUNT = 10; + + public void testMessageDigest_MultipleThreads_Misuse() throws Exception { + ExecutorService es = Executors.newFixedThreadPool(THREAD_COUNT); + + final CountDownLatch latch = new CountDownLatch(THREAD_COUNT); + final MessageDigest md = MessageDigest.getInstance("SHA-256"); + final byte[] message = new byte[64]; + + for (int i = 0; i < THREAD_COUNT; i++) { + es.submit(new Callable<Void>() { + @Override + public Void call() throws Exception { + // Try to make sure all the threads are ready first. + latch.countDown(); + latch.await(); + + for (int j = 0; j < 100; j++) { + md.update(message); + md.digest(); + } + + return null; + } + }); + } + es.shutdown(); + assertTrue("Test should not timeout", es.awaitTermination(1, TimeUnit.MINUTES)); + } } diff --git a/luni/src/test/java/libcore/java/security/SignatureTest.java b/luni/src/test/java/libcore/java/security/SignatureTest.java index 9c5738b..5e02f10 100644 --- a/luni/src/test/java/libcore/java/security/SignatureTest.java +++ b/luni/src/test/java/libcore/java/security/SignatureTest.java @@ -22,6 +22,7 @@ import java.security.InvalidParameterException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; +import java.security.MessageDigest; import java.security.PrivateKey; import java.security.Provider; import java.security.PublicKey; @@ -39,6 +40,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import junit.framework.TestCase; public class SignatureTest extends TestCase { @@ -323,6 +329,8 @@ public class SignatureTest extends TestCase { // http://code.google.com/p/android/issues/detail?id=34933 sig.verify(signature); } + + testSignature_MultipleThreads_Misuse(sig); } private static final byte[] PK_BYTES = hexToBytes( @@ -1609,4 +1617,33 @@ public class SignatureTest extends TestCase { assertNotNull(oid, signature); assertEquals(oid, signature.getAlgorithm()); } + + private final int THREAD_COUNT = 10; + + private void testSignature_MultipleThreads_Misuse(final Signature s) throws Exception { + ExecutorService es = Executors.newFixedThreadPool(THREAD_COUNT); + + final CountDownLatch latch = new CountDownLatch(THREAD_COUNT); + final byte[] message = new byte[64]; + + for (int i = 0; i < THREAD_COUNT; i++) { + es.submit(new Callable<Void>() { + @Override + public Void call() throws Exception { + // Try to make sure all the threads are ready first. + latch.countDown(); + latch.await(); + + for (int j = 0; j < 100; j++) { + s.update(message); + s.sign(); + } + + return null; + } + }); + } + es.shutdown(); + assertTrue("Test should not timeout", es.awaitTermination(1, TimeUnit.MINUTES)); + } } |