blob: 95f415c58c662a042bfa5d233902f52b9ea53de3 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.net.http.cts;
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Principal;
import java.security.PublicKey;
import java.security.SignatureException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
import java.text.DateFormat;
import java.util.Date;
import java.util.Set;
import junit.framework.TestCase;
import android.net.http.SslCertificate;
import android.net.http.SslCertificate.DName;
import android.os.Bundle;
public class SslCertificateTest extends TestCase {
public void testConstructor() {
// new the SslCertificate instance
String date = DateFormat.getInstance().format(new Date());
new SslCertificate("c=129", "e=weji", date, date);
// new the SslCertificate instance
new SslCertificate(new MockX509Certificate());
}
class MockX509Certificate extends X509Certificate {
@Override
public void checkValidity() throws CertificateExpiredException,
CertificateNotYetValidException {
}
@Override
public void checkValidity(Date date) throws CertificateExpiredException,
CertificateNotYetValidException {
}
@Override
public int getBasicConstraints() {
return 0;
}
@Override
public Principal getIssuerDN() {
return new MockPrincipal();
}
@Override
public boolean[] getIssuerUniqueID() {
return null;
}
@Override
public boolean[] getKeyUsage() {
return null;
}
@Override
public Date getNotAfter() {
return new Date(System.currentTimeMillis());
}
@Override
public Date getNotBefore() {
return new Date(System.currentTimeMillis() - 1000);
}
@Override
public BigInteger getSerialNumber() {
return null;
}
@Override
public String getSigAlgName() {
return null;
}
@Override
public String getSigAlgOID() {
return null;
}
@Override
public byte[] getSigAlgParams() {
return null;
}
@Override
public byte[] getSignature() {
return null;
}
@Override
public Principal getSubjectDN() {
return new MockPrincipal();
}
class MockPrincipal implements Principal {
public String getName() {
return null;
}
}
@Override
public boolean[] getSubjectUniqueID() {
return null;
}
@Override
public byte[] getTBSCertificate() throws CertificateEncodingException {
return null;
}
@Override
public int getVersion() {
return 0;
}
@Override
public byte[] getEncoded() throws CertificateEncodingException {
return null;
}
@Override
public PublicKey getPublicKey() {
return null;
}
@Override
public String toString() {
return null;
}
@Override
public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException,
InvalidKeyException, NoSuchProviderException, SignatureException {
}
@Override
public void verify(PublicKey key, String sigProvider) throws CertificateException,
NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException,
SignatureException {
}
public Set<String> getCriticalExtensionOIDs() {
return null;
}
public byte[] getExtensionValue(String oid) {
return null;
}
public Set<String> getNonCriticalExtensionOIDs() {
return null;
}
public boolean hasUnsupportedCriticalExtension() {
return false;
}
}
public void testState() {
// set the expected value
Date date1 = new Date(System.currentTimeMillis() - 1000);
Date date2 = new Date(System.currentTimeMillis());
SslCertificate ssl = new SslCertificate("c=129", "e=weji", date1, date2);
Bundle saved = SslCertificate.saveState(ssl);
assertTrue(saved.size() == 4);
assertNotNull(saved.getString("issued-to"));
assertNotNull(saved.getString("issued-by"));
assertNotNull(saved.getString("valid-not-before"));
assertNotNull(saved.getString("valid-not-after"));
assertNull(SslCertificate.saveState(null));
SslCertificate restored = SslCertificate.restoreState(saved);
assertEquals(ssl.getValidNotAfter(), restored.getValidNotAfter());
assertEquals(ssl.getValidNotBefore(), restored.getValidNotBefore());
}
public void testSslCertificate() {
final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
// new the SslCertificate instance
Date date1 = new Date(System.currentTimeMillis() - 1000);
Date date2 = new Date(System.currentTimeMillis());
SslCertificate ssl = new SslCertificate(TO, BY, date1, date2);
DName issuedTo = ssl.getIssuedTo();
DName issuedBy = ssl.getIssuedBy();
assertEquals("testCName", issuedTo.getCName());
assertEquals(TO, issuedTo.getDName());
assertEquals("testOName", issuedTo.getOName());
assertEquals("testUName", issuedTo.getUName());
assertEquals("testCName", issuedBy.getCName());
assertEquals(BY, issuedBy.getDName());
assertEquals("testOName", issuedBy.getOName());
assertEquals("testUName", issuedBy.getUName());
assertEquals(date1, ssl.getValidNotBeforeDate());
assertEquals(date2, ssl.getValidNotAfterDate());
final String EXPECTED = "Issued to: c=ccc,o=testOName,ou=testUName,cn=testCName;\n"
+ "Issued by: e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName;\n";
assertEquals(EXPECTED, ssl.toString());
assertNull(ssl.getX509Certificate());
}
public void testGetX509Certificate() {
final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
Date validNotBefore = new Date(System.currentTimeMillis() - 1000);
Date validNotAfter = new Date(System.currentTimeMillis());
SslCertificate ssl = new SslCertificate(TO, BY, validNotBefore, validNotAfter);
assertNull(ssl.getX509Certificate());
X509Certificate cert = new MockX509Certificate();
ssl = new SslCertificate(cert);
assertSame(cert, ssl.getX509Certificate());
}
}