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

Unified Diff: net/extras/cert/cert_verifier_cache_persister_unittest.cc

Issue 2021433004: Cert - protobufs to serialize and deserialize CertVerifierCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Add_support_for_walking_1999733002
Patch Set: Added histogram for cache size Created 4 years, 7 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/extras/cert/cert_verifier_cache_persister_unittest.cc
diff --git a/net/extras/cert/cert_verifier_cache_persister_unittest.cc b/net/extras/cert/cert_verifier_cache_persister_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d20bf239bc1e8613306a571150d5d42ab8a8aee7
--- /dev/null
+++ b/net/extras/cert/cert_verifier_cache_persister_unittest.cc
@@ -0,0 +1,133 @@
+// Copyright (c) 2016 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 "net/extras/cert/cert_verifier_cache_persister.h"
+
+#include <memory>
+
+#include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "net/base/net_errors.h"
+#include "net/base/test_completion_callback.h"
+#include "net/base/test_data_directory.h"
+#include "net/cert/caching_cert_verifier.h"
+#include "net/cert/cert_verifier.h"
+#include "net/cert/cert_verify_result.h"
+#include "net/cert/mock_cert_verifier.h"
+#include "net/cert/x509_certificate.h"
+#include "net/log/net_log.h"
+#include "net/test/cert_test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+class CertVerifierCachePersisterTest : public ::testing::Test {
+ public:
+ CertVerifierCachePersisterTest()
+ : verifier_(base::MakeUnique<MockCertVerifier>()),
+ persister_(&verifier_) {}
+ ~CertVerifierCachePersisterTest() override {}
+
+ protected:
+ CachingCertVerifier verifier_;
+ CertVerifierCachePersister persister_;
+};
+
+TEST_F(CertVerifierCachePersisterTest, RestoreEmptyData) {
+ // Restoring empty data should fail.
+ EXPECT_FALSE(persister_.LoadCache(std::string()));
+}
+
+TEST_F(CertVerifierCachePersisterTest, RestoreCorruptedData) {
+ // Restoring corrupted data should fail.
+ EXPECT_FALSE(persister_.LoadCache(std::string("junk")));
+}
+
+TEST_F(CertVerifierCachePersisterTest, SerializeCache) {
+ base::FilePath certs_dir = GetTestCertsDirectory();
+ scoped_refptr<X509Certificate> test_cert(
+ ImportCertFromFile(certs_dir, "ok_cert.pem"));
+ ASSERT_TRUE(test_cert.get());
+
+ int error;
+ CertVerifyResult verify_result;
+ TestCompletionCallback callback;
+ std::unique_ptr<CertVerifier::Request> request;
+
+ error = callback.GetResult(verifier_.Verify(
+ CertVerifier::RequestParams(test_cert, "www.example.com", 0,
+ std::string(), CertificateList()),
+ nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
+ ASSERT_TRUE(IsCertificateError(error));
+
+ std::string data;
+ persister_.SerializeCache(&data);
+ EXPECT_FALSE(data.empty());
+}
+
+TEST_F(CertVerifierCachePersisterTest, RestoreExistingEntry) {
+ scoped_refptr<X509Certificate> test_cert(
+ ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
+
+ int error;
+ CertVerifyResult verify_result;
+ TestCompletionCallback callback;
+ std::unique_ptr<CertVerifier::Request> request;
+
+ error = callback.GetResult(verifier_.Verify(
+ CertVerifier::RequestParams(test_cert, "www.example.com", 0,
+ std::string(), CertificateList()),
+ nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
+ ASSERT_TRUE(IsCertificateError(error));
+
+ std::string data;
+ persister_.SerializeCache(&data);
+ EXPECT_FALSE(data.empty());
+
+ // Restore the cache data for an existing entry should fail.
+ EXPECT_FALSE(persister_.LoadCache(data));
+}
+
+TEST_F(CertVerifierCachePersisterTest, RestoreDataIntoNewVerifier) {
+ scoped_refptr<X509Certificate> test_cert(
+ ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
+ ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
+
+ int error;
+ std::string example_hostname("www.example.com");
+ CertVerifyResult verify_result;
+ TestCompletionCallback callback;
+ std::unique_ptr<CertVerifier::Request> request;
+
+ error = callback.GetResult(verifier_.Verify(
+ CertVerifier::RequestParams(test_cert, example_hostname, 0, std::string(),
+ CertificateList()),
+ nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
+ ASSERT_TRUE(IsCertificateError(error));
+
+ std::string data;
+ persister_.SerializeCache(&data);
+ EXPECT_FALSE(data.empty());
+
+ // Create a new Verifier and restoring the data into it should succeed.
+ CachingCertVerifier verifier2(base::MakeUnique<MockCertVerifier>());
+ CertVerifierCachePersister persister2(&verifier2);
+ EXPECT_TRUE(persister2.LoadCache(data));
+
+ CertVerifyResult verify_result2;
+ error = callback.GetResult(verifier2.Verify(
+ CertVerifier::RequestParams(test_cert, example_hostname, 0, std::string(),
+ CertificateList()),
+ nullptr, &verify_result2, callback.callback(), &request, BoundNetLog()));
+ // Synchronous completion and verify that there is a cache hit.
+ ASSERT_NE(ERR_IO_PENDING, error);
+ ASSERT_TRUE(IsCertificateError(error));
+ ASSERT_FALSE(request);
+ EXPECT_EQ(verify_result2.cert_status, verify_result.cert_status);
+}
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698