blob: 77e431495b98f9335ee67b754d2854af2962483c [file] [log] [blame]
package org.apache.harmony.security.tests.java.security;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import junit.framework.TestCase;
import org.apache.harmony.security.tests.support.MyProvider;
import org.apache.harmony.security.tests.support.TestKeyStoreSpi;
import org.apache.harmony.security.tests.support.cert.MyCertificate;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Key;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Provider;
import java.security.Security;
import java.security.UnrecoverableEntryException;
import java.security.UnrecoverableKeyException;
import java.security.KeyStore.Entry;
import java.security.KeyStore.ProtectionParameter;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
@TestTargetClass(KeyStore.class)
public class KeyStore4Test extends TestCase {
Provider provider = new MyProvider();
KeyStore keyStore;
KeyStore uninitialized;
KeyStore failing;
public static final String KEY_STORE_TYPE = "TestKeyStore";
protected void setUp() throws Exception{
super.setUp();
Security.addProvider(new MyProvider());
try {
keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
keyStore.load(null, "PASSWORD".toCharArray());
} catch (KeyStoreException e) {
fail("test class not available");
}
try {
uninitialized = KeyStore.getInstance(KEY_STORE_TYPE);
} catch (KeyStoreException e) {
fail("test keystore not available");
}
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
Security.removeProvider(provider.getName());
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getInstance",
args={String.class}
)
public void testGetInstanceString() {
try {
KeyStore ks = KeyStore.getInstance("TestKeyStore");
assertNotNull("keystore is null", ks);
assertEquals("KeyStore is not of expected Type", "TestKeyStore", ks.getType());
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
KeyStore.getInstance("UnknownKeyStore");
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
}
try {
KeyStore.getInstance(null);
fail("expected NullPointerException");
} catch (NullPointerException e) {
// ok
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getInstance",
args={String.class, String.class}
)
public void testGetInstanceStringString() {
try {
KeyStore ks = KeyStore.getInstance("TestKeyStore", provider.getName());
assertNotNull("keystore is null", ks);
assertEquals("KeyStore is not of expected type", "TestKeyStore", ks.getType());
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchProviderException e) {
fail("unexpected exception: " + e);
}
try {
KeyStore.getInstance("UnknownKeyStore", provider.getName());
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
} catch (NoSuchProviderException e) {
fail("unexpected exception: " + e);
}
try {
KeyStore.getInstance("TestKeyStore", (String)null);
fail("expected IllegalArgumentException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchProviderException e) {
fail("unexpected exception: " + e);
} catch (IllegalArgumentException e) {
// ok
}
try {
KeyStore.getInstance("TestKeyStore", "");
fail("expected IllegalArgumentException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchProviderException e) {
fail("unexpected exception: " + e);
} catch (IllegalArgumentException e) {
// ok
}
try {
KeyStore.getInstance(null, provider.getName());
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
} catch (NoSuchProviderException e) {
fail("unexpected exception: " + e);
} catch (NullPointerException e) {
// also ok
}
try {
KeyStore.getInstance("TestKeyStore", "UnknownProvider");
fail("expected NoSuchProviderException");
} catch (NoSuchProviderException e) {
// ok
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getInstance",
args={String.class, Provider.class}
)
public void testGetInstanceStringProvider() {
try {
KeyStore ks = KeyStore.getInstance("TestKeyStore", provider);
assertNotNull("KeyStore is null", ks);
assertEquals("KeyStore is not of expected type", "TestKeyStore", ks.getType());
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
KeyStore.getInstance("UnknownKeyStore", provider);
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok;
}
try {
KeyStore.getInstance("TestKeyStore", (Provider)null);
fail("expected IllegalArgumentException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (IllegalArgumentException e) {
// ok
}
try {
KeyStore.getInstance(null, provider);
fail("expected NullPointerException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NullPointerException e) {
// ok
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getKey",
args={String.class, char[].class}
)
public void testGetKey() {
try {
Key key = keyStore.getKey("keyalias", null);
assertNotNull(key);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableKeyException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.getKey("certalias", null);
fail("expected NoSuchAlgorithmException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
// ok
} catch (UnrecoverableKeyException e) {
fail("unexpected exception: " + e);
}
try {
uninitialized.getKey("keyalias", null);
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableKeyException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.getKey("unknownalias", null);
fail("expected NoSuchAlgorithmException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
// ok
} catch (UnrecoverableKeyException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.getKey("unknownalias", "PASSWORD".toCharArray());
fail("expected UnrecoverableKeyException");
} catch (UnrecoverableKeyException e) {
// ok
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getCertificateAlias",
args={Certificate.class}
)
public void testGetCertificateAlias() {
try {
String alias = keyStore.getCertificateAlias(TestKeyStoreSpi.CERT);
assertNotNull("alias is null", alias);
assertEquals("alias is not expected", "certalias", alias);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
uninitialized.getCertificateAlias(TestKeyStoreSpi.CERT);
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
}
try {
keyStore.getCertificateAlias(null);
fail("expected NullPointerException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NullPointerException e) {
// ok
}
try {
String certificateAlias = keyStore.getCertificateAlias(new MyCertificate("dummy", null));
assertNull("alias was not null", certificateAlias);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="store",
args={OutputStream.class, char[].class}
)
public void testStoreOutputStreamCharArray() {
OutputStream os = new ByteArrayOutputStream();
char[] password = "PASSWORD".toCharArray();
try {
keyStore.store(os, password);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.store(os, null);
fail("expected NoSuchAlgorithmException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
// ok
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
// ok
}
try {
keyStore.store(os, "".toCharArray());
fail("expected CertificateException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
// ok
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.store(null, null);
fail("expected IOException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
// ok
}
try {
uninitialized.store(null, null);
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="store",
args={KeyStore.LoadStoreParameter.class}
)
public void testStoreLoadStoreParameter() {
try {
keyStore.store(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return new KeyStore.PasswordProtection("PASSWORD".toCharArray());
}});
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.store(null);
fail("expected IOException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
// ok
}
try {
keyStore.store(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return null;
}});
fail("expected UnsupportedOperationException");
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
} catch (UnsupportedOperationException e) {
// ok
}
try {
keyStore.store(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return new KeyStore.PasswordProtection("".toCharArray());
}});
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
// ok
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.store(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return new KeyStore.PasswordProtection(null);
}} );
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NoSuchAlgorithmException e) {
// ok
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
uninitialized.store(null);
fail("expected KeyStoreException");
} catch (KeyStoreException e) {
// ok
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="load",
args={InputStream.class, char[].class}
)
public void testLoadInputStreamCharArray() {
InputStream is = new ByteArrayInputStream("DATA".getBytes());
char[] password = "PASSWORD".toCharArray();
try {
keyStore.load(is, password);
assertTrue(keyStore.containsAlias("keyalias"));
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.load(new ByteArrayInputStream("".getBytes()), password);
fail("expected IOException");
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
// ok
}
try {
keyStore.load(is, null);
fail("expected NoSuchAlgorithmException");
} catch (NoSuchAlgorithmException e) {
// ok
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.load(is, new char[] {});
fail("expected CertificateException");
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
// ok
} catch (IOException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="load",
args={KeyStore.LoadStoreParameter.class}
)
public void testLoadLoadStoreParameter() {
try {
keyStore.load(null);
fail("expected NoSuchAlgorithmException");
} catch (NoSuchAlgorithmException e) {
// ok
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.load(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return new KeyStore.PasswordProtection("PASSWORD".toCharArray());
}
});
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.load(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return null;
}
});
fail("expected NoSuchAlgorithmException");
} catch (NoSuchAlgorithmException e) {
// ok
} catch (CertificateException e) {
fail("unexpected exception: " + e);
} catch (IOException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.load(new KeyStore.LoadStoreParameter() {
public ProtectionParameter getProtectionParameter() {
return new KeyStore.ProtectionParameter() {};
}
});
fail("expected CertificateException");
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (CertificateException e) {
// ok
} catch (IOException e) {
fail("unexpected exception: " + e);
}
}
@TestTargetNew(
level=TestLevel.SUFFICIENT,
method="getEntry",
args={String.class, KeyStore.ProtectionParameter.class}
)
public void testGetEntry() {
try {
Entry entry = keyStore.getEntry("certalias", null);
assertNotNull("entry is null", entry);
assertTrue("entry is not cert entry", entry instanceof KeyStore.TrustedCertificateEntry);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableEntryException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
Entry entry = keyStore.getEntry("certalias", new KeyStore.ProtectionParameter() {});
assertNotNull(entry);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableEntryException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (UnsupportedOperationException e) {
// ok
}
try {
Entry entry = keyStore.getEntry("keyalias", new KeyStore.PasswordProtection(new char[] {} ));
assertNotNull(entry);
assertTrue(entry instanceof KeyStore.SecretKeyEntry);
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableEntryException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
}
try {
keyStore.getEntry("unknownalias", new KeyStore.PasswordProtection(new char[] {}));
fail("expected NoSuchAlgorithmException");
} catch (NoSuchAlgorithmException e) {
// ok
} catch (UnrecoverableEntryException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (UnsupportedOperationException e) {
// also ok
}
try {
keyStore.getEntry(null, new KeyStore.ProtectionParameter() {});
fail("expected NullPointerException");
} catch (NoSuchAlgorithmException e) {
fail("unexpected exception: " + e);
} catch (UnrecoverableEntryException e) {
fail("unexpected exception: " + e);
} catch (KeyStoreException e) {
fail("unexpected exception: " + e);
} catch (NullPointerException e) {
// ok
}
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getType"
)
public void testGetType() {
assertEquals(KEY_STORE_TYPE, keyStore.getType());
}
@TestTargetNew(
level=TestLevel.COMPLETE,
method="getProvider"
)
public void testGetProvider() {
assertNotNull(keyStore.getProvider());
assertEquals("not equal", provider, keyStore.getProvider());
}
}