Index: net/cert/internal/trust_store_collection_unittest.cc |
diff --git a/net/cert/internal/trust_store_collection_unittest.cc b/net/cert/internal/trust_store_collection_unittest.cc |
index 198988e78c6a2d14c75609a44f529c9ceb181d1b..15868c221409cc418984743d4e883b23597aa05d 100644 |
--- a/net/cert/internal/trust_store_collection_unittest.cc |
+++ b/net/cert/internal/trust_store_collection_unittest.cc |
@@ -22,11 +22,11 @@ class TrustStoreCollectionTest : public testing::Test { |
"net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem", |
&test); |
chain = test.chain; |
- oldroot_ = test.trust_anchor; |
- ASSERT_EQ(2U, chain.size()); |
+ ASSERT_EQ(3U, chain.size()); |
target_ = chain[0]; |
oldintermediate_ = chain[1]; |
+ oldroot_ = chain[2]; |
ASSERT_TRUE(target_); |
ASSERT_TRUE(oldintermediate_); |
ASSERT_TRUE(oldroot_); |
@@ -37,20 +37,19 @@ class TrustStoreCollectionTest : public testing::Test { |
&test); |
chain = test.chain; |
- ASSERT_EQ(4U, chain.size()); |
+ ASSERT_EQ(5U, chain.size()); |
newintermediate_ = chain[1]; |
- newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]); |
- newrootrollover_ = |
- TrustAnchor::CreateFromCertificateNoConstraints(chain[3]); |
+ newroot_ = chain[2]; |
+ newrootrollover_ = chain[3]; |
ASSERT_TRUE(newintermediate_); |
ASSERT_TRUE(newroot_); |
ASSERT_TRUE(newrootrollover_); |
} |
protected: |
- scoped_refptr<TrustAnchor> oldroot_; |
- scoped_refptr<TrustAnchor> newroot_; |
- scoped_refptr<TrustAnchor> newrootrollover_; |
+ scoped_refptr<ParsedCertificate> oldroot_; |
+ scoped_refptr<ParsedCertificate> newroot_; |
+ scoped_refptr<ParsedCertificate> newrootrollover_; |
scoped_refptr<ParsedCertificate> target_; |
scoped_refptr<ParsedCertificate> oldintermediate_; |
@@ -59,31 +58,67 @@ class TrustStoreCollectionTest : public testing::Test { |
// Collection contains no stores, should return no results. |
TEST_F(TrustStoreCollectionTest, NoStores) { |
- TrustAnchors matches; |
+ ParsedCertificateList issuers; |
TrustStoreCollection collection; |
- collection.FindTrustAnchorsForCert(target_, &matches); |
+ collection.SyncGetIssuersOf(target_.get(), &issuers); |
- EXPECT_TRUE(matches.empty()); |
+ EXPECT_TRUE(issuers.empty()); |
} |
// Collection contains only one store. |
TEST_F(TrustStoreCollectionTest, OneStore) { |
- TrustAnchors matches; |
+ ParsedCertificateList issuers; |
TrustStoreCollection collection; |
TrustStoreInMemory in_memory; |
in_memory.AddTrustAnchor(newroot_); |
collection.AddTrustStore(&in_memory); |
- collection.FindTrustAnchorsForCert(newintermediate_, &matches); |
+ collection.SyncGetIssuersOf(newintermediate_.get(), &issuers); |
- ASSERT_EQ(1U, matches.size()); |
- EXPECT_EQ(newroot_, matches[0]); |
+ ASSERT_EQ(1U, issuers.size()); |
+ EXPECT_EQ(newroot_.get(), issuers[0].get()); |
+ |
+ // newroot_ is trusted. |
+ CertificateTrust trust; |
+ collection.GetTrust(newroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type); |
+ |
+ // oldroot_ is not. |
+ collection.GetTrust(oldroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type); |
+} |
+ |
+// SyncGetIssuersOf() should append to its output parameters rather than assign |
+// them. |
+TEST_F(TrustStoreCollectionTest, OutputVectorsAppendedTo) { |
+ ParsedCertificateList issuers; |
+ |
+ // Populate the out-parameter with some values. |
+ issuers.resize(3); |
+ |
+ TrustStoreCollection collection; |
+ TrustStoreInMemory in_memory; |
+ in_memory.AddTrustAnchor(newroot_); |
+ collection.AddTrustStore(&in_memory); |
+ collection.SyncGetIssuersOf(newintermediate_.get(), &issuers); |
+ |
+ ASSERT_EQ(4U, issuers.size()); |
+ EXPECT_EQ(newroot_.get(), issuers[3].get()); |
+ |
+ // newroot_ is trusted. |
+ CertificateTrust trust; |
+ collection.GetTrust(newroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type); |
+ |
+ // newrootrollover_ is not. |
+ collection.GetTrust(newrootrollover_, &trust); |
+ EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type); |
} |
// Collection contains two stores. |
TEST_F(TrustStoreCollectionTest, TwoStores) { |
- TrustAnchors matches; |
+ ParsedCertificateList issuers; |
TrustStoreCollection collection; |
TrustStoreInMemory in_memory1; |
@@ -92,11 +127,58 @@ TEST_F(TrustStoreCollectionTest, TwoStores) { |
in_memory2.AddTrustAnchor(oldroot_); |
collection.AddTrustStore(&in_memory1); |
collection.AddTrustStore(&in_memory2); |
- collection.FindTrustAnchorsForCert(newintermediate_, &matches); |
+ collection.SyncGetIssuersOf(newintermediate_.get(), &issuers); |
+ |
+ ASSERT_EQ(2U, issuers.size()); |
+ EXPECT_EQ(newroot_.get(), issuers[0].get()); |
+ EXPECT_EQ(oldroot_.get(), issuers[1].get()); |
+ |
+ // newroot_ is trusted. |
+ CertificateTrust trust; |
+ collection.GetTrust(newroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type); |
+ |
+ // oldroot_ is trusted. |
+ collection.GetTrust(oldroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type); |
+ |
+ // newrootrollover_ is not. |
+ collection.GetTrust(newrootrollover_, &trust); |
+ EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type); |
+} |
+ |
+// Collection contains two stores. The certificate is marked as trusted in one, |
+// but distrusted in the other. |
+TEST_F(TrustStoreCollectionTest, DistrustTakesPriority) { |
+ ParsedCertificateList issuers; |
+ |
+ TrustStoreCollection collection; |
+ TrustStoreInMemory in_memory1; |
+ TrustStoreInMemory in_memory2; |
+ |
+ // newroot_ is trusted in store1, distrusted in store2. |
+ in_memory1.AddTrustAnchor(newroot_); |
+ in_memory2.AddDistrustedCertificateForTest(newroot_); |
+ |
+ // oldintermediate is distrusted in store1, trusted in store2. |
+ in_memory1.AddDistrustedCertificateForTest(oldintermediate_); |
+ in_memory2.AddTrustAnchor(oldintermediate_); |
+ |
+ collection.AddTrustStore(&in_memory1); |
+ collection.AddTrustStore(&in_memory2); |
+ |
+ // newroot_ is distrusted.. |
+ CertificateTrust trust; |
+ collection.GetTrust(newroot_, &trust); |
+ EXPECT_EQ(CertificateTrustType::DISTRUSTED, trust.type); |
+ |
+ // oldintermediate_ is distrusted. |
+ collection.GetTrust(oldintermediate_, &trust); |
+ EXPECT_EQ(CertificateTrustType::DISTRUSTED, trust.type); |
- ASSERT_EQ(2U, matches.size()); |
- EXPECT_EQ(newroot_, matches[0]); |
- EXPECT_EQ(oldroot_, matches[1]); |
+ // newrootrollover_ is unspecified. |
+ collection.GetTrust(newrootrollover_, &trust); |
+ EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type); |
} |
} // namespace |