blob: 4ed26b37ab6017ad0c330dd04599d67abf8c9240 [file] [log] [blame]
/*
* Copyright (C) 2011 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 com.android.ide.common.signing;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.utils.ILogger;
import com.google.common.io.Files;
import junit.framework.TestCase;
import java.io.File;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Calendar;
public class KeyStoreHelperTest extends TestCase {
public void testCreateAndCheckKey() throws Exception {
File tempFolder = Files.createTempDir();
File keystoreFile = new File(tempFolder, "debug.keystore");
keystoreFile.deleteOnExit();
FakeLogger fakeLogger = new FakeLogger();
// "now" is just slightly before the key was created
long now = System.currentTimeMillis();
// create the keystore
KeystoreHelper.createDebugStore(null, keystoreFile, "android", "android", "AndroidDebugKey",
fakeLogger);
// read the key back
CertificateInfo certificateInfo = KeystoreHelper.getCertificateInfo(
null, keystoreFile, "android", "android", "AndroidDebugKey");
assertNotNull(certificateInfo);
assertEquals("", fakeLogger.getErr());
PrivateKey key = certificateInfo.getKey();
assertNotNull(key);
X509Certificate certificate = certificateInfo.getCertificate();
assertNotNull(certificate);
// The "not-after" (a.k.a. expiration) date should be after "now"
Calendar c = Calendar.getInstance();
c.setTimeInMillis(now);
assertTrue(certificate.getNotAfter().compareTo(c.getTime()) > 0);
// It should be valid after 1 year from now (adjust by a second since the 'now' time
// doesn't exactly match the creation time... 1 second should be enough.)
c.add(Calendar.DAY_OF_YEAR, 365);
c.add(Calendar.SECOND, -1);
assertTrue("1 year expiration failed",
certificate.getNotAfter().compareTo(c.getTime()) > 0);
// and 30 years from now
c.add(Calendar.DAY_OF_YEAR, 29 * 365);
// remove 1 hour to handle for PST/PDT issue
c.add(Calendar.HOUR_OF_DAY, -1);
assertTrue("30 year expiration failed",
certificate.getNotAfter().compareTo(c.getTime()) > 0);
// however expiration date should be passed in 30 years + a few hours
c.add(Calendar.HOUR, 5);
assertFalse("30 year and few hours expiration failed",
certificate.getNotAfter().compareTo(c.getTime()) > 0);
}
private static class FakeLogger implements ILogger {
private String mOut = "";
private String mErr = "";
public String getOut() {
return mOut;
}
public String getErr() {
return mErr;
}
@Override
public void error(@Nullable Throwable t, @Nullable String msgFormat, Object... args) {
String message = msgFormat != null ?
String.format(msgFormat, args) :
t != null ? t.getClass().getCanonicalName() : "ERROR!";
mErr += message + "\n";
}
@Override
public void warning(@NonNull String msgFormat, Object... args) {
String message = String.format(msgFormat, args);
mOut += message + "\n";
}
@Override
public void info(@NonNull String msgFormat, Object... args) {
String message = String.format(msgFormat, args);
mOut += message + "\n";
}
@Override
public void verbose(@NonNull String msgFormat, Object... args) {
String message = String.format(msgFormat, args);
mOut += message + "\n";
}
}
}