| Index: net/http/disk_cache_based_ssl_host_info_unittest.cc
|
| ===================================================================
|
| --- net/http/disk_cache_based_ssl_host_info_unittest.cc (revision 111217)
|
| +++ net/http/disk_cache_based_ssl_host_info_unittest.cc (working copy)
|
| @@ -8,6 +8,8 @@
|
| #include "net/http/mock_http_cache.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +namespace {
|
| +
|
| class DeleteSSLHostInfoOldCompletionCallback : public TestOldCompletionCallback {
|
| public:
|
| explicit DeleteSSLHostInfoOldCompletionCallback(net::SSLHostInfo* ssl_host_info)
|
| @@ -22,6 +24,24 @@
|
| net::SSLHostInfo* ssl_host_info_;
|
| };
|
|
|
| +// This is an empty transaction, needed to register the URL and the test mode.
|
| +const MockTransaction kHostInfoTransaction = {
|
| + "sslhostinfo:https://www.google.com",
|
| + "",
|
| + base::Time(),
|
| + "",
|
| + net::LOAD_NORMAL,
|
| + "",
|
| + "",
|
| + base::Time(),
|
| + "",
|
| + TEST_MODE_NORMAL,
|
| + NULL,
|
| + 0
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| // Tests that we can delete a DiskCacheBasedSSLHostInfo object in a
|
| // completion callback for DiskCacheBasedSSLHostInfo::WaitForDataReady.
|
| TEST(DiskCacheBasedSSLHostInfo, DeleteInCallback) {
|
| @@ -42,3 +62,62 @@
|
| factory->FinishCreation();
|
| EXPECT_EQ(net::OK, callback.GetResult(rv));
|
| }
|
| +
|
| +// Tests the basic logic of storing, retrieving and updating data.
|
| +TEST(DiskCacheBasedSSLHostInfo, Update) {
|
| + MockHttpCache cache;
|
| + AddMockTransaction(&kHostInfoTransaction);
|
| + TestOldCompletionCallback callback;
|
| +
|
| + // Store a certificate chain.
|
| + net::CertVerifier cert_verifier;
|
| + net::SSLConfig ssl_config;
|
| + scoped_ptr<net::SSLHostInfo> ssl_host_info(
|
| + new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
|
| + &cert_verifier, cache.http_cache()));
|
| + ssl_host_info->Start();
|
| + int rv = ssl_host_info->WaitForDataReady(&callback);
|
| + EXPECT_EQ(net::OK, callback.GetResult(rv));
|
| +
|
| + net::SSLHostInfo::State* state = ssl_host_info->mutable_state();
|
| + EXPECT_TRUE(state->certs.empty());
|
| + state->certs.push_back(std::string("foo"));
|
| + ssl_host_info->Persist();
|
| +
|
| + // Wait until Persist() does the work.
|
| + MessageLoop::current()->RunAllPending();
|
| +
|
| + // Open the stored certificate chain.
|
| + ssl_host_info.reset(
|
| + new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
|
| + &cert_verifier, cache.http_cache()));
|
| + ssl_host_info->Start();
|
| + rv = ssl_host_info->WaitForDataReady(&callback);
|
| + EXPECT_EQ(net::OK, callback.GetResult(rv));
|
| +
|
| + // And now update the data.
|
| + state = ssl_host_info->mutable_state();
|
| + EXPECT_EQ(1U, state->certs.size());
|
| + EXPECT_EQ("foo", state->certs.front());
|
| + state->certs.push_back(std::string("bar"));
|
| +
|
| + // Fail instead of DCHECKing double creates.
|
| + cache.disk_cache()->set_double_create_check(false);
|
| + ssl_host_info->Persist();
|
| + MessageLoop::current()->RunAllPending();
|
| +
|
| + // Verify that the state was updated.
|
| + ssl_host_info.reset(
|
| + new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
|
| + &cert_verifier, cache.http_cache()));
|
| + ssl_host_info->Start();
|
| + rv = ssl_host_info->WaitForDataReady(&callback);
|
| + EXPECT_EQ(net::OK, callback.GetResult(rv));
|
| +
|
| + state = ssl_host_info->mutable_state();
|
| + EXPECT_EQ(2U, state->certs.size());
|
| + EXPECT_EQ("foo", state->certs[0]);
|
| + EXPECT_EQ("bar", state->certs[1]);
|
| +
|
| + RemoveMockTransaction(&kHostInfoTransaction);
|
| +}
|
|
|