Index: net/cert/internal/path_builder_unittest.cc |
diff --git a/net/cert/internal/path_builder_unittest.cc b/net/cert/internal/path_builder_unittest.cc |
index 56c7ea68b4d3c44064831b95cf5d461ac2172cc1..35fe15429052ba84e45061ff0494927ca37038ad 100644 |
--- a/net/cert/internal/path_builder_unittest.cc |
+++ b/net/cert/internal/path_builder_unittest.cc |
@@ -881,8 +881,6 @@ TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediateAndRoot) { |
EXPECT_EQ(newroot_->der_cert(), path.trust_anchor->cert()->der_cert()); |
} |
-// TODO(eroman): Re-enable these tests |
-#if 0 |
class MockCertIssuerSourceRequest : public CertIssuerSource::Request { |
public: |
MOCK_METHOD1(GetNext, void(ParsedCertificateList*)); |
@@ -892,9 +890,8 @@ class MockCertIssuerSource : public CertIssuerSource { |
public: |
MOCK_METHOD2(SyncGetIssuersOf, |
void(const ParsedCertificate*, ParsedCertificateList*)); |
- MOCK_METHOD3(AsyncGetIssuersOf, |
- void(const ParsedCertificate*, |
- std::unique_ptr<Request>*)); |
+ MOCK_METHOD2(AsyncGetIssuersOf, |
+ void(const ParsedCertificate*, std::unique_ptr<Request>*)); |
}; |
// Helper class to pass the Request to the PathBuilder when it calls |
@@ -905,7 +902,6 @@ class CertIssuerSourceRequestMover { |
CertIssuerSourceRequestMover(std::unique_ptr<CertIssuerSource::Request> req) |
: request_(std::move(req)) {} |
void MoveIt(const ParsedCertificate* cert, |
- const CertIssuerSource::IssuerCallback& issuers_callback, |
std::unique_ptr<CertIssuerSource::Request>* out_req) { |
*out_req = std::move(request_); |
} |
@@ -914,10 +910,23 @@ class CertIssuerSourceRequestMover { |
std::unique_ptr<CertIssuerSource::Request> request_; |
}; |
+// Functor that when called with a ParsedCertificateList* will append the |
+// specified certificate. |
+class AppendCertToList { |
+ public: |
+ explicit AppendCertToList(const scoped_refptr<ParsedCertificate>& cert) |
+ : cert_(cert) {} |
+ |
+ void operator()(ParsedCertificateList* out) { out->push_back(cert_); } |
+ |
+ private: |
+ scoped_refptr<ParsedCertificate> cert_; |
+}; |
+ |
// Test that a single CertIssuerSource returning multiple async batches of |
// issuers is handled correctly. Due to the StrictMocks, it also tests that path |
// builder does not request issuers of certs that it shouldn't. |
-TEST_F(PathBuilderKeyRolloverTest, TestMultipleAsyncCallbacksFromSingleSource) { |
+TEST_F(PathBuilderKeyRolloverTest, TestMultipleAsyncIssuersFromSingleSource) { |
StrictMock<MockCertIssuerSource> cert_issuer_source; |
// Only newroot is a trusted root. |
@@ -929,7 +938,6 @@ TEST_F(PathBuilderKeyRolloverTest, TestMultipleAsyncCallbacksFromSingleSource) { |
&result); |
path_builder.AddCertIssuerSource(&cert_issuer_source); |
- CertIssuerSource::IssuerCallback target_issuers_callback; |
// Create the mock CertIssuerSource::Request... |
std::unique_ptr<StrictMock<MockCertIssuerSourceRequest>> |
target_issuers_req_owner(new StrictMock<MockCertIssuerSourceRequest>()); |
@@ -942,26 +950,15 @@ TEST_F(PathBuilderKeyRolloverTest, TestMultipleAsyncCallbacksFromSingleSource) { |
{ |
::testing::InSequence s; |
EXPECT_CALL(cert_issuer_source, SyncGetIssuersOf(target_.get(), _)); |
- EXPECT_CALL(cert_issuer_source, AsyncGetIssuersOf(target_.get(), _, _)) |
- .WillOnce( |
- DoAll(SaveArg<1>(&target_issuers_callback), |
- Invoke(&req_mover, &CertIssuerSourceRequestMover::MoveIt))); |
+ EXPECT_CALL(cert_issuer_source, AsyncGetIssuersOf(target_.get(), _)) |
+ .WillOnce(Invoke(&req_mover, &CertIssuerSourceRequestMover::MoveIt)); |
} |
- TestClosure callback; |
- CompletionStatus rv = path_builder.Run(callback.closure()); |
- ASSERT_EQ(CompletionStatus::ASYNC, rv); |
- |
- ASSERT_FALSE(target_issuers_callback.is_null()); |
- |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
- |
- // First async batch: return oldintermediate_. |
EXPECT_CALL(*target_issuers_req, GetNext(_)) |
- .WillOnce(DoAll(SetArgPointee<0>(oldintermediate_), |
- Return(CompletionStatus::SYNC))) |
- .WillOnce( |
- DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); |
+ // First async batch: return oldintermediate_. |
+ .WillOnce(Invoke(AppendCertToList(oldintermediate_))) |
+ // Second async batch: return newintermediate_. |
+ .WillOnce(Invoke(AppendCertToList(newintermediate_))); |
{ |
::testing::InSequence s; |
// oldintermediate_ does not create a valid path, so both sync and async |
@@ -969,30 +966,21 @@ TEST_F(PathBuilderKeyRolloverTest, TestMultipleAsyncCallbacksFromSingleSource) { |
EXPECT_CALL(cert_issuer_source, |
SyncGetIssuersOf(oldintermediate_.get(), _)); |
EXPECT_CALL(cert_issuer_source, |
- AsyncGetIssuersOf(oldintermediate_.get(), _, _)); |
+ AsyncGetIssuersOf(oldintermediate_.get(), _)); |
} |
- target_issuers_callback.Run(target_issuers_req); |
- ::testing::Mock::VerifyAndClearExpectations(target_issuers_req); |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
- // Second async batch: return newintermediate_. |
- EXPECT_CALL(*target_issuers_req, GetNext(_)) |
- .WillOnce(DoAll(SetArgPointee<0>(newintermediate_), |
- Return(CompletionStatus::SYNC))) |
- .WillOnce( |
- DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); |
// newroot_ is in the trust store, so this path will be completed |
// synchronously. AsyncGetIssuersOf will not be called on newintermediate_. |
EXPECT_CALL(cert_issuer_source, SyncGetIssuersOf(newintermediate_.get(), _)); |
- target_issuers_callback.Run(target_issuers_req); |
+ |
+ // Ensure pathbuilder finished and filled result. |
+ path_builder.Run(); |
+ |
// Note that VerifyAndClearExpectations(target_issuers_req) is not called |
// here. PathBuilder could have destroyed it already, so just let the |
// expectations get checked by the destructor. |
::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
- // Ensure pathbuilder finished and filled result. |
- callback.WaitForResult(); |
- |
EXPECT_TRUE(result.HasValidPath()); |
ASSERT_EQ(2U, result.paths.size()); |
@@ -1029,7 +1017,6 @@ TEST_F(PathBuilderKeyRolloverTest, TestDuplicateAsyncIntermediates) { |
&result); |
path_builder.AddCertIssuerSource(&cert_issuer_source); |
- CertIssuerSource::IssuerCallback target_issuers_callback; |
// Create the mock CertIssuerSource::Request... |
std::unique_ptr<StrictMock<MockCertIssuerSourceRequest>> |
target_issuers_req_owner(new StrictMock<MockCertIssuerSourceRequest>()); |
@@ -1042,26 +1029,22 @@ TEST_F(PathBuilderKeyRolloverTest, TestDuplicateAsyncIntermediates) { |
{ |
::testing::InSequence s; |
EXPECT_CALL(cert_issuer_source, SyncGetIssuersOf(target_.get(), _)); |
- EXPECT_CALL(cert_issuer_source, AsyncGetIssuersOf(target_.get(), _, _)) |
- .WillOnce( |
- DoAll(SaveArg<1>(&target_issuers_callback), |
- Invoke(&req_mover, &CertIssuerSourceRequestMover::MoveIt))); |
+ EXPECT_CALL(cert_issuer_source, AsyncGetIssuersOf(target_.get(), _)) |
+ .WillOnce(Invoke(&req_mover, &CertIssuerSourceRequestMover::MoveIt)); |
} |
- TestClosure callback; |
- CompletionStatus rv = path_builder.Run(callback.closure()); |
- ASSERT_EQ(CompletionStatus::ASYNC, rv); |
- |
- ASSERT_FALSE(target_issuers_callback.is_null()); |
- |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
+ scoped_refptr<ParsedCertificate> oldintermediate_dupe( |
+ ParsedCertificate::Create(oldintermediate_->der_cert().AsStringPiece(), |
+ {}, nullptr)); |
- // First async batch: return oldintermediate_. |
EXPECT_CALL(*target_issuers_req, GetNext(_)) |
- .WillOnce(DoAll(SetArgPointee<0>(oldintermediate_), |
- Return(CompletionStatus::SYNC))) |
- .WillOnce( |
- DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); |
+ // First async batch: return oldintermediate_. |
+ .WillOnce(Invoke(AppendCertToList(oldintermediate_))) |
+ // Second async batch: return a different copy of oldintermediate_ again. |
+ .WillOnce(Invoke(AppendCertToList(oldintermediate_dupe))) |
+ // Third async batch: return newintermediate_. |
+ .WillOnce(Invoke(AppendCertToList(newintermediate_))); |
+ |
{ |
::testing::InSequence s; |
// oldintermediate_ does not create a valid path, so both sync and async |
@@ -1069,44 +1052,17 @@ TEST_F(PathBuilderKeyRolloverTest, TestDuplicateAsyncIntermediates) { |
EXPECT_CALL(cert_issuer_source, |
SyncGetIssuersOf(oldintermediate_.get(), _)); |
EXPECT_CALL(cert_issuer_source, |
- AsyncGetIssuersOf(oldintermediate_.get(), _, _)); |
+ AsyncGetIssuersOf(oldintermediate_.get(), _)); |
} |
- target_issuers_callback.Run(target_issuers_req); |
- ::testing::Mock::VerifyAndClearExpectations(target_issuers_req); |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
- |
- // Second async batch: return a different copy of oldintermediate_ again. |
- scoped_refptr<ParsedCertificate> oldintermediate_dupe( |
- ParsedCertificate::Create(oldintermediate_->der_cert().AsStringPiece(), |
- {}, nullptr)); |
- EXPECT_CALL(*target_issuers_req, GetNext(_)) |
- .WillOnce(DoAll(SetArgPointee<0>(oldintermediate_dupe), |
- Return(CompletionStatus::SYNC))) |
- .WillOnce( |
- DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); |
- target_issuers_callback.Run(target_issuers_req); |
- // oldintermediate was already processed above, it should not generate any |
- // more requests. |
- ::testing::Mock::VerifyAndClearExpectations(target_issuers_req); |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
- // Third async batch: return newintermediate_. |
- EXPECT_CALL(*target_issuers_req, GetNext(_)) |
- .WillOnce(DoAll(SetArgPointee<0>(newintermediate_), |
- Return(CompletionStatus::SYNC))) |
- .WillOnce( |
- DoAll(SetArgPointee<0>(nullptr), Return(CompletionStatus::ASYNC))); |
// newroot_ is in the trust store, so this path will be completed |
// synchronously. AsyncGetIssuersOf will not be called on newintermediate_. |
EXPECT_CALL(cert_issuer_source, SyncGetIssuersOf(newintermediate_.get(), _)); |
- target_issuers_callback.Run(target_issuers_req); |
- // Note that VerifyAndClearExpectations(target_issuers_req) is not called |
- // here. PathBuilder could have destroyed it already, so just let the |
- // expectations get checked by the destructor. |
- ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
// Ensure pathbuilder finished and filled result. |
- callback.WaitForResult(); |
+ path_builder.Run(); |
+ |
+ ::testing::Mock::VerifyAndClearExpectations(&cert_issuer_source); |
EXPECT_TRUE(result.HasValidPath()); |
ASSERT_EQ(2U, result.paths.size()); |
@@ -1132,8 +1088,6 @@ TEST_F(PathBuilderKeyRolloverTest, TestDuplicateAsyncIntermediates) { |
EXPECT_EQ(newroot_, path1.trust_anchor->cert()); |
} |
-#endif |
- |
} // namespace |
} // namespace net |