Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: net/cert/internal/path_builder_unittest.cc

Issue 2327973002: Add CertErrors* parameter to the main Certificate parsing functions. (Closed)
Patch Set: StringPiece is kind of dangerous... Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cert/internal/path_builder_pkits_unittest.cc ('k') | net/cert/internal/test_helpers.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/cert/internal/path_builder.h" 5 #include "net/cert/internal/path_builder.h"
6 6
7 #include "base/base_paths.h" 7 #include "base/base_paths.h"
8 #include "base/cancelable_callback.h" 8 #include "base/cancelable_callback.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 114 }
115 115
116 ::testing::AssertionResult ReadTestCert( 116 ::testing::AssertionResult ReadTestCert(
117 const std::string& file_name, 117 const std::string& file_name,
118 scoped_refptr<ParsedCertificate>* result) { 118 scoped_refptr<ParsedCertificate>* result) {
119 std::string der; 119 std::string der;
120 ::testing::AssertionResult r = ReadTestPem( 120 ::testing::AssertionResult r = ReadTestPem(
121 "net/data/ssl/certificates/" + file_name, "CERTIFICATE", &der); 121 "net/data/ssl/certificates/" + file_name, "CERTIFICATE", &der);
122 if (!r) 122 if (!r)
123 return r; 123 return r;
124 *result = ParsedCertificate::CreateFromCertificateCopy(der, {}); 124 CertErrors errors;
125 if (!*result) 125 *result = ParsedCertificate::Create(der, {}, &errors);
126 return ::testing::AssertionFailure() << "CreateFromCertificateCopy failed"; 126 if (!*result) {
127 return ::testing::AssertionFailure()
128 << "ParseCertificate::Create() failed:\n"
129 << errors.ToDebugString();
130 }
127 return ::testing::AssertionSuccess(); 131 return ::testing::AssertionSuccess();
128 } 132 }
129 133
130 // Run the path builder, and wait for async completion if necessary. The return 134 // Run the path builder, and wait for async completion if necessary. The return
131 // value signifies whether the path builder completed synchronously or 135 // value signifies whether the path builder completed synchronously or
132 // asynchronously, not that RunPathBuilder itself is asynchronous. 136 // asynchronously, not that RunPathBuilder itself is asynchronous.
133 CompletionStatus RunPathBuilder(CertPathBuilder* path_builder) { 137 CompletionStatus RunPathBuilder(CertPathBuilder* path_builder) {
134 TestClosure callback; 138 TestClosure callback;
135 CompletionStatus rv = path_builder->Run(callback.closure()); 139 CompletionStatus rv = path_builder->Run(callback.closure());
136 140
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 ASSERT_EQ(1U, best_result->path.certs.size()); 938 ASSERT_EQ(1U, best_result->path.certs.size());
935 EXPECT_EQ(newroot_, best_result->path.certs[0]); 939 EXPECT_EQ(newroot_, best_result->path.certs[0]);
936 EXPECT_EQ(newrootrollover_, best_result->path.trust_anchor->cert()); 940 EXPECT_EQ(newrootrollover_, best_result->path.trust_anchor->cert());
937 } 941 }
938 942
939 // Test that PathBuilder will not try the same path twice if multiple 943 // Test that PathBuilder will not try the same path twice if multiple
940 // CertIssuerSources provide the same certificate. 944 // CertIssuerSources provide the same certificate.
941 TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediates) { 945 TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediates) {
942 // Create a separate copy of oldintermediate. 946 // Create a separate copy of oldintermediate.
943 scoped_refptr<ParsedCertificate> oldintermediate_dupe( 947 scoped_refptr<ParsedCertificate> oldintermediate_dupe(
944 ParsedCertificate::CreateFromCertificateCopy( 948 ParsedCertificate::Create(oldintermediate_->der_cert().AsStringPiece(),
945 oldintermediate_->der_cert().AsStringPiece(), {})); 949 {}, nullptr));
946 950
947 // Only newroot is a trusted root. 951 // Only newroot is a trusted root.
948 TrustStoreInMemory trust_store; 952 TrustStoreInMemory trust_store;
949 AddTrustedCertificate(newroot_, &trust_store); 953 AddTrustedCertificate(newroot_, &trust_store);
950 954
951 // The oldintermediate is supplied synchronously by |sync_certs1| and 955 // The oldintermediate is supplied synchronously by |sync_certs1| and
952 // another copy of oldintermediate is supplied synchronously by |sync_certs2|. 956 // another copy of oldintermediate is supplied synchronously by |sync_certs2|.
953 // The path target <- oldintermediate <- newroot should be built first, 957 // The path target <- oldintermediate <- newroot should be built first,
954 // though it won't verify. It should not be attempted again even though 958 // though it won't verify. It should not be attempted again even though
955 // oldintermediate was supplied twice. 959 // oldintermediate was supplied twice.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 ASSERT_EQ(2U, path1.certs.size()); 999 ASSERT_EQ(2U, path1.certs.size());
996 EXPECT_EQ(target_, path1.certs[0]); 1000 EXPECT_EQ(target_, path1.certs[0]);
997 EXPECT_EQ(newintermediate_, path1.certs[1]); 1001 EXPECT_EQ(newintermediate_, path1.certs[1]);
998 EXPECT_EQ(newroot_, path1.trust_anchor->cert()); 1002 EXPECT_EQ(newroot_, path1.trust_anchor->cert());
999 } 1003 }
1000 1004
1001 // Test when PathBuilder is given a cert CertIssuerSources that has the same 1005 // Test when PathBuilder is given a cert CertIssuerSources that has the same
1002 // SPKI as a TrustAnchor. 1006 // SPKI as a TrustAnchor.
1003 TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediateAndRoot) { 1007 TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediateAndRoot) {
1004 // Create a separate copy of newroot. 1008 // Create a separate copy of newroot.
1005 scoped_refptr<ParsedCertificate> newroot_dupe( 1009 scoped_refptr<ParsedCertificate> newroot_dupe(ParsedCertificate::Create(
1006 ParsedCertificate::CreateFromCertificateCopy( 1010 newroot_->der_cert().AsStringPiece(), {}, nullptr));
1007 newroot_->der_cert().AsStringPiece(), {}));
1008 1011
1009 // Only newroot is a trusted root. 1012 // Only newroot is a trusted root.
1010 TrustStoreInMemory trust_store; 1013 TrustStoreInMemory trust_store;
1011 AddTrustedCertificate(newroot_, &trust_store); 1014 AddTrustedCertificate(newroot_, &trust_store);
1012 1015
1013 // The oldintermediate and newroot are supplied synchronously by |sync_certs|. 1016 // The oldintermediate and newroot are supplied synchronously by |sync_certs|.
1014 CertIssuerSourceStatic sync_certs; 1017 CertIssuerSourceStatic sync_certs;
1015 sync_certs.AddCert(oldintermediate_); 1018 sync_certs.AddCert(oldintermediate_);
1016 sync_certs.AddCert(newroot_dupe); 1019 sync_certs.AddCert(newroot_dupe);
1017 1020
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 SyncGetIssuersOf(oldintermediate_.get(), _)); 1229 SyncGetIssuersOf(oldintermediate_.get(), _));
1227 EXPECT_CALL(cert_issuer_source, 1230 EXPECT_CALL(cert_issuer_source,
1228 AsyncGetIssuersOf(oldintermediate_.get(), _, _)); 1231 AsyncGetIssuersOf(oldintermediate_.get(), _, _));
1229 } 1232 }
1230 target_issuers_callback.Run(target_issuers_req); 1233 target_issuers_callback.Run(target_issuers_req);
1231 ::testing::Mock::VerifyAndClearExpectations(target_issuers_req); 1234 ::testing::Mock::VerifyAndClearExpectations(target_issuers_req);
1232 ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); 1235 ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source);
1233 1236
1234 // Second async batch: return a different copy of oldintermediate_ again. 1237 // Second async batch: return a different copy of oldintermediate_ again.
1235 scoped_refptr<ParsedCertificate> oldintermediate_dupe( 1238 scoped_refptr<ParsedCertificate> oldintermediate_dupe(
1236 ParsedCertificate::CreateFromCertificateCopy( 1239 ParsedCertificate::Create(oldintermediate_->der_cert().AsStringPiece(),
1237 oldintermediate_->der_cert().AsStringPiece(), {})); 1240 {}, nullptr));
1238 EXPECT_CALL(*target_issuers_req, GetNext(_)) 1241 EXPECT_CALL(*target_issuers_req, GetNext(_))
1239 .WillOnce(DoAll(SetArgPointee<0>(oldintermediate_dupe), 1242 .WillOnce(DoAll(SetArgPointee<0>(oldintermediate_dupe),
1240 Return(CompletionStatus::SYNC))) 1243 Return(CompletionStatus::SYNC)))
1241 .WillOnce( 1244 .WillOnce(
1242 DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); 1245 DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC)));
1243 target_issuers_callback.Run(target_issuers_req); 1246 target_issuers_callback.Run(target_issuers_req);
1244 // oldintermediate was already processed above, it should not generate any 1247 // oldintermediate was already processed above, it should not generate any
1245 // more requests. 1248 // more requests.
1246 ::testing::Mock::VerifyAndClearExpectations(target_issuers_req); 1249 ::testing::Mock::VerifyAndClearExpectations(target_issuers_req);
1247 ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); 1250 ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 const auto& path1 = result.paths[1]->path; 1287 const auto& path1 = result.paths[1]->path;
1285 ASSERT_EQ(2U, path1.certs.size()); 1288 ASSERT_EQ(2U, path1.certs.size());
1286 EXPECT_EQ(target_, path1.certs[0]); 1289 EXPECT_EQ(target_, path1.certs[0]);
1287 EXPECT_EQ(newintermediate_, path1.certs[1]); 1290 EXPECT_EQ(newintermediate_, path1.certs[1]);
1288 EXPECT_EQ(newroot_, path1.trust_anchor->cert()); 1291 EXPECT_EQ(newroot_, path1.trust_anchor->cert());
1289 } 1292 }
1290 1293
1291 } // namespace 1294 } // namespace
1292 1295
1293 } // namespace net 1296 } // namespace net
OLDNEW
« no previous file with comments | « net/cert/internal/path_builder_pkits_unittest.cc ('k') | net/cert/internal/test_helpers.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698