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

Side by Side 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, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/extras/cert/cert_verifier_cache_persister.h"
6
7 #include <memory>
8
9 #include "base/files/file_path.h"
10 #include "base/memory/ptr_util.h"
11 #include "base/memory/ref_counted.h"
12 #include "net/base/net_errors.h"
13 #include "net/base/test_completion_callback.h"
14 #include "net/base/test_data_directory.h"
15 #include "net/cert/caching_cert_verifier.h"
16 #include "net/cert/cert_verifier.h"
17 #include "net/cert/cert_verify_result.h"
18 #include "net/cert/mock_cert_verifier.h"
19 #include "net/cert/x509_certificate.h"
20 #include "net/log/net_log.h"
21 #include "net/test/cert_test_util.h"
22 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h"
24
25 namespace net {
26
27 class CertVerifierCachePersisterTest : public ::testing::Test {
28 public:
29 CertVerifierCachePersisterTest()
30 : verifier_(base::MakeUnique<MockCertVerifier>()),
31 persister_(&verifier_) {}
32 ~CertVerifierCachePersisterTest() override {}
33
34 protected:
35 CachingCertVerifier verifier_;
36 CertVerifierCachePersister persister_;
37 };
38
39 TEST_F(CertVerifierCachePersisterTest, RestoreEmptyData) {
40 // Restoring empty data should fail.
41 EXPECT_FALSE(persister_.LoadCache(std::string()));
42 }
43
44 TEST_F(CertVerifierCachePersisterTest, RestoreCorruptedData) {
45 // Restoring corrupted data should fail.
46 EXPECT_FALSE(persister_.LoadCache(std::string("junk")));
47 }
48
49 TEST_F(CertVerifierCachePersisterTest, SerializeCache) {
50 base::FilePath certs_dir = GetTestCertsDirectory();
51 scoped_refptr<X509Certificate> test_cert(
52 ImportCertFromFile(certs_dir, "ok_cert.pem"));
53 ASSERT_TRUE(test_cert.get());
54
55 int error;
56 CertVerifyResult verify_result;
57 TestCompletionCallback callback;
58 std::unique_ptr<CertVerifier::Request> request;
59
60 error = callback.GetResult(verifier_.Verify(
61 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
62 std::string(), CertificateList()),
63 nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
64 ASSERT_TRUE(IsCertificateError(error));
65
66 std::string data;
67 persister_.SerializeCache(&data);
68 EXPECT_FALSE(data.empty());
69 }
70
71 TEST_F(CertVerifierCachePersisterTest, RestoreExistingEntry) {
72 scoped_refptr<X509Certificate> test_cert(
73 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
74 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
75
76 int error;
77 CertVerifyResult verify_result;
78 TestCompletionCallback callback;
79 std::unique_ptr<CertVerifier::Request> request;
80
81 error = callback.GetResult(verifier_.Verify(
82 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
83 std::string(), CertificateList()),
84 nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
85 ASSERT_TRUE(IsCertificateError(error));
86
87 std::string data;
88 persister_.SerializeCache(&data);
89 EXPECT_FALSE(data.empty());
90
91 // Restore the cache data for an existing entry should fail.
92 EXPECT_FALSE(persister_.LoadCache(data));
93 }
94
95 TEST_F(CertVerifierCachePersisterTest, RestoreDataIntoNewVerifier) {
96 scoped_refptr<X509Certificate> test_cert(
97 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
98 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
99
100 int error;
101 std::string example_hostname("www.example.com");
102 CertVerifyResult verify_result;
103 TestCompletionCallback callback;
104 std::unique_ptr<CertVerifier::Request> request;
105
106 error = callback.GetResult(verifier_.Verify(
107 CertVerifier::RequestParams(test_cert, example_hostname, 0, std::string(),
108 CertificateList()),
109 nullptr, &verify_result, callback.callback(), &request, BoundNetLog()));
110 ASSERT_TRUE(IsCertificateError(error));
111
112 std::string data;
113 persister_.SerializeCache(&data);
114 EXPECT_FALSE(data.empty());
115
116 // Create a new Verifier and restoring the data into it should succeed.
117 CachingCertVerifier verifier2(base::MakeUnique<MockCertVerifier>());
118 CertVerifierCachePersister persister2(&verifier2);
119 EXPECT_TRUE(persister2.LoadCache(data));
120
121 CertVerifyResult verify_result2;
122 error = callback.GetResult(verifier2.Verify(
123 CertVerifier::RequestParams(test_cert, example_hostname, 0, std::string(),
124 CertificateList()),
125 nullptr, &verify_result2, callback.callback(), &request, BoundNetLog()));
126 // Synchronous completion and verify that there is a cache hit.
127 ASSERT_NE(ERR_IO_PENDING, error);
128 ASSERT_TRUE(IsCertificateError(error));
129 ASSERT_FALSE(request);
130 EXPECT_EQ(verify_result2.cert_status, verify_result.cert_status);
131 }
132
133 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698