summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2014-02-26 17:54:14 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-02-26 17:54:14 +0000
commit5db3ca35057928b6ccb59167410e299ddca1cecf (patch)
tree7529671feeb1cf02d98303a11512a83d3f929ea5 /luni
parentf5fe8b735bc185d1221c9e0ec07de87aea2723ff (diff)
parent78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9 (diff)
downloadlibcore-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.java34
-rw-r--r--luni/src/test/java/libcore/java/security/SignatureTest.java37
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));
+ }
}