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

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: 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> ok_cert(
52 ImportCertFromFile(certs_dir, "ok_cert.pem"));
53 ASSERT_TRUE(ok_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(ok_cert, "www.example.com", 0, std::string(),
62 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> ok_cert(
73 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
74 ASSERT_NE(static_cast<X509Certificate*>(NULL), ok_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(ok_cert, "www.example.com", 0, std::string(),
83 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> ok_cert(
97 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
98 ASSERT_NE(static_cast<X509Certificate*>(NULL), ok_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(ok_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(ok_cert, example_hostname, 0, std::string(),
124 CertificateList()),
125 nullptr, &verify_result2, callback.callback(), &request, BoundNetLog()));
126 // Synchronous completion and verify it is same as serialized data.
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 TEST_F(CertVerifierCachePersisterTest, RestoreMultipleEntriesIntoNewVerifier) {
134 scoped_refptr<X509Certificate> ok_cert(
135 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
136 ASSERT_NE(static_cast<X509Certificate*>(NULL), ok_cert.get());
137
138 const scoped_refptr<X509Certificate> root_cert =
139 ImportCertFromFile(GetTestCertsDirectory(), "root_ca_cert.pem");
140 ASSERT_TRUE(root_cert.get());
141
142 // Create a certificate that contains both a leaf and an intermediate/root.
143 X509Certificate::OSCertHandles chain;
144 chain.push_back(root_cert->os_cert_handle());
145 const scoped_refptr<X509Certificate> combined_cert =
146 X509Certificate::CreateFromHandle(ok_cert->os_cert_handle(), chain);
147 ASSERT_TRUE(combined_cert.get());
148
149 int error;
150 std::string example_hostname("www.example.com");
151 CertVerifyResult verify1_result1;
152 TestCompletionCallback callback;
153 std::unique_ptr<CertVerifier::Request> request;
154
155 error = callback.GetResult(verifier_.Verify(
156 CertVerifier::RequestParams(ok_cert, example_hostname, 0, std::string(),
157 CertificateList()),
158 nullptr, &verify1_result1, callback.callback(), &request, BoundNetLog()));
159 ASSERT_TRUE(IsCertificateError(error));
160
161 std::string example2_hostname("www.example2.com");
162 CertVerifyResult verify1_result2;
163 error = callback.GetResult(verifier_.Verify(
164 CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
165 std::string(), CertificateList()),
166 nullptr, &verify1_result2, callback.callback(), &request, BoundNetLog()));
167 ASSERT_TRUE(IsCertificateError(error));
168
169 std::string data;
170 persister_.SerializeCache(&data);
171 EXPECT_FALSE(data.empty());
172
173 // Create a new Verifier and restoring the data into it should succeed.
174 CachingCertVerifier verifier2(base::MakeUnique<MockCertVerifier>());
175 CertVerifierCachePersister persister2(&verifier2);
176 EXPECT_TRUE(persister2.LoadCache(data));
177
178 CertVerifyResult verify2_result1;
179 error = callback.GetResult(verifier2.Verify(
180 CertVerifier::RequestParams(ok_cert, example_hostname, 0, std::string(),
181 CertificateList()),
182 nullptr, &verify2_result1, callback.callback(), &request, BoundNetLog()));
183 // Synchronous completion and verify it is same as serialized data.
184 ASSERT_NE(ERR_IO_PENDING, error);
185 ASSERT_TRUE(IsCertificateError(error));
186 ASSERT_FALSE(request);
187 EXPECT_EQ(verify2_result1.cert_status, verify1_result1.cert_status);
188
189 CertVerifyResult verify2_result2;
190 error = callback.GetResult(verifier2.Verify(
191 CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
192 std::string(), CertificateList()),
193 nullptr, &verify2_result2, callback.callback(), &request, BoundNetLog()));
194 // Synchronous completion and verify it is same as serialized data.
195 ASSERT_NE(ERR_IO_PENDING, error);
196 ASSERT_TRUE(IsCertificateError(error));
197 ASSERT_FALSE(request);
198 EXPECT_EQ(verify2_result2.cert_status, verify1_result2.cert_status);
199 }
200
201 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698