/** * Copyright 2010 Google Inc. * * 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 org.waveprotocol.box.server.persistence; import junit.framework.TestCase; import org.waveprotocol.box.server.waveserver.testing.Certificates; import org.waveprotocol.wave.crypto.CertPathStore; import org.waveprotocol.wave.crypto.SignatureException; import org.waveprotocol.wave.crypto.SignerInfo; import org.waveprotocol.wave.federation.Proto.ProtocolSignerInfo; import java.security.cert.X509Certificate; import java.util.List; /** * Testcases for the {@link CertPathStore}. * * TODO(ljvderijk): Tests for replacing an existing certificate and confirm * that non-parsing certificates throw SignatureException. * * @author ljvderijk@google.com (Lennard de Rijk) * */ public abstract class CertPathStoreTestBase extends TestCase { private final SignerInfo realSignerInfo; private final SignerInfo exampleSignerInfo; public CertPathStoreTestBase() throws Exception { realSignerInfo = Certificates.getRealSignerInfo(); exampleSignerInfo = Certificates.getExampleSignerInfo(); } /** * Returns an empty {@link CertPathStore}. */ protected abstract CertPathStore newCertPathStore(); public void testCertificatesAreStored() throws Exception { CertPathStore certPathStore = newCertPathStore(); ProtocolSignerInfo realSignerInfoProto = realSignerInfo.toProtoBuf(); certPathStore.putSignerInfo(realSignerInfoProto); ProtocolSignerInfo exampleSignerInfoProto = exampleSignerInfo.toProtoBuf(); certPathStore.putSignerInfo(exampleSignerInfoProto); checkCertificateExists(realSignerInfo, certPathStore); checkCertificateExists(exampleSignerInfo, certPathStore); } public void testNotExistingSignerIdGivesNull() throws SignatureException { assertNull("Expected Null for a non-existing Signer Id", newCertPathStore().getSignerInfo(new byte[1])); } /** * Checks whether for the given {@link SignerInfo} the certificates retrieved * from the {@link CertPathStore} match up. * * @param signerInfo the {@link SignerInfo} to get the certificates from the * {@link CertPathStore} for * @param certPathStore the {@link CertPathStore} to retrieve the certificates * from. */ private void checkCertificateExists(SignerInfo signerInfo, CertPathStore certPathStore) throws SignatureException { List<X509Certificate> retrievedCerts = certPathStore.getSignerInfo(signerInfo.getSignerId()).getCertificates(); assertEquals(signerInfo.getCertificates(), retrievedCerts); } }