diff options
author | Kenny Root <kroot@google.com> | 2014-02-26 17:54:14 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-02-26 17:54:14 +0000 |
commit | 5db3ca35057928b6ccb59167410e299ddca1cecf (patch) | |
tree | 7529671feeb1cf02d98303a11512a83d3f929ea5 /luni | |
parent | f5fe8b735bc185d1221c9e0ec07de87aea2723ff (diff) | |
parent | 78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9 (diff) | |
download | libcore-5db3ca35057928b6ccb59167410e299ddca1cecf.zip libcore-5db3ca35057928b6ccb59167410e299ddca1cecf.tar.gz libcore-5db3ca35057928b6ccb59167410e299ddca1cecf.tar.bz2 |
Merge "NativeCrypto: use crypto APIs from different threads in tests"
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)); + } } |