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

Side by Side Diff: components/cronet/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: Fix comments 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 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 "components/cronet/cert/cert_verifier_cache_persister.h"
6
7 #include <memory>
8 #include <string>
9
10 #include "base/android/path_utils.h"
11 #include "base/files/file_path.h"
12 #include "base/memory/ptr_util.h"
13 #include "base/memory/ref_counted.h"
14 #include "net/base/net_errors.h"
15 #include "net/base/test_completion_callback.h"
16 #include "net/base/test_data_directory.h"
17 #include "net/cert/caching_cert_verifier.h"
18 #include "net/cert/cert_verifier.h"
19 #include "net/cert/cert_verify_result.h"
20 #include "net/cert/mock_cert_verifier.h"
21 #include "net/cert/x509_certificate.h"
22 #include "net/log/net_log.h"
23 #include "net/test/cert_test_util.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25
26 namespace cronet {
27
28 namespace {
29
30 void VerifyCert(const std::string& cert_name,
31 const std::string& hostname,
32 net::CachingCertVerifier* verifier,
33 net::CertVerifyResult* verify_result) {
34 // Set up server certs.
35 scoped_refptr<net::X509Certificate> cert(
36 net::ImportCertFromFile(net::GetTestCertsDirectory(), cert_name));
37 ASSERT_TRUE(cert);
38
39 net::TestCompletionCallback callback;
40 std::unique_ptr<net::CertVerifier::Request> request;
41
42 int error = callback.GetResult(verifier->Verify(
43 net::CertVerifier::RequestParams(cert.get(), hostname, 0, std::string(),
44 net::CertificateList()),
45 nullptr, verify_result, callback.callback(), &request,
46 net::BoundNetLog()));
47
48 ASSERT_TRUE(net::IsCertificateError(error));
Ryan Sleevi 2016/06/21 20:31:03 BUG/SURPRISE: What part of the contract of VerifyC
ramant (doing other things) 2016/06/22 03:51:36 I am not an expert in this area. Was copying other
49 }
50
51 } // namespace
52
53 TEST(CertVerifierCachePersisterTest, RestoreEmptyData) {
54 // Restoring empty data should fail.
55 cronet_pb::CertVerificationCache cert_cache;
56 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
57 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier));
58 }
59
60 TEST(CertVerifierCachePersisterTest, SerializeCache) {
61 net::CertVerifyResult verify_result;
62 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
63 ASSERT_NO_FATAL_FAILURE(
64 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
65 cronet_pb::CertVerificationCache cert_cache =
66 SerializeCertVerifierCache(verifier);
67 DCHECK_EQ(1, cert_cache.cert_entry_size());
68 DCHECK_EQ(1, cert_cache.cache_entry_size());
69 }
70
71 // Create a new Verifier and restoring the data into it should succeed.
72 TEST(CertVerifierCachePersisterTest, RestoreMultipleEntriesIntoNewVerifier) {
73 scoped_refptr<net::X509Certificate> ok_cert(
74 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"));
75 ASSERT_TRUE(ok_cert);
76
77 const scoped_refptr<net::X509Certificate> root_cert =
78 net::ImportCertFromFile(net::GetTestCertsDirectory(), "root_ca_cert.pem");
79 ASSERT_TRUE(root_cert);
80
81 // Create a certificate that contains both a leaf and an intermediate/root.
82 net::X509Certificate::OSCertHandles chain;
83 chain.push_back(root_cert->os_cert_handle());
84 const scoped_refptr<net::X509Certificate> combined_cert =
85 net::X509Certificate::CreateFromHandle(ok_cert->os_cert_handle(), chain);
86 ASSERT_TRUE(combined_cert);
87
88 int error;
89 net::TestCompletionCallback callback;
90 std::unique_ptr<net::CertVerifier::Request> request;
91
92 // Verify www.example.com host's certificate.
93 std::string example_hostname("www.example.com");
94 net::CertVerifyResult verifier1_result1;
95 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
96 error = callback.GetResult(verifier.Verify(
97 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
98 std::string(), net::CertificateList()),
99 nullptr, &verifier1_result1, callback.callback(), &request,
100 net::BoundNetLog()));
101 ASSERT_TRUE(net::IsCertificateError(error));
Ryan Sleevi 2016/06/21 20:31:02 Same comments apply throughout for the checks here
ramant (doing other things) 2016/06/22 03:51:37 Done.
102
103 // Verify www2.example.com host's certificate.
104 std::string example2_hostname("www2.example.com");
105 net::CertVerifyResult verifier1_result2;
106 error = callback.GetResult(verifier.Verify(
107 net::CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
108 std::string(), net::CertificateList()),
109 nullptr, &verifier1_result2, callback.callback(), &request,
110 net::BoundNetLog()));
111 ASSERT_TRUE(net::IsCertificateError(error));
112
113 cronet_pb::CertVerificationCache cert_cache =
114 SerializeCertVerifierCache(verifier);
115 DCHECK_EQ(2, cert_cache.cert_entry_size());
116 DCHECK_EQ(2, cert_cache.cache_entry_size());
117
118 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
119
120 // Populate |verifier2|'s cache.
121 EXPECT_TRUE(DeserializeCertVerifierCache(cert_cache, &verifier2));
122
123 // Verify the cert for www.example.com with |verifier2|.
124 net::CertVerifyResult verifier2_result1;
125 error = callback.GetResult(verifier2.Verify(
126 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
127 std::string(), net::CertificateList()),
128 nullptr, &verifier2_result1, callback.callback(), &request,
129 net::BoundNetLog()));
130 // Synchronous completion and verify it is same as serialized data for
131 // www.example.com.
Ryan Sleevi 2016/06/21 20:31:03 I highlighted before, but these comments (130-131)
ramant (doing other things) 2016/06/22 03:51:36 Done.
132 ASSERT_TRUE(net::IsCertificateError(error));
133 ASSERT_FALSE(request);
134 EXPECT_EQ(verifier2_result1.cert_status, verifier1_result1.cert_status);
Ryan Sleevi 2016/06/21 20:31:03 Document why you're checking here. For example, w
ramant (doing other things) 2016/06/22 03:51:37 Added operator== to CertVerifyResult and used it h
135
136 // Verify the cert for www2.example.com with |verifier2|.
137 net::CertVerifyResult verifier2_result2;
138 error = callback.GetResult(verifier2.Verify(
139 net::CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
140 std::string(), net::CertificateList()),
141 nullptr, &verifier2_result2, callback.callback(), &request,
Ryan Sleevi 2016/06/21 20:31:03 Why don't you use the VerifyCert helper here? What
ramant (doing other things) 2016/06/22 03:51:37 www2.example.com has certificate chain. VerifyCert
142 net::BoundNetLog()));
143 // Synchronous completion and verify it is same as serialized data for
144 // www2.example.com.
145 ASSERT_TRUE(net::IsCertificateError(error));
146 ASSERT_FALSE(request);
147 EXPECT_EQ(verifier2_result2.cert_status, verifier1_result2.cert_status);
148 }
149
150 // A corrupted cert_entry in the serialized data should fail to be deserialized.
151 // Should not deserialize a corrupted cert_entry.
Ryan Sleevi 2016/06/21 20:31:04 You updated this description, but failed to update
ramant (doing other things) 2016/06/22 03:51:36 Done.
152 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCerts) {
153 net::CertVerifyResult verify_result;
154 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
155 ASSERT_NO_FATAL_FAILURE(
156 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
157 cronet_pb::CertVerificationCache cert_cache =
158 SerializeCertVerifierCache(verifier);
159 DCHECK_EQ(1, cert_cache.cert_entry_size());
160 DCHECK_EQ(1, cert_cache.cache_entry_size());
161
162 cert_cache.clear_cert_entry();
163
164 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
165 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
166 }
167
168 // Corrupted |cache_entry| in the serialized data, should fail when
169 // deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
170 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCacheEntry) {
171 net::CertVerifyResult verify_result;
172 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
173 ASSERT_NO_FATAL_FAILURE(
174 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
175 cronet_pb::CertVerificationCache cert_cache =
176 SerializeCertVerifierCache(verifier);
177 DCHECK_EQ(1, cert_cache.cert_entry_size());
178 DCHECK_EQ(1, cert_cache.cache_entry_size());
179
180 // Corrupt |cache_entry|.
181 cert_cache.clear_cache_entry();
182
183 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
184 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
185 }
186
187 // Corrupted |request_params| in the serialized data, should fail when
188 // deserialized.
Ryan Sleevi 2016/06/21 20:31:02 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
189 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedRequestParams) {
190 net::CertVerifyResult verify_result;
191 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
192 ASSERT_NO_FATAL_FAILURE(
193 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
194 cronet_pb::CertVerificationCache cert_cache =
195 SerializeCertVerifierCache(verifier);
196 DCHECK_EQ(1, cert_cache.cert_entry_size());
197 DCHECK_EQ(1, cert_cache.cache_entry_size());
198
199 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
200 cronet_pb::CertVerificationCacheEntry* cache_entry =
201 cert_cache.mutable_cache_entry(i);
202 // Corrupt |request_params|.
203 cache_entry->clear_request_params();
204 }
205
206 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
207 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
208 }
209
210 // Corrupted |certificate| in |request_params| in the serialized data, should
211 // fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
212 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoCertificate) {
213 net::CertVerifyResult verify_result;
214 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
215 ASSERT_NO_FATAL_FAILURE(
216 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
217 cronet_pb::CertVerificationCache cert_cache =
218 SerializeCertVerifierCache(verifier);
219 DCHECK_EQ(1, cert_cache.cert_entry_size());
220 DCHECK_EQ(1, cert_cache.cache_entry_size());
221
222 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
223 cronet_pb::CertVerificationCacheEntry* cache_entry =
224 cert_cache.mutable_cache_entry(i);
225 cronet_pb::CertVerificationRequestParams* request_params =
226 cache_entry->mutable_request_params();
227 // Corrupt certificate.
228 request_params->clear_certificate();
229 }
230
231 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
232 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
233 }
234
235 // Corrupted |hostname| in |request_params| in the serialized data, should fail
236 // when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
237 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoHostname) {
238 net::CertVerifyResult verify_result;
239 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
240 ASSERT_NO_FATAL_FAILURE(
241 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
242 cronet_pb::CertVerificationCache cert_cache =
243 SerializeCertVerifierCache(verifier);
244 DCHECK_EQ(1, cert_cache.cert_entry_size());
245 DCHECK_EQ(1, cert_cache.cache_entry_size());
246
247 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
248 cronet_pb::CertVerificationCacheEntry* cache_entry =
249 cert_cache.mutable_cache_entry(i);
250 cronet_pb::CertVerificationRequestParams* request_params =
251 cache_entry->mutable_request_params();
252 // Corrupt hostname.
253 request_params->clear_hostname();
254 }
255
256 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
257 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
258 }
259
260 // Invalid |hostname| in |request_params| in the serialized data, should fail
261 // when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
262 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsEmptyHostname) {
263 net::CertVerifyResult verify_result;
264 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
265 ASSERT_NO_FATAL_FAILURE(
266 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
267 cronet_pb::CertVerificationCache cert_cache =
268 SerializeCertVerifierCache(verifier);
269 DCHECK_EQ(1, cert_cache.cert_entry_size());
270 DCHECK_EQ(1, cert_cache.cache_entry_size());
271
272 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
273 cronet_pb::CertVerificationCacheEntry* cache_entry =
274 cert_cache.mutable_cache_entry(i);
275 cronet_pb::CertVerificationRequestParams* request_params =
276 cache_entry->mutable_request_params();
277 // Set bogus hostname.
278 request_params->set_hostname("");
279 }
280
281 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
282 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
283 }
284
285 // Corrupted |flags| in |request_params| in the serialized data, should fail
286 // when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
287 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoFlags) {
288 net::CertVerifyResult verify_result;
289 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
290 ASSERT_NO_FATAL_FAILURE(
291 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
292 cronet_pb::CertVerificationCache cert_cache =
293 SerializeCertVerifierCache(verifier);
294 DCHECK_EQ(1, cert_cache.cert_entry_size());
295 DCHECK_EQ(1, cert_cache.cache_entry_size());
296
297 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
298 cronet_pb::CertVerificationCacheEntry* cache_entry =
299 cert_cache.mutable_cache_entry(i);
300 cronet_pb::CertVerificationRequestParams* request_params =
301 cache_entry->mutable_request_params();
302 // Corrupt flags.
303 request_params->clear_flags();
304 }
305
306 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
307 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
308 }
309
310 // Corrupted |ocsp_response| in |request_params| in the serialized data, should
311 // fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
312 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoOcspResponse) {
313 net::CertVerifyResult verify_result;
314 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
315 ASSERT_NO_FATAL_FAILURE(
316 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
317 cronet_pb::CertVerificationCache cert_cache =
318 SerializeCertVerifierCache(verifier);
319 DCHECK_EQ(1, cert_cache.cert_entry_size());
320 DCHECK_EQ(1, cert_cache.cache_entry_size());
321
322 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
323 cronet_pb::CertVerificationCacheEntry* cache_entry =
324 cert_cache.mutable_cache_entry(i);
325 cronet_pb::CertVerificationRequestParams* request_params =
326 cache_entry->mutable_request_params();
327 // Corrupt |ocsp_response|.
328 request_params->clear_ocsp_response();
329 }
330
331 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
332 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
333 }
334
335 // Empty certificate number in |request_params| in the serialized data, should
336 // fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
337 TEST(CertVerifierCachePersisterTest,
338 DeserializeRequestParamsCertificateNoCertNumbers) {
339 net::CertVerifyResult verify_result;
340 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
341 ASSERT_NO_FATAL_FAILURE(
342 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
343 cronet_pb::CertVerificationCache cert_cache =
344 SerializeCertVerifierCache(verifier);
345 DCHECK_EQ(1, cert_cache.cert_entry_size());
346 DCHECK_EQ(1, cert_cache.cache_entry_size());
347
348 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
349 cronet_pb::CertVerificationCacheEntry* cache_entry =
350 cert_cache.mutable_cache_entry(i);
351 cronet_pb::CertVerificationRequestParams* request_params =
352 cache_entry->mutable_request_params();
353 cronet_pb::CertVerificationCertificate* certificate =
354 request_params->mutable_certificate();
355 // Corrupt certificate number.
356 certificate->clear_cert_numbers();
357 }
358
359 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
360 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
361 }
362
363 // Invalid certificate number in |request_params| in the serialized data, should
364 // fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
365 TEST(CertVerifierCachePersisterTest,
366 DeserializeCorruptedRequestParamsCertNumbers) {
367 net::CertVerifyResult verify_result;
368 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
369 ASSERT_NO_FATAL_FAILURE(
370 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
371 cronet_pb::CertVerificationCache cert_cache =
372 SerializeCertVerifierCache(verifier);
373 DCHECK_EQ(1, cert_cache.cert_entry_size());
374 DCHECK_EQ(1, cert_cache.cache_entry_size());
375
376 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
377 cronet_pb::CertVerificationCacheEntry* cache_entry =
378 cert_cache.mutable_cache_entry(i);
379 cronet_pb::CertVerificationRequestParams* request_params =
380 cache_entry->mutable_request_params();
381 cronet_pb::CertVerificationCertificate* certificate =
382 request_params->mutable_certificate();
383 // Set bogus certificate number.
384 certificate->set_cert_numbers(0, 100);
385 }
386
387 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
388 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
389 }
390
391 // Corrupted certificate number in |additional_trust_anchors| of
392 // |request_params| in the serialized data, should fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
393 TEST(CertVerifierCachePersisterTest,
394 DeserializeRequestParamsCertificateNoTrustAnchors) {
395 net::CertificateList ca_cert_list = net::CreateCertificateListFromFile(
396 net::GetTestCertsDirectory(), "root_ca_cert.pem",
397 net::X509Certificate::FORMAT_AUTO);
398 ASSERT_EQ(1U, ca_cert_list.size());
399 scoped_refptr<net::X509Certificate> ca_cert(ca_cert_list[0]);
400
401 net::CertificateList cert_list = net::CreateCertificateListFromFile(
402 net::GetTestCertsDirectory(), "ok_cert.pem",
403 net::X509Certificate::FORMAT_AUTO);
404 ASSERT_EQ(1U, cert_list.size());
405 scoped_refptr<net::X509Certificate> cert(cert_list[0]);
406
407 // Now add the |ca_cert| to the |trust_anchors|, and verification should pass.
408 net::CertificateList trust_anchors;
409 trust_anchors.push_back(ca_cert);
410
411 int error;
412 net::CertVerifyResult verify_result;
413 net::TestCompletionCallback callback;
414 std::unique_ptr<net::CertVerifier::Request> request;
415
416 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
417 error = callback.GetResult(verifier.Verify(
418 net::CertVerifier::RequestParams(cert, "www.example.com", 0,
419 std::string(), trust_anchors),
420 nullptr, &verify_result, callback.callback(), &request,
421 net::BoundNetLog()));
422 EXPECT_TRUE(net::IsCertificateError(error));
Ryan Sleevi 2016/06/21 20:31:03 Why don't you use the VerifyCert() helper like you
ramant (doing other things) 2016/06/22 03:51:37 In this test, we are verifying with trust_anchors.
423
424 cronet_pb::CertVerificationCache cert_cache =
425 SerializeCertVerifierCache(verifier);
426 DCHECK_EQ(2, cert_cache.cert_entry_size());
427 DCHECK_EQ(1, cert_cache.cache_entry_size());
428
429 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
430 cronet_pb::CertVerificationCacheEntry* cache_entry =
431 cert_cache.mutable_cache_entry(i);
432 cronet_pb::CertVerificationRequestParams* request_params =
433 cache_entry->mutable_request_params();
434 for (int j = 0; j < request_params->additional_trust_anchors_size(); ++j) {
435 cronet_pb::CertVerificationCertificate* certificate =
436 request_params->mutable_additional_trust_anchors(j);
437 // Corrupt the certificate number in |additional_trust_anchors|.
438 certificate->clear_cert_numbers();
439 }
440 }
441
442 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
443 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
444 }
445
446 // Corrupted |cached_result| in the serialized data, should fail when
447 // deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
448 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCachedResult) {
449 net::CertVerifyResult verify_result;
450 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
451 ASSERT_NO_FATAL_FAILURE(
452 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
453 cronet_pb::CertVerificationCache cert_cache =
454 SerializeCertVerifierCache(verifier);
455 DCHECK_EQ(1, cert_cache.cert_entry_size());
456 DCHECK_EQ(1, cert_cache.cache_entry_size());
457
458 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
459 cronet_pb::CertVerificationCacheEntry* cache_entry =
460 cert_cache.mutable_cache_entry(i);
461 // Corrupt the |cached_result|.
462 cache_entry->clear_cached_result();
463 }
464
465 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
466 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
467 }
468
469 // Corrupted |error| in the serialized data, should fail when deserialized.
470 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoError) {
471 net::CertVerifyResult verify_result;
472 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
473 ASSERT_NO_FATAL_FAILURE(
474 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
475 cronet_pb::CertVerificationCache cert_cache =
476 SerializeCertVerifierCache(verifier);
477 DCHECK_EQ(1, cert_cache.cert_entry_size());
478 DCHECK_EQ(1, cert_cache.cache_entry_size());
479
480 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
481 cronet_pb::CertVerificationCacheEntry* cache_entry =
482 cert_cache.mutable_cache_entry(i);
483 cronet_pb::CertVerificationCachedResult* cached_result =
484 cache_entry->mutable_cached_result();
485 // Corrupt |error|.
486 cached_result->clear_error();
487 }
488
489 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
490 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
491 }
492
493 // Corrupted |result| (CertVerifyResult) in the serialized data, should fail
494 // when deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
495 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoResult) {
496 net::CertVerifyResult verify_result;
497 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
498 ASSERT_NO_FATAL_FAILURE(
499 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
500 cronet_pb::CertVerificationCache cert_cache =
501 SerializeCertVerifierCache(verifier);
502 DCHECK_EQ(1, cert_cache.cert_entry_size());
503 DCHECK_EQ(1, cert_cache.cache_entry_size());
504
505 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
506 cronet_pb::CertVerificationCacheEntry* cache_entry =
507 cert_cache.mutable_cache_entry(i);
508 cronet_pb::CertVerificationCachedResult* cached_result =
509 cache_entry->mutable_cached_result();
510 // Corrupt the |result|.
511 cached_result->clear_result();
512 }
513
514 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
515 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
516 }
517
518 // Corrupted |cert_status| in the serialized data, should fail when
519 // deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
520 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoCertStatus) {
521 net::CertVerifyResult verify_result;
522 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
523 ASSERT_NO_FATAL_FAILURE(
524 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
525 cronet_pb::CertVerificationCache cert_cache =
526 SerializeCertVerifierCache(verifier);
527 DCHECK_EQ(1, cert_cache.cert_entry_size());
528 DCHECK_EQ(1, cert_cache.cache_entry_size());
529
530 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
531 cronet_pb::CertVerificationCacheEntry* cache_entry =
532 cert_cache.mutable_cache_entry(i);
533 cronet_pb::CertVerificationCachedResult* cached_result =
534 cache_entry->mutable_cached_result();
535 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
536 // Corrupt the |cert_status|.
537 result->clear_cert_status();
538 }
539
540 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
541 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
542 }
543
544 // Corrupted |verification_time| in the serialized data, should fail when
545 // deserialized.
Ryan Sleevi 2016/06/21 20:31:02 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
546 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoVerifiedCert) {
547 net::CertVerifyResult verify_result;
548 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
549 ASSERT_NO_FATAL_FAILURE(
550 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
551 cronet_pb::CertVerificationCache cert_cache =
552 SerializeCertVerifierCache(verifier);
553 DCHECK_EQ(1, cert_cache.cert_entry_size());
554 DCHECK_EQ(1, cert_cache.cache_entry_size());
555
556 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
557 cronet_pb::CertVerificationCacheEntry* cache_entry =
558 cert_cache.mutable_cache_entry(i);
559 cronet_pb::CertVerificationCachedResult* cached_result =
560 cache_entry->mutable_cached_result();
561 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
562 // Corrupt the |verified_cert|.
563 result->clear_verified_cert();
564 }
565
566 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
567 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
568 }
569
570 // Corrupted |verified_cert| in the serialized data, should fail when
571 // deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
572 TEST(CertVerifierCachePersisterTest,
573 DeserializeCachedResultNoVerifiedCertNumber) {
574 net::CertVerifyResult verify_result;
575 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
576 ASSERT_NO_FATAL_FAILURE(
577 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
578 cronet_pb::CertVerificationCache cert_cache =
579 SerializeCertVerifierCache(verifier);
580 DCHECK_EQ(1, cert_cache.cert_entry_size());
581 DCHECK_EQ(1, cert_cache.cache_entry_size());
582
583 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
584 cronet_pb::CertVerificationCacheEntry* cache_entry =
585 cert_cache.mutable_cache_entry(i);
586 cronet_pb::CertVerificationCachedResult* cached_result =
587 cache_entry->mutable_cached_result();
588 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
589 result->clear_verified_cert();
590 // Corrupt the verified cert's certificate number.
591 cronet_pb::CertVerificationCertificate* certificate =
592 result->mutable_verified_cert();
593 certificate->clear_cert_numbers();
594 }
595
596 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
597 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
598 }
599
600 // Invalid certificate number of |verified_cert| in the serialized data,
601 // should fail when deserialized.
Ryan Sleevi 2016/06/21 20:31:04 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
602 TEST(CertVerifierCachePersisterTest,
603 DeserializeCorruptedCachedResultVerifiedCertNumber) {
604 net::CertVerifyResult verify_result;
605 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
606 ASSERT_NO_FATAL_FAILURE(
607 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
608 cronet_pb::CertVerificationCache cert_cache =
609 SerializeCertVerifierCache(verifier);
610 DCHECK_EQ(1, cert_cache.cert_entry_size());
611 DCHECK_EQ(1, cert_cache.cache_entry_size());
612
613 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
614 cronet_pb::CertVerificationCacheEntry* cache_entry =
615 cert_cache.mutable_cache_entry(i);
616 cronet_pb::CertVerificationCachedResult* cached_result =
617 cache_entry->mutable_cached_result();
618 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
619 cronet_pb::CertVerificationCertificate* certificate =
620 result->mutable_verified_cert();
621 // Set bogus certificate number for |verified_cert|.
622 certificate->set_cert_numbers(0, 100);
623 }
624
625 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
626 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
627 }
628
629 // Corrupted |public_key_hashes| in the serialized data, should fail when
630 // deserialized.
Ryan Sleevi 2016/06/21 20:31:03 HERE1
ramant (doing other things) 2016/06/22 03:51:37 Done.
631 TEST(CertVerifierCachePersisterTest,
632 DeserializeCorruptedCachedResultPublicKeyHashes) {
633 net::CertVerifyResult verify_result;
634 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
635 ASSERT_NO_FATAL_FAILURE(
636 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
637 cronet_pb::CertVerificationCache cert_cache =
638 SerializeCertVerifierCache(verifier);
639 DCHECK_EQ(1, cert_cache.cert_entry_size());
640 DCHECK_EQ(1, cert_cache.cache_entry_size());
641
642 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
643 cronet_pb::CertVerificationCacheEntry* cache_entry =
644 cert_cache.mutable_cache_entry(i);
645 cronet_pb::CertVerificationCachedResult* cached_result =
646 cache_entry->mutable_cached_result();
647 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
648 // Set bogus |public_key_hashes|.
649 result->add_public_key_hashes("");
650 }
651
652 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
653 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
654 }
655
656 // Corrupted |verification_time| in the serialized data, should fail when
657 // deserialized.
Ryan Sleevi 2016/06/21 20:31:02 HERE1
ramant (doing other things) 2016/06/22 03:51:36 Done.
658 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedVerificationTime) {
659 net::CertVerifyResult verify_result;
660 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
661 ASSERT_NO_FATAL_FAILURE(
662 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
663 cronet_pb::CertVerificationCache cert_cache =
664 SerializeCertVerifierCache(verifier);
665 DCHECK_EQ(1, cert_cache.cert_entry_size());
666 DCHECK_EQ(1, cert_cache.cache_entry_size());
667
668 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
669 cronet_pb::CertVerificationCacheEntry* cache_entry =
670 cert_cache.mutable_cache_entry(i);
671 // Corrupt |verification_time|.
672 cache_entry->clear_verification_time();
673 }
674
675 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
676 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
677 }
678
679 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698