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

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: Rebase TOT 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));
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 verifyier1_result1;
Ryan Sleevi 2016/06/21 01:22:10 spelling: verifier1_result
ramant (doing other things) 2016/06/21 16:52:02 Done.
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, &verifyier1_result1, callback.callback(), &request,
100 net::BoundNetLog()));
101 ASSERT_TRUE(net::IsCertificateError(error));
102
103 // Verify www.example2.com host's certificate.
Ryan Sleevi 2016/06/21 01:22:10 example.com is a special (reserved) name, but exam
ramant (doing other things) 2016/06/21 16:52:02 Done.
104 std::string example2_hostname("www.example2.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.
132 ASSERT_TRUE(net::IsCertificateError(error));
133 ASSERT_FALSE(request);
134 EXPECT_EQ(verifier2_result1.cert_status, verifyier1_result1.cert_status);
135
136 // Verify the cert for www.example2.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,
142 net::BoundNetLog()));
143 // Synchronous completion and verify it is same as serialized data for
144 // www.example2.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 // Corrupted |cert_entry| in the serialized data, should fail when deserialized.
Ryan Sleevi 2016/06/21 01:22:10 Grammar: This is not a properly constructed senten
ramant (doing other things) 2016/06/21 16:52:02 Done.
151 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCerts) {
152 net::CertVerifyResult verify_result;
153 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
154 ASSERT_NO_FATAL_FAILURE(
155 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
156 cronet_pb::CertVerificationCache cert_cache =
157 SerializeCertVerifierCache(verifier);
158 DCHECK_EQ(1, cert_cache.cert_entry_size());
159 DCHECK_EQ(1, cert_cache.cache_entry_size());
160
161 cert_cache.clear_cert_entry();
162
163 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
164 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
165 }
166
167 // Corrupted |cache_entry| in the serialized data, should fail when
168 // deserialized.
169 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCacheEntry) {
170 net::CertVerifyResult verify_result;
171 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
172 ASSERT_NO_FATAL_FAILURE(
173 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
174 cronet_pb::CertVerificationCache cert_cache =
175 SerializeCertVerifierCache(verifier);
176 DCHECK_EQ(1, cert_cache.cert_entry_size());
177 DCHECK_EQ(1, cert_cache.cache_entry_size());
178
179 // Corrupt |cache_entry|.
180 cert_cache.clear_cache_entry();
181
182 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
183 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
184 }
185
186 // Corrupted |request_params| in the serialized data, should fail when
187 // deserialized.
188 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedRequestParams) {
189 net::CertVerifyResult verify_result;
190 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
191 ASSERT_NO_FATAL_FAILURE(
192 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
193 cronet_pb::CertVerificationCache cert_cache =
194 SerializeCertVerifierCache(verifier);
195 DCHECK_EQ(1, cert_cache.cert_entry_size());
196 DCHECK_EQ(1, cert_cache.cache_entry_size());
197
198 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
199 cronet_pb::CertVerificationCacheEntry* cache_entry =
200 cert_cache.mutable_cache_entry(i);
201 // Corrupt |request_params|.
202 cache_entry->clear_request_params();
203 }
204
205 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
206 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
207 }
208
209 // Corrupted |certificate| in |request_params| in the serialized data, should
210 // fail when deserialized.
211 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoCertificate) {
212 net::CertVerifyResult verify_result;
213 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
214 ASSERT_NO_FATAL_FAILURE(
215 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
216 cronet_pb::CertVerificationCache cert_cache =
217 SerializeCertVerifierCache(verifier);
218 DCHECK_EQ(1, cert_cache.cert_entry_size());
219 DCHECK_EQ(1, cert_cache.cache_entry_size());
220
221 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
222 cronet_pb::CertVerificationCacheEntry* cache_entry =
223 cert_cache.mutable_cache_entry(i);
224 cronet_pb::CertVerificationRequestParams* request_params =
225 cache_entry->mutable_request_params();
226 // Corrupt certificate.
227 request_params->clear_certificate();
228 }
229
230 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
231 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
232 }
233
234 // Corrupted |hostname| in |request_params| in the serialized data, should fail
235 // when deserialized.
236 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoHostname) {
237 net::CertVerifyResult verify_result;
238 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
239 ASSERT_NO_FATAL_FAILURE(
240 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
241 cronet_pb::CertVerificationCache cert_cache =
242 SerializeCertVerifierCache(verifier);
243 DCHECK_EQ(1, cert_cache.cert_entry_size());
244 DCHECK_EQ(1, cert_cache.cache_entry_size());
245
246 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
247 cronet_pb::CertVerificationCacheEntry* cache_entry =
248 cert_cache.mutable_cache_entry(i);
249 cronet_pb::CertVerificationRequestParams* request_params =
250 cache_entry->mutable_request_params();
251 // Corrupt hostname.
252 request_params->clear_hostname();
253 }
254
255 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
256 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
257 }
258
259 // Invalid |hostname| in |request_params| in the serialized data, should fail
260 // when deserialized.
261 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsEmptyHostname) {
262 net::CertVerifyResult verify_result;
263 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
264 ASSERT_NO_FATAL_FAILURE(
265 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
266 cronet_pb::CertVerificationCache cert_cache =
267 SerializeCertVerifierCache(verifier);
268 DCHECK_EQ(1, cert_cache.cert_entry_size());
269 DCHECK_EQ(1, cert_cache.cache_entry_size());
270
271 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
272 cronet_pb::CertVerificationCacheEntry* cache_entry =
273 cert_cache.mutable_cache_entry(i);
274 cronet_pb::CertVerificationRequestParams* request_params =
275 cache_entry->mutable_request_params();
276 // Set bogus hostname.
277 request_params->set_hostname("");
Ryan Sleevi 2016/06/21 01:22:10 How is this different than NoHostname?
ramant (doing other things) 2016/06/21 16:52:02 One checks request_params.has_hostname() and the o
278 }
279
280 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
281 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
282 }
283
284 // Corrupted |flags| in |request_params| in the serialized data, should fail
285 // when deserialized.
286 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoFlags) {
287 net::CertVerifyResult verify_result;
288 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
289 ASSERT_NO_FATAL_FAILURE(
290 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
291 cronet_pb::CertVerificationCache cert_cache =
292 SerializeCertVerifierCache(verifier);
293 DCHECK_EQ(1, cert_cache.cert_entry_size());
294 DCHECK_EQ(1, cert_cache.cache_entry_size());
295
296 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
297 cronet_pb::CertVerificationCacheEntry* cache_entry =
298 cert_cache.mutable_cache_entry(i);
299 cronet_pb::CertVerificationRequestParams* request_params =
300 cache_entry->mutable_request_params();
301 // Corrupt flags.
302 request_params->clear_flags();
303 }
304
305 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
306 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
307 }
308
309 // Corrupted |ocsp_response| in |request_params| in the serialized data, should
310 // fail when deserialized.
311 TEST(CertVerifierCachePersisterTest, DeserializeRequestParamsNoOcspResponse) {
312 net::CertVerifyResult verify_result;
313 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
314 ASSERT_NO_FATAL_FAILURE(
315 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
316 cronet_pb::CertVerificationCache cert_cache =
317 SerializeCertVerifierCache(verifier);
318 DCHECK_EQ(1, cert_cache.cert_entry_size());
319 DCHECK_EQ(1, cert_cache.cache_entry_size());
320
321 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
322 cronet_pb::CertVerificationCacheEntry* cache_entry =
323 cert_cache.mutable_cache_entry(i);
324 cronet_pb::CertVerificationRequestParams* request_params =
325 cache_entry->mutable_request_params();
326 // Corrupt |ocsp_response|.
327 request_params->clear_ocsp_response();
328 }
329
330 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
331 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
332 }
333
334 // Empty certificate number in |request_params| in the serialized data, should
335 // fail when deserialized.
336 TEST(CertVerifierCachePersisterTest,
337 DeserializeRequestParamsCertificateNoCertNumbers) {
338 net::CertVerifyResult verify_result;
339 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
340 ASSERT_NO_FATAL_FAILURE(
341 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
342 cronet_pb::CertVerificationCache cert_cache =
343 SerializeCertVerifierCache(verifier);
344 DCHECK_EQ(1, cert_cache.cert_entry_size());
345 DCHECK_EQ(1, cert_cache.cache_entry_size());
346
347 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
348 cronet_pb::CertVerificationCacheEntry* cache_entry =
349 cert_cache.mutable_cache_entry(i);
350 cronet_pb::CertVerificationRequestParams* request_params =
351 cache_entry->mutable_request_params();
352 cronet_pb::CertVerificationCertificate* certificate =
353 request_params->mutable_certificate();
354 // Corrupt certificate number.
355 certificate->clear_cert_numbers();
356 }
357
358 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
359 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
360 }
361
362 // Invalid certificate number in |request_params| in the serialized data, should
363 // fail when deserialized.
364 TEST(CertVerifierCachePersisterTest,
365 DeserializeCorruptedRequestParamsCertNumbers) {
366 net::CertVerifyResult verify_result;
367 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
368 ASSERT_NO_FATAL_FAILURE(
369 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
370 cronet_pb::CertVerificationCache cert_cache =
371 SerializeCertVerifierCache(verifier);
372 DCHECK_EQ(1, cert_cache.cert_entry_size());
373 DCHECK_EQ(1, cert_cache.cache_entry_size());
374
375 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
376 cronet_pb::CertVerificationCacheEntry* cache_entry =
377 cert_cache.mutable_cache_entry(i);
378 cronet_pb::CertVerificationRequestParams* request_params =
379 cache_entry->mutable_request_params();
380 cronet_pb::CertVerificationCertificate* certificate =
381 request_params->mutable_certificate();
382 // Set bogus certificate number.
383 certificate->set_cert_numbers(0, 100);
384 }
385
386 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
387 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
388 }
389
390 // Corrupted certificate number in |additional_trust_anchors| of
391 // |request_params| in the serialized data, should fail when deserialized.
392 TEST(CertVerifierCachePersisterTest,
393 DeserializeRequestParamsCertificateNoTrustAnchors) {
394 net::CertificateList ca_cert_list = net::CreateCertificateListFromFile(
395 net::GetTestCertsDirectory(), "root_ca_cert.pem",
396 net::X509Certificate::FORMAT_AUTO);
397 ASSERT_EQ(1U, ca_cert_list.size());
398 scoped_refptr<net::X509Certificate> ca_cert(ca_cert_list[0]);
399
400 net::CertificateList cert_list = net::CreateCertificateListFromFile(
401 net::GetTestCertsDirectory(), "ok_cert.pem",
402 net::X509Certificate::FORMAT_AUTO);
403 ASSERT_EQ(1U, cert_list.size());
404 scoped_refptr<net::X509Certificate> cert(cert_list[0]);
405
406 // Now add the |ca_cert| to the |trust_anchors|, and verification should pass.
407 net::CertificateList trust_anchors;
408 trust_anchors.push_back(ca_cert);
409
410 int error;
411 net::CertVerifyResult verify_result;
412 net::TestCompletionCallback callback;
413 std::unique_ptr<net::CertVerifier::Request> request;
414
415 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
416 error = callback.GetResult(verifier.Verify(
417 net::CertVerifier::RequestParams(cert, "www.example.com", 0,
418 std::string(), trust_anchors),
419 nullptr, &verify_result, callback.callback(), &request,
420 net::BoundNetLog()));
421 EXPECT_TRUE(net::IsCertificateError(error));
422
423 cronet_pb::CertVerificationCache cert_cache =
424 SerializeCertVerifierCache(verifier);
425 DCHECK_EQ(2, cert_cache.cert_entry_size());
426 DCHECK_EQ(1, cert_cache.cache_entry_size());
427
428 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
429 cronet_pb::CertVerificationCacheEntry* cache_entry =
430 cert_cache.mutable_cache_entry(i);
431 cronet_pb::CertVerificationRequestParams* request_params =
432 cache_entry->mutable_request_params();
433 for (int j = 0; j < request_params->additional_trust_anchors_size(); ++j) {
434 cronet_pb::CertVerificationCertificate* certificate =
435 request_params->mutable_additional_trust_anchors(j);
436 // Corrupt the certificate number in |additional_trust_anchors|.
437 certificate->clear_cert_numbers();
438 }
439 }
440
441 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
442 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
443 }
444
445 // Corrupted |cached_result| in the serialized data, should fail when
446 // deserialized.
447 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedCachedResult) {
448 net::CertVerifyResult verify_result;
449 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
450 ASSERT_NO_FATAL_FAILURE(
451 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
452 cronet_pb::CertVerificationCache cert_cache =
453 SerializeCertVerifierCache(verifier);
454 DCHECK_EQ(1, cert_cache.cert_entry_size());
455 DCHECK_EQ(1, cert_cache.cache_entry_size());
456
457 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
458 cronet_pb::CertVerificationCacheEntry* cache_entry =
459 cert_cache.mutable_cache_entry(i);
460 // Corrupt the |cached_result|.
461 cache_entry->clear_cached_result();
462 }
463
464 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
465 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
466 }
467
468 // Corrupted |error| in the serialized data, should fail when deserialized.
469 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoError) {
470 net::CertVerifyResult verify_result;
471 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
472 ASSERT_NO_FATAL_FAILURE(
473 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
474 cronet_pb::CertVerificationCache cert_cache =
475 SerializeCertVerifierCache(verifier);
476 DCHECK_EQ(1, cert_cache.cert_entry_size());
477 DCHECK_EQ(1, cert_cache.cache_entry_size());
478
479 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
480 cronet_pb::CertVerificationCacheEntry* cache_entry =
481 cert_cache.mutable_cache_entry(i);
482 cronet_pb::CertVerificationCachedResult* cached_result =
483 cache_entry->mutable_cached_result();
484 // Corrupt |error|.
485 cached_result->clear_error();
486 }
487
488 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
489 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
490 }
491
492 // Corrupted |result| (CertVerifyResult) in the serialized data, should fail
493 // when deserialized.
494 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoResult) {
495 net::CertVerifyResult verify_result;
496 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
497 ASSERT_NO_FATAL_FAILURE(
498 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
499 cronet_pb::CertVerificationCache cert_cache =
500 SerializeCertVerifierCache(verifier);
501 DCHECK_EQ(1, cert_cache.cert_entry_size());
502 DCHECK_EQ(1, cert_cache.cache_entry_size());
503
504 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
505 cronet_pb::CertVerificationCacheEntry* cache_entry =
506 cert_cache.mutable_cache_entry(i);
507 cronet_pb::CertVerificationCachedResult* cached_result =
508 cache_entry->mutable_cached_result();
509 // Corrupt the |result|.
510 cached_result->clear_result();
511 }
512
513 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
514 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
515 }
516
517 // Corrupted |cert_status| in the serialized data, should fail when
518 // deserialized.
519 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoCertStatus) {
520 net::CertVerifyResult verify_result;
521 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
522 ASSERT_NO_FATAL_FAILURE(
523 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
524 cronet_pb::CertVerificationCache cert_cache =
525 SerializeCertVerifierCache(verifier);
526 DCHECK_EQ(1, cert_cache.cert_entry_size());
527 DCHECK_EQ(1, cert_cache.cache_entry_size());
528
529 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
530 cronet_pb::CertVerificationCacheEntry* cache_entry =
531 cert_cache.mutable_cache_entry(i);
532 cronet_pb::CertVerificationCachedResult* cached_result =
533 cache_entry->mutable_cached_result();
534 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
535 // Corrupt the |cert_status|.
536 result->clear_cert_status();
537 }
538
539 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
540 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
541 }
542
543 // Corrupted |verification_time| in the serialized data, should fail when
544 // deserialized.
545 TEST(CertVerifierCachePersisterTest, DeserializeCachedResultNoVerifiedCert) {
546 net::CertVerifyResult verify_result;
547 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
548 ASSERT_NO_FATAL_FAILURE(
549 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
550 cronet_pb::CertVerificationCache cert_cache =
551 SerializeCertVerifierCache(verifier);
552 DCHECK_EQ(1, cert_cache.cert_entry_size());
553 DCHECK_EQ(1, cert_cache.cache_entry_size());
554
555 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
556 cronet_pb::CertVerificationCacheEntry* cache_entry =
557 cert_cache.mutable_cache_entry(i);
558 cronet_pb::CertVerificationCachedResult* cached_result =
559 cache_entry->mutable_cached_result();
560 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
561 // Corrupt the |verified_cert|.
562 result->clear_verified_cert();
563 }
564
565 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
566 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
567 }
568
569 // Corrupted |verified_cert| in the serialized data, should fail when
570 // deserialized.
571 TEST(CertVerifierCachePersisterTest,
572 DeserializeCachedResultNoVerifiedCertNumber) {
573 net::CertVerifyResult verify_result;
574 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
575 ASSERT_NO_FATAL_FAILURE(
576 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
577 cronet_pb::CertVerificationCache cert_cache =
578 SerializeCertVerifierCache(verifier);
579 DCHECK_EQ(1, cert_cache.cert_entry_size());
580 DCHECK_EQ(1, cert_cache.cache_entry_size());
581
582 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
583 cronet_pb::CertVerificationCacheEntry* cache_entry =
584 cert_cache.mutable_cache_entry(i);
585 cronet_pb::CertVerificationCachedResult* cached_result =
586 cache_entry->mutable_cached_result();
587 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
588 result->clear_verified_cert();
589 // Corrupt the verified cert's certificate number.
590 cronet_pb::CertVerificationCertificate* certificate =
591 result->mutable_verified_cert();
592 certificate->clear_cert_numbers();
593 }
594
595 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
596 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
597 }
598
599 // Invalid certificate number of |verified_cert| in the serialized data,
600 // should fail when deserialized.
601 TEST(CertVerifierCachePersisterTest,
602 DeserializeCorruptedCachedResultVerifiedCertNumber) {
603 net::CertVerifyResult verify_result;
604 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
605 ASSERT_NO_FATAL_FAILURE(
606 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
607 cronet_pb::CertVerificationCache cert_cache =
608 SerializeCertVerifierCache(verifier);
609 DCHECK_EQ(1, cert_cache.cert_entry_size());
610 DCHECK_EQ(1, cert_cache.cache_entry_size());
611
612 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
613 cronet_pb::CertVerificationCacheEntry* cache_entry =
614 cert_cache.mutable_cache_entry(i);
615 cronet_pb::CertVerificationCachedResult* cached_result =
616 cache_entry->mutable_cached_result();
617 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
618 cronet_pb::CertVerificationCertificate* certificate =
619 result->mutable_verified_cert();
620 // Set bogus certificate number for |verified_cert|.
621 certificate->set_cert_numbers(0, 100);
622 }
623
624 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
625 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
626 }
627
628 // Corrupted |public_key_hashes| in the serialized data, should fail when
629 // deserialized.
630 TEST(CertVerifierCachePersisterTest,
631 DeserializeCorruptedCachedResultPublicKeyHashes) {
632 net::CertVerifyResult verify_result;
633 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
634 ASSERT_NO_FATAL_FAILURE(
635 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
636 cronet_pb::CertVerificationCache cert_cache =
637 SerializeCertVerifierCache(verifier);
638 DCHECK_EQ(1, cert_cache.cert_entry_size());
639 DCHECK_EQ(1, cert_cache.cache_entry_size());
640
641 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
642 cronet_pb::CertVerificationCacheEntry* cache_entry =
643 cert_cache.mutable_cache_entry(i);
644 cronet_pb::CertVerificationCachedResult* cached_result =
645 cache_entry->mutable_cached_result();
646 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
647 // Set bogus |public_key_hashes|.
648 result->add_public_key_hashes("");
649 }
650
651 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
652 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
653 }
654
655 // Corrupted |verification_time| in the serialized data, should fail when
656 // deserialized.
657 TEST(CertVerifierCachePersisterTest, DeserializeCorruptedVerificationTime) {
658 net::CertVerifyResult verify_result;
659 net::CachingCertVerifier verifier(base::MakeUnique<net::MockCertVerifier>());
660 ASSERT_NO_FATAL_FAILURE(
661 VerifyCert("ok_cert.pem", "www.example.com", &verifier, &verify_result));
662 cronet_pb::CertVerificationCache cert_cache =
663 SerializeCertVerifierCache(verifier);
664 DCHECK_EQ(1, cert_cache.cert_entry_size());
665 DCHECK_EQ(1, cert_cache.cache_entry_size());
666
667 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
668 cronet_pb::CertVerificationCacheEntry* cache_entry =
669 cert_cache.mutable_cache_entry(i);
670 // Corrupt |verification_time|.
671 cache_entry->clear_verification_time();
672 }
673
674 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
675 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
676 }
677
678 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698