summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2014-02-24 15:15:04 -0800
committerKenny Root <kroot@android.com>2014-02-25 17:08:46 +0000
commit78f45cf50a1f76ca2d671dc7b2710ce488ebdaa9 (patch)
tree5be086b9a6442aa9cd9313207cb273408acabf82 /luni
parent59ada9f28275ee6d43a3d9f4c5a3268d04e5ebb8 (diff)
downloadlibcore-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.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));
+ }
}