Index: net/ssl/channel_id_service_unittest.cc |
diff --git a/net/ssl/channel_id_service_unittest.cc b/net/ssl/channel_id_service_unittest.cc |
index 4ecef89160f376e655056458655959b6f338bbc2..36b4cf6668d360f3ff39f7ec163823a5f5f271ea 100644 |
--- a/net/ssl/channel_id_service_unittest.cc |
+++ b/net/ssl/channel_id_service_unittest.cc |
@@ -137,15 +137,14 @@ TEST_F(ChannelIDServiceTest, GetCacheMiss) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Synchronous completion, because the store is initialized. |
scoped_ptr<crypto::ECPrivateKey> key; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = |
- service_->GetChannelID(host, &key, callback.callback(), &request_handle); |
+ error = service_->GetChannelID(host, &key, callback.callback(), &request); |
EXPECT_EQ(ERR_FILE_NOT_FOUND, error); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
EXPECT_EQ(0, service_->channel_id_count()); |
EXPECT_FALSE(key); |
} |
@@ -155,35 +154,34 @@ TEST_F(ChannelIDServiceTest, CacheHit) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Asynchronous completion. |
scoped_ptr<crypto::ECPrivateKey> key1; |
EXPECT_EQ(0, service_->channel_id_count()); |
error = service_->GetOrCreateChannelID(host, &key1, callback.callback(), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
error = callback.WaitForResult(); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(1, service_->channel_id_count()); |
EXPECT_TRUE(key1); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
// Synchronous completion. |
scoped_ptr<crypto::ECPrivateKey> key2; |
error = service_->GetOrCreateChannelID(host, &key2, callback.callback(), |
- &request_handle); |
- EXPECT_FALSE(request_handle.is_active()); |
+ &request); |
+ EXPECT_FALSE(request.is_active()); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(1, service_->channel_id_count()); |
EXPECT_TRUE(KeysEqual(key1.get(), key2.get())); |
// Synchronous get. |
scoped_ptr<crypto::ECPrivateKey> key3; |
- error = |
- service_->GetChannelID(host, &key3, callback.callback(), &request_handle); |
- EXPECT_FALSE(request_handle.is_active()); |
+ error = service_->GetChannelID(host, &key3, callback.callback(), &request); |
+ EXPECT_FALSE(request.is_active()); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(1, service_->channel_id_count()); |
EXPECT_TRUE(KeysEqual(key1.get(), key3.get())); |
@@ -196,15 +194,15 @@ TEST_F(ChannelIDServiceTest, CacheHit) { |
TEST_F(ChannelIDServiceTest, StoreChannelIDs) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
std::string host1("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key1; |
EXPECT_EQ(0, service_->channel_id_count()); |
error = service_->GetOrCreateChannelID(host1, &key1, callback.callback(), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
error = callback.WaitForResult(); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(1, service_->channel_id_count()); |
@@ -212,9 +210,9 @@ TEST_F(ChannelIDServiceTest, StoreChannelIDs) { |
std::string host2("www.verisign.com"); |
scoped_ptr<crypto::ECPrivateKey> key2; |
error = service_->GetOrCreateChannelID(host2, &key2, callback.callback(), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
error = callback.WaitForResult(); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(2, service_->channel_id_count()); |
@@ -222,9 +220,9 @@ TEST_F(ChannelIDServiceTest, StoreChannelIDs) { |
std::string host3("www.twitter.com"); |
scoped_ptr<crypto::ECPrivateKey> key3; |
error = service_->GetOrCreateChannelID(host3, &key3, callback.callback(), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
error = callback.WaitForResult(); |
EXPECT_EQ(OK, error); |
EXPECT_EQ(3, service_->channel_id_count()); |
@@ -241,21 +239,21 @@ TEST_F(ChannelIDServiceTest, InflightJoin) { |
scoped_ptr<crypto::ECPrivateKey> key1; |
TestCompletionCallback callback1; |
- ChannelIDService::RequestHandle request_handle1; |
+ ChannelIDService::Request request1; |
scoped_ptr<crypto::ECPrivateKey> key2; |
TestCompletionCallback callback2; |
- ChannelIDService::RequestHandle request_handle2; |
+ ChannelIDService::Request request2; |
error = service_->GetOrCreateChannelID(host, &key1, callback1.callback(), |
- &request_handle1); |
+ &request1); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle1.is_active()); |
+ EXPECT_TRUE(request1.is_active()); |
// Should join with the original request. |
error = service_->GetOrCreateChannelID(host, &key2, callback2.callback(), |
- &request_handle2); |
+ &request2); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle2.is_active()); |
+ EXPECT_TRUE(request2.is_active()); |
error = callback1.WaitForResult(); |
EXPECT_EQ(OK, error); |
@@ -275,21 +273,20 @@ TEST_F(ChannelIDServiceTest, InflightJoinGetOrCreateAndGet) { |
scoped_ptr<crypto::ECPrivateKey> key1; |
TestCompletionCallback callback1; |
- ChannelIDService::RequestHandle request_handle1; |
+ ChannelIDService::Request request1; |
scoped_ptr<crypto::ECPrivateKey> key2; |
TestCompletionCallback callback2; |
- ChannelIDService::RequestHandle request_handle2; |
+ ChannelIDService::Request request2; |
error = service_->GetOrCreateChannelID(host, &key1, callback1.callback(), |
- &request_handle1); |
+ &request1); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle1.is_active()); |
+ EXPECT_TRUE(request1.is_active()); |
// Should join with the original request. |
- error = service_->GetChannelID(host, &key2, callback2.callback(), |
- &request_handle2); |
+ error = service_->GetChannelID(host, &key2, callback2.callback(), &request2); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle2.is_active()); |
+ EXPECT_TRUE(request2.is_active()); |
error = callback1.WaitForResult(); |
EXPECT_EQ(OK, error); |
@@ -308,14 +305,14 @@ TEST_F(ChannelIDServiceTest, CancelRequest) { |
std::string host("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key; |
int error; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
error = service_->GetOrCreateChannelID(host, &key, base::Bind(&FailTest), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
- request_handle.Cancel(); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
+ request.Cancel(); |
+ EXPECT_FALSE(request.is_active()); |
// Wait for reply from ChannelIDServiceWorker to be posted back to the |
// ChannelIDService. |
@@ -326,18 +323,18 @@ TEST_F(ChannelIDServiceTest, CancelRequest) { |
EXPECT_EQ(1, service_->channel_id_count()); |
} |
-// Tests that destructing the RequestHandle cancels the request. |
+// Tests that destructing the Request cancels the request. |
TEST_F(ChannelIDServiceTest, CancelRequestByHandleDestruction) { |
std::string host("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key; |
int error; |
{ |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
error = service_->GetOrCreateChannelID(host, &key, base::Bind(&FailTest), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
} |
// Wait for reply from ChannelIDServiceWorker to be posted back to the |
@@ -353,15 +350,15 @@ TEST_F(ChannelIDServiceTest, DestructionWithPendingRequest) { |
std::string host("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key; |
int error; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
error = service_->GetOrCreateChannelID(host, &key, base::Bind(&FailTest), |
- &request_handle); |
+ &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
// Cancel request and destroy the ChannelIDService. |
- request_handle.Cancel(); |
+ request.Cancel(); |
service_.reset(); |
// ChannelIDServiceWorker should not post anything back to the |
@@ -372,6 +369,30 @@ TEST_F(ChannelIDServiceTest, DestructionWithPendingRequest) { |
// If we got here without crashing or a valgrind error, it worked. |
} |
+TEST_F(ChannelIDServiceTest, DestructionOfChannelIDServiceRequest) { |
mattm
2015/06/09 23:08:35
Is this test different than ChannelIDServiceTest.C
nharper
2015/06/09 23:45:03
It looks like these tests should do the same thing
mattm
2015/06/10 00:14:24
Oh, that's a good point. I wasn't thinking about t
|
+ std::string host("encrypted.google.com"); |
+ scoped_ptr<crypto::ECPrivateKey> key; |
+ int error; |
+ TestCompletionCallback callback; |
+ scoped_ptr<ChannelIDService::Request> request( |
+ new ChannelIDService::Request()); |
+ |
+ error = service_->GetOrCreateChannelID(host, &key, callback.callback(), |
+ request.get()); |
+ EXPECT_EQ(ERR_IO_PENDING, error); |
+ EXPECT_TRUE(request->is_active()); |
+ |
+ // Delete the Request object, which should also cancel the request. |
+ request.reset(); |
+ |
+ // Run the loop. If deleting the Request object didn't cancel the request, |
+ // then running the request until completion will cause the test to crash |
+ // (because it will try to update the now deleted Request object). |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ |
+ // If we got here without crashing or a valgrind error, it worked. |
+} |
+ |
// Tests that shutting down the sequenced worker pool and then making new |
// requests gracefully fails. |
// This is a regression test for http://crbug.com/236387 |
@@ -384,13 +405,13 @@ TEST_F(ChannelIDServiceTest, RequestAfterPoolShutdown) { |
std::string host("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key; |
int error; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
error = service_->GetOrCreateChannelID(host, &key, base::Bind(&FailTest), |
- &request_handle); |
+ &request); |
// If we got here without crashing or a valgrind error, it worked. |
ASSERT_EQ(ERR_INSUFFICIENT_RESOURCES, error); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
} |
// Tests that simultaneous creation of different certs works. |
@@ -400,32 +421,32 @@ TEST_F(ChannelIDServiceTest, SimultaneousCreation) { |
std::string host1("encrypted.google.com"); |
scoped_ptr<crypto::ECPrivateKey> key1; |
TestCompletionCallback callback1; |
- ChannelIDService::RequestHandle request_handle1; |
+ ChannelIDService::Request request1; |
std::string host2("foo.com"); |
scoped_ptr<crypto::ECPrivateKey> key2; |
TestCompletionCallback callback2; |
- ChannelIDService::RequestHandle request_handle2; |
+ ChannelIDService::Request request2; |
std::string host3("bar.com"); |
scoped_ptr<crypto::ECPrivateKey> key3; |
TestCompletionCallback callback3; |
- ChannelIDService::RequestHandle request_handle3; |
+ ChannelIDService::Request request3; |
error = service_->GetOrCreateChannelID(host1, &key1, callback1.callback(), |
- &request_handle1); |
+ &request1); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle1.is_active()); |
+ EXPECT_TRUE(request1.is_active()); |
error = service_->GetOrCreateChannelID(host2, &key2, callback2.callback(), |
- &request_handle2); |
+ &request2); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle2.is_active()); |
+ EXPECT_TRUE(request2.is_active()); |
error = service_->GetOrCreateChannelID(host3, &key3, callback3.callback(), |
- &request_handle3); |
+ &request3); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle3.is_active()); |
+ EXPECT_TRUE(request3.is_active()); |
error = callback1.WaitForResult(); |
EXPECT_EQ(OK, error); |
@@ -456,15 +477,15 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateNoChannelIDsInStore) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Asynchronous completion with no certs in the store. |
scoped_ptr<crypto::ECPrivateKey> key; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = service_->GetOrCreateChannelID(host, &key, callback.callback(), |
- &request_handle); |
+ error = |
+ service_->GetOrCreateChannelID(host, &key, callback.callback(), &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
mock_store->CallGetChannelIDCallbackWithResult(ERR_FILE_NOT_FOUND, nullptr); |
@@ -472,7 +493,7 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateNoChannelIDsInStore) { |
EXPECT_EQ(OK, error); |
EXPECT_EQ(1, service_->channel_id_count()); |
EXPECT_TRUE(key); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
} |
TEST_F(ChannelIDServiceTest, AsyncStoreGetNoChannelIDsInStore) { |
@@ -485,15 +506,14 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetNoChannelIDsInStore) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Asynchronous completion with no certs in the store. |
scoped_ptr<crypto::ECPrivateKey> key; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = |
- service_->GetChannelID(host, &key, callback.callback(), &request_handle); |
+ error = service_->GetChannelID(host, &key, callback.callback(), &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
mock_store->CallGetChannelIDCallbackWithResult(ERR_FILE_NOT_FOUND, nullptr); |
@@ -502,7 +522,7 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetNoChannelIDsInStore) { |
EXPECT_EQ(0, service_->channel_id_count()); |
EXPECT_EQ(0u, service_->workers_created()); |
EXPECT_FALSE(key); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
} |
TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateOneCertInStore) { |
@@ -515,15 +535,15 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateOneCertInStore) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Asynchronous completion with a cert in the store. |
scoped_ptr<crypto::ECPrivateKey> key; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = service_->GetOrCreateChannelID(host, &key, callback.callback(), |
- &request_handle); |
+ error = |
+ service_->GetOrCreateChannelID(host, &key, callback.callback(), &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
scoped_ptr<crypto::ECPrivateKey> expected_key(crypto::ECPrivateKey::Create()); |
mock_store->CallGetChannelIDCallbackWithResult(OK, expected_key.get()); |
@@ -538,7 +558,7 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOrCreateOneCertInStore) { |
EXPECT_EQ(0u, service_->workers_created()); |
EXPECT_TRUE(key); |
EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
} |
TEST_F(ChannelIDServiceTest, AsyncStoreGetOneCertInStore) { |
@@ -551,16 +571,15 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOneCertInStore) { |
int error; |
TestCompletionCallback callback; |
- ChannelIDService::RequestHandle request_handle; |
+ ChannelIDService::Request request; |
// Asynchronous completion with a cert in the store. |
scoped_ptr<crypto::ECPrivateKey> key; |
std::string private_key, spki; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = |
- service_->GetChannelID(host, &key, callback.callback(), &request_handle); |
+ error = service_->GetChannelID(host, &key, callback.callback(), &request); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle.is_active()); |
+ EXPECT_TRUE(request.is_active()); |
scoped_ptr<crypto::ECPrivateKey> expected_key(crypto::ECPrivateKey::Create()); |
mock_store->CallGetChannelIDCallbackWithResult(OK, expected_key.get()); |
@@ -574,7 +593,7 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetOneCertInStore) { |
// created. |
EXPECT_EQ(0u, service_->workers_created()); |
EXPECT_TRUE(KeysEqual(expected_key.get(), key.get())); |
- EXPECT_FALSE(request_handle.is_active()); |
+ EXPECT_FALSE(request.is_active()); |
} |
TEST_F(ChannelIDServiceTest, AsyncStoreGetThenCreateNoCertsInStore) { |
@@ -589,23 +608,22 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetThenCreateNoCertsInStore) { |
// Asynchronous get with no certs in the store. |
TestCompletionCallback callback1; |
- ChannelIDService::RequestHandle request_handle1; |
+ ChannelIDService::Request request1; |
scoped_ptr<crypto::ECPrivateKey> key1; |
EXPECT_EQ(0, service_->channel_id_count()); |
- error = service_->GetChannelID(host, &key1, callback1.callback(), |
- &request_handle1); |
+ error = service_->GetChannelID(host, &key1, callback1.callback(), &request1); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle1.is_active()); |
+ EXPECT_TRUE(request1.is_active()); |
// Asynchronous get/create with no certs in the store. |
TestCompletionCallback callback2; |
- ChannelIDService::RequestHandle request_handle2; |
+ ChannelIDService::Request request2; |
scoped_ptr<crypto::ECPrivateKey> key2; |
EXPECT_EQ(0, service_->channel_id_count()); |
error = service_->GetOrCreateChannelID(host, &key2, callback2.callback(), |
- &request_handle2); |
+ &request2); |
EXPECT_EQ(ERR_IO_PENDING, error); |
- EXPECT_TRUE(request_handle2.is_active()); |
+ EXPECT_TRUE(request2.is_active()); |
mock_store->CallGetChannelIDCallbackWithResult(ERR_FILE_NOT_FOUND, nullptr); |
@@ -623,8 +641,8 @@ TEST_F(ChannelIDServiceTest, AsyncStoreGetThenCreateNoCertsInStore) { |
EXPECT_EQ(1u, service_->inflight_joins()); |
EXPECT_TRUE(key1); |
EXPECT_TRUE(KeysEqual(key1.get(), key2.get())); |
- EXPECT_FALSE(request_handle1.is_active()); |
- EXPECT_FALSE(request_handle2.is_active()); |
+ EXPECT_FALSE(request1.is_active()); |
+ EXPECT_FALSE(request2.is_active()); |
} |
} // namespace |