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

Unified Diff: net/http/disk_cache_based_ssl_host_info_unittest.cc

Issue 135373002: Added SSLHostInfo. Storing of server host info to our standard disk cache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed wtc's comments Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: net/http/disk_cache_based_ssl_host_info_unittest.cc
diff --git a/net/http/disk_cache_based_ssl_host_info_unittest.cc b/net/http/disk_cache_based_ssl_host_info_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e53a9e35b1ad6c56826a6f69e183c010927511b3
--- /dev/null
+++ b/net/http/disk_cache_based_ssl_host_info_unittest.cc
@@ -0,0 +1,119 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/compiler_specific.h"
+#include "base/message_loop/message_loop.h"
+#include "net/base/net_errors.h"
+#include "net/cert/mock_cert_verifier.h"
+#include "net/http/disk_cache_based_ssl_host_info.h"
+#include "net/http/mock_http_cache.h"
+#include "net/socket/ssl_host_info.h"
+#include "net/ssl/ssl_config_service.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+// 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
+};
+
+// Tests that we can delete a DiskCacheBasedSSLHostInfo object in a
+// completion callback for DiskCacheBasedSSLHostInfo::WaitForDataReady.
+TEST(DiskCacheBasedSSLHostInfo, DeleteInCallback) {
+ scoped_ptr<net::CertVerifier> cert_verifier(new net::MockCertVerifier);
+ // Use the blocking mock backend factory to force asynchronous completion
+ // of ssl_host_info->WaitForDataReady(), so that the callback will run.
+ MockBlockingBackendFactory* factory = new MockBlockingBackendFactory();
+ MockHttpCache cache(factory);
+ net::SSLConfig ssl_config;
+ scoped_ptr<net::SSLHostInfo> ssl_host_info(
+ new net::DiskCacheBasedSSLHostInfo("https://www.verisign.com", ssl_config,
+ cert_verifier.get(),
+ cache.http_cache()));
+ ssl_host_info->Start();
+ net::TestCompletionCallback callback;
+ int rv = ssl_host_info->WaitForDataReady(callback.callback());
+ EXPECT_EQ(net::ERR_IO_PENDING, rv);
+ // Now complete the backend creation and let the callback run.
+ 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);
+ net::TestCompletionCallback callback;
+
+ // Store a certificate chain.
+ scoped_ptr<net::CertVerifier> cert_verifier(new net::MockCertVerifier);
+ net::SSLConfig ssl_config;
+ scoped_ptr<net::SSLHostInfo> ssl_host_info(
+ new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
+ cert_verifier.get(),
+ cache.http_cache()));
+ ssl_host_info->Start();
+ int rv = ssl_host_info->WaitForDataReady(callback.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.
+ base::MessageLoop::current()->RunUntilIdle();
+
+ // Open the stored certificate chain.
+ ssl_host_info.reset(
+ new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
+ cert_verifier.get(),
+ cache.http_cache()));
+ ssl_host_info->Start();
+ rv = ssl_host_info->WaitForDataReady(callback.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();
+ base::MessageLoop::current()->RunUntilIdle();
+
+ // Verify that the state was updated.
+ ssl_host_info.reset(
+ new net::DiskCacheBasedSSLHostInfo("https://www.google.com", ssl_config,
+ cert_verifier.get(),
+ cache.http_cache()));
+ ssl_host_info->Start();
+ rv = ssl_host_info->WaitForDataReady(callback.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);
+}
+
+} // namespace

Powered by Google App Engine
This is Rietveld 408576698