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

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: delete //net/data/ssl/... 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 int VerifyCert(scoped_refptr<net::X509Certificate> certificate,
Ryan Sleevi 2016/06/15 23:31:32 Either pass as raw pointer (X509Certificate*) or s
ramant (doing other things) 2016/06/17 02:45:15 Thanks. Missed it. Done.
31 const std::string& hostname,
32 net::CachingCertVerifier* verifier,
33 net::CertVerifyResult* verify_result) {
34 net::TestCompletionCallback callback;
35 std::unique_ptr<net::CertVerifier::Request> request;
36
37 return callback.GetResult(verifier->Verify(
38 net::CertVerifier::RequestParams(certificate, hostname, 0, std::string(),
39 net::CertificateList()),
40 nullptr, verify_result, callback.callback(), &request,
41 net::BoundNetLog()));
42 }
43
44 cronet_pb::CertVerificationCache VerifyAndSerializeCert(
45 const std::string& cert_name,
46 const std::string& hostname,
47 net::CachingCertVerifier* verifier,
48 net::CertVerifyResult* verify_result) {
49 // Set up server certs.
50 scoped_refptr<net::X509Certificate> cert(
51 net::ImportCertFromFile(net::GetTestCertsDirectory(), cert_name));
52 EXPECT_TRUE(cert.get());
Ryan Sleevi 2016/06/15 23:31:33 This will crash the test if it's false, so you're
Ryan Sleevi 2016/06/15 23:31:33 STYLE: Don't use .get() for boolean comparisons.
ramant (doing other things) 2016/06/17 02:45:14 Done.
ramant (doing other things) 2016/06/17 02:45:15 Done.
53
54 int error = VerifyCert(cert, hostname, verifier, verify_result);
55 EXPECT_TRUE(net::IsCertificateError(error));
Ryan Sleevi 2016/06/15 23:31:33 Ditto about this doing nothing
ramant (doing other things) 2016/06/17 02:45:15 Done.
56
57 cronet_pb::CertVerificationCache cert_cache =
58 SerializeCertVerifierCache(*verifier);
59 DCHECK_EQ(1, cert_cache.cert_entry_size());
60 DCHECK_EQ(1, cert_cache.cache_entry_size());
Ryan Sleevi 2016/06/15 23:31:32 Don't DCHECK in tests. That crashes the test. My
ramant (doing other things) 2016/06/17 02:45:14 Done.
61 return cert_cache;
62 }
63
64 } // namespace
65
66 class CertVerifierCachePersisterTest : public ::testing::Test {
67 public:
68 CertVerifierCachePersisterTest()
69 : verifier_(base::MakeUnique<net::MockCertVerifier>()) {}
70 ~CertVerifierCachePersisterTest() override {}
71
72 protected:
73 net::CachingCertVerifier verifier_;
Ryan Sleevi 2016/06/15 23:31:32 This doesn't really need to be a test harness.
ramant (doing other things) 2016/06/17 02:45:15 Done.
74 };
75
76 TEST_F(CertVerifierCachePersisterTest, RestoreEmptyData) {
77 // Restoring empty data should fail.
78 cronet_pb::CertVerificationCache cert_cache;
79 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier_));
80 }
81
82 TEST_F(CertVerifierCachePersisterTest, SerializeCache) {
83 net::CertVerifyResult verify_result;
84 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
85 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
86 }
87
88 TEST_F(CertVerifierCachePersisterTest, RestoreExistingEntry) {
89 net::CertVerifyResult verify_result;
90 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
91 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
92
93 // Restore the cache data for an existing entry shouldn't fail.
Ryan Sleevi 2016/06/15 23:31:33 GRAMMAR: Restoring? GRAMMAR: Avoid double negative
ramant (doing other things) 2016/06/17 02:45:15 Done.
94 EXPECT_TRUE(DeserializeCertVerifierCache(cert_cache, &verifier_));
Ryan Sleevi 2016/06/15 23:31:32 This is unclear to me why this test exists.
ramant (doing other things) 2016/06/17 02:45:14 My intention was to test if cert verifier cache al
95 }
96
97 TEST_F(CertVerifierCachePersisterTest, RestoreDataIntoNewVerifier) {
98 scoped_refptr<net::X509Certificate> ok_cert(
99 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"));
100 ASSERT_NE(static_cast<net::X509Certificate*>(NULL), ok_cert.get());
Ryan Sleevi 2016/06/15 23:31:32 STYLE: Don't do this. ASSERT_TRUE(ok_cert);
ramant (doing other things) 2016/06/17 02:45:15 Done.
101
102 int error;
103 std::string example_hostname("www.example.com");
104 net::CertVerifyResult verify_result;
105 net::TestCompletionCallback callback;
106 std::unique_ptr<net::CertVerifier::Request> request;
107
108 error = callback.GetResult(verifier_.Verify(
109 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
110 std::string(), net::CertificateList()),
111 nullptr, &verify_result, callback.callback(), &request,
112 net::BoundNetLog()));
113 ASSERT_TRUE(net::IsCertificateError(error));
114
115 cronet_pb::CertVerificationCache cert_cache =
116 SerializeCertVerifierCache(verifier_);
117 DCHECK_EQ(1, cert_cache.cert_entry_size());
118 DCHECK_EQ(1, cert_cache.cache_entry_size());
119
120 // Create a new Verifier and restoring the data into it should succeed.
Ryan Sleevi 2016/06/15 23:31:32 Perhaps this comment belongs on line 96 instead
ramant (doing other things) 2016/06/17 02:45:15 Done.
121 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
122 EXPECT_TRUE(DeserializeCertVerifierCache(cert_cache, &verifier2));
123
124 net::CertVerifyResult verify_result2;
125 error = callback.GetResult(verifier2.Verify(
126 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
127 std::string(), net::CertificateList()),
128 nullptr, &verify_result2, callback.callback(), &request,
129 net::BoundNetLog()));
130 // Synchronous completion and verify it is same as serialized data.
131 ASSERT_NE(net::ERR_IO_PENDING, error);
Ryan Sleevi 2016/06/15 23:31:33 You're calling .GetResult (line 125), so it's impo
ramant (doing other things) 2016/06/17 02:45:15 Done.
132 ASSERT_TRUE(net::IsCertificateError(error));
133 ASSERT_FALSE(request);
134 EXPECT_EQ(verify_result2.cert_status, verify_result.cert_status);
135 }
136
137 TEST_F(CertVerifierCachePersisterTest, RestoreMultipleEntriesIntoNewVerifier) {
Ryan Sleevi 2016/06/15 23:31:32 Why isn't this combined into the previous test?
ramant (doing other things) 2016/06/17 02:45:15 Done.
138 scoped_refptr<net::X509Certificate> ok_cert(
139 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"));
140 ASSERT_NE(static_cast<net::X509Certificate*>(NULL), ok_cert.get());
141
142 const scoped_refptr<net::X509Certificate> root_cert =
143 net::ImportCertFromFile(net::GetTestCertsDirectory(), "root_ca_cert.pem");
144 ASSERT_TRUE(root_cert.get());
145
146 // Create a certificate that contains both a leaf and an intermediate/root.
147 net::X509Certificate::OSCertHandles chain;
148 chain.push_back(root_cert->os_cert_handle());
149 const scoped_refptr<net::X509Certificate> combined_cert =
150 net::X509Certificate::CreateFromHandle(ok_cert->os_cert_handle(), chain);
151 ASSERT_TRUE(combined_cert.get());
152
153 int error;
154 net::TestCompletionCallback callback;
155 std::unique_ptr<net::CertVerifier::Request> request;
156
157 // Verify www.example.com host's certificate.
158 std::string example_hostname("www.example.com");
159 net::CertVerifyResult verifyier1_result1;
160 error = callback.GetResult(verifier_.Verify(
161 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
162 std::string(), net::CertificateList()),
163 nullptr, &verifyier1_result1, callback.callback(), &request,
164 net::BoundNetLog()));
165 ASSERT_TRUE(net::IsCertificateError(error));
166
167 // Verify www.example2.com host's certificate.
168 std::string example2_hostname("www.example2.com");
169 net::CertVerifyResult verifier1_result2;
170 error = callback.GetResult(verifier_.Verify(
171 net::CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
172 std::string(), net::CertificateList()),
173 nullptr, &verifier1_result2, callback.callback(), &request,
174 net::BoundNetLog()));
175 ASSERT_TRUE(net::IsCertificateError(error));
176
177 cronet_pb::CertVerificationCache cert_cache =
178 SerializeCertVerifierCache(verifier_);
179 DCHECK_EQ(2, cert_cache.cert_entry_size());
180 DCHECK_EQ(2, cert_cache.cache_entry_size());
181
182 // Create a new Verifier and restoring the data into it should succeed.
183 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
184
185 // Populate |verifier2|'s cache.
186 EXPECT_TRUE(DeserializeCertVerifierCache(cert_cache, &verifier2));
187
188 // Verify the cert for www.example.com with |verifier2|.
189 net::CertVerifyResult verifier2_result1;
190 error = callback.GetResult(verifier2.Verify(
191 net::CertVerifier::RequestParams(ok_cert, example_hostname, 0,
192 std::string(), net::CertificateList()),
193 nullptr, &verifier2_result1, callback.callback(), &request,
194 net::BoundNetLog()));
195 // Synchronous completion and verify it is same as serialized data for
196 // www.example.com.
197 ASSERT_NE(net::ERR_IO_PENDING, error);
198 ASSERT_TRUE(net::IsCertificateError(error));
199 ASSERT_FALSE(request);
200 EXPECT_EQ(verifier2_result1.cert_status, verifyier1_result1.cert_status);
201
202 // Verify the cert for www.example2.com with |verifier2|.
203 net::CertVerifyResult verifier2_result2;
204 error = callback.GetResult(verifier2.Verify(
205 net::CertVerifier::RequestParams(combined_cert, example2_hostname, 0,
206 std::string(), net::CertificateList()),
207 nullptr, &verifier2_result2, callback.callback(), &request,
208 net::BoundNetLog()));
209 // Synchronous completion and verify it is same as serialized data for
210 // www.example2.com.
211 ASSERT_NE(net::ERR_IO_PENDING, error);
212 ASSERT_TRUE(net::IsCertificateError(error));
213 ASSERT_FALSE(request);
214 EXPECT_EQ(verifier2_result2.cert_status, verifier1_result2.cert_status);
215 }
216
217 TEST_F(CertVerifierCachePersisterTest, DeserializeCorruptedCerts) {
Ryan Sleevi 2016/06/15 23:31:32 But what's the expected state of |verifier2| here?
ramant (doing other things) 2016/06/17 02:45:14 Changed the code to populate CachingCertVerifier o
218 net::CertVerifyResult verify_result;
219 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
220 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
221
222 // Corrupt deserialized certs and verify deserialization failure.
223 cert_cache.clear_cert_entry();
224
225 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
226 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
227 }
228
229 TEST_F(CertVerifierCachePersisterTest, DeserializeCorruptedCacheEntry) {
230 net::CertVerifyResult verify_result;
231 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
232 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
233
234 // Corrupt cronet_pb::CertVerificationCacheEntry and verify deserialization
235 // failure.
236 cert_cache.clear_cache_entry();
237
238 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
239 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
240 }
241
242 TEST_F(CertVerifierCachePersisterTest, DeserializeCorruptedRequestParams) {
243 net::CertVerifyResult verify_result;
244 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
245 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
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 // Corrupt request_params and verify deserialization failure.
251 cache_entry->clear_request_params();
252 }
253
254 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
255 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
256 }
257
258 TEST_F(CertVerifierCachePersisterTest, DeserializeRequestParamsNoCertificate) {
259 net::CertVerifyResult verify_result;
260 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
261 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
262
263 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
264 cronet_pb::CertVerificationCacheEntry* cache_entry =
265 cert_cache.mutable_cache_entry(i);
266 cronet_pb::CertVerificationRequestParams* request_params =
267 cache_entry->mutable_request_params();
268 // Corrupt request_params's certificate and verify deserialization failure.
269 request_params->clear_certificate();
270 }
271
272 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
273 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
274 }
275
276 TEST_F(CertVerifierCachePersisterTest, DeserializeRequestParamsNoHostname) {
277 net::CertVerifyResult verify_result;
278 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
279 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
280
281 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
282 cronet_pb::CertVerificationCacheEntry* cache_entry =
283 cert_cache.mutable_cache_entry(i);
284 cronet_pb::CertVerificationRequestParams* request_params =
285 cache_entry->mutable_request_params();
286 // Corrupt request_params's hostname and verify deserialization failure.
287 request_params->clear_hostname();
288 }
289
290 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
291 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
292 }
293
294 TEST_F(CertVerifierCachePersisterTest, DeserializeRequestParamsEmptyHostname) {
295 net::CertVerifyResult verify_result;
296 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
297 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
298
299 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
300 cronet_pb::CertVerificationCacheEntry* cache_entry =
301 cert_cache.mutable_cache_entry(i);
302 cronet_pb::CertVerificationRequestParams* request_params =
303 cache_entry->mutable_request_params();
304 // Set bogus hostname and verify deserialization failure.
305 request_params->set_hostname("");
306 }
307
308 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
309 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
310 }
311
312 TEST_F(CertVerifierCachePersisterTest, DeserializeRequestParamsNoFlags) {
313 net::CertVerifyResult verify_result;
314 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
315 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
316
317 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
318 cronet_pb::CertVerificationCacheEntry* cache_entry =
319 cert_cache.mutable_cache_entry(i);
320 cronet_pb::CertVerificationRequestParams* request_params =
321 cache_entry->mutable_request_params();
322 // Corrupt request_params's flags and verify deserialization failure.
323 request_params->clear_flags();
324 }
325
326 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
327 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
328 }
329
330 TEST_F(CertVerifierCachePersisterTest, DeserializeRequestParamsNoOcspResponse) {
331 net::CertVerifyResult verify_result;
332 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
333 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
334
335 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
336 cronet_pb::CertVerificationCacheEntry* cache_entry =
337 cert_cache.mutable_cache_entry(i);
338 cronet_pb::CertVerificationRequestParams* request_params =
339 cache_entry->mutable_request_params();
340 // Corrupt request_params's flags and verify deserialization failure.
341 request_params->clear_ocsp_response();
342 }
343
344 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
345 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
346 }
347
348 TEST_F(CertVerifierCachePersisterTest,
349 DeserializeRequestParamsCertificateNoCertNumbers) {
350 net::CertVerifyResult verify_result;
351 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
352 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
353
354 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
355 cronet_pb::CertVerificationCacheEntry* cache_entry =
356 cert_cache.mutable_cache_entry(i);
357 cronet_pb::CertVerificationRequestParams* request_params =
358 cache_entry->mutable_request_params();
359 cronet_pb::CertVerificationCertificate* certificate =
360 request_params->mutable_certificate();
361 // Corrupt request_params's certificate and verify deserialization failure.
362 certificate->clear_cert_numbers();
363 }
364
365 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
366 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
367 }
368
369 TEST_F(CertVerifierCachePersisterTest,
370 DeserializeCorruptedRequestParamsCertNumbers) {
Ryan Sleevi 2016/06/15 23:31:33 Do lines 217-370 need to be structured as they are
ramant (doing other things) 2016/06/17 02:45:15 I agree. All the protobuf related tests, I had see
371 net::CertVerifyResult verify_result;
372 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
373 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
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 and verify deserialization failure.
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 TEST_F(CertVerifierCachePersisterTest,
391 DeserializeRequestParamsCertificateNoTrustAnchors) {
392 net::CertificateList ca_cert_list = net::CreateCertificateListFromFile(
393 net::GetTestCertsDirectory(), "root_ca_cert.pem",
394 net::X509Certificate::FORMAT_AUTO);
395 ASSERT_EQ(1U, ca_cert_list.size());
396 scoped_refptr<net::X509Certificate> ca_cert(ca_cert_list[0]);
397
398 net::CertificateList cert_list = net::CreateCertificateListFromFile(
399 net::GetTestCertsDirectory(), "ok_cert.pem",
400 net::X509Certificate::FORMAT_AUTO);
401 ASSERT_EQ(1U, cert_list.size());
402 scoped_refptr<net::X509Certificate> cert(cert_list[0]);
403
404 // Now add the |ca_cert| to the |trust_anchors|, and verification should pass.
405 net::CertificateList trust_anchors;
406 trust_anchors.push_back(ca_cert);
407
408 int error;
409 net::CertVerifyResult verify_result;
410 net::TestCompletionCallback callback;
411 std::unique_ptr<net::CertVerifier::Request> request;
412
413 error = callback.GetResult(verifier_.Verify(
414 net::CertVerifier::RequestParams(cert, "www.example.com", 0,
415 std::string(), trust_anchors),
416 nullptr, &verify_result, callback.callback(), &request,
417 net::BoundNetLog()));
418 EXPECT_TRUE(net::IsCertificateError(error));
419
420 cronet_pb::CertVerificationCache cert_cache =
421 SerializeCertVerifierCache(verifier_);
422 DCHECK_EQ(2, cert_cache.cert_entry_size());
423 DCHECK_EQ(1, cert_cache.cache_entry_size());
424
425 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
426 cronet_pb::CertVerificationCacheEntry* cache_entry =
427 cert_cache.mutable_cache_entry(i);
428 cronet_pb::CertVerificationRequestParams* request_params =
429 cache_entry->mutable_request_params();
430 for (int j = 0; j < request_params->additional_trust_anchors_size(); ++j) {
431 cronet_pb::CertVerificationCertificate* certificate =
432 request_params->mutable_additional_trust_anchors(j);
433 // Corrupt the certificate number in |additional_trust_anchors| and verify
434 // deserialization failure.w
435 certificate->clear_cert_numbers();
436 }
437 }
438
439 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
440 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
441 }
442
443 TEST_F(CertVerifierCachePersisterTest, DeserializeCorruptedCachedResult) {
444 net::CertVerifyResult verify_result;
445 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
446 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
447
448 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
449 cronet_pb::CertVerificationCacheEntry* cache_entry =
450 cert_cache.mutable_cache_entry(i);
451 // Corrupt the |cached_result| and verify deserialization failure.
452 cache_entry->clear_cached_result();
453 }
454
455 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
456 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
457 }
458
459 TEST_F(CertVerifierCachePersisterTest, DeserializeCachedResultNoError) {
460 net::CertVerifyResult verify_result;
461 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
462 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
463
464 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
465 cronet_pb::CertVerificationCacheEntry* cache_entry =
466 cert_cache.mutable_cache_entry(i);
467 cronet_pb::CertVerificationCachedResult* cached_result =
468 cache_entry->mutable_cached_result();
469 // Corrupt the |error| and verify deserialization failure.
470 cached_result->clear_error();
471 }
472
473 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
474 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
475 }
476
477 TEST_F(CertVerifierCachePersisterTest, DeserializeCachedResultNoResult) {
478 net::CertVerifyResult verify_result;
479 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
480 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
481
482 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
483 cronet_pb::CertVerificationCacheEntry* cache_entry =
484 cert_cache.mutable_cache_entry(i);
485 cronet_pb::CertVerificationCachedResult* cached_result =
486 cache_entry->mutable_cached_result();
487 // Corrupt the |cached_result| and verify deserialization failure.
488 cached_result->clear_result();
489 }
490
491 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
492 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
493 }
494
495 TEST_F(CertVerifierCachePersisterTest, DeserializeCachedResultNoCertStatus) {
496 net::CertVerifyResult verify_result;
497 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
498 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
499
500 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
501 cronet_pb::CertVerificationCacheEntry* cache_entry =
502 cert_cache.mutable_cache_entry(i);
503 cronet_pb::CertVerificationCachedResult* cached_result =
504 cache_entry->mutable_cached_result();
505 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
506 // Corrupt the |cert_status| and verify deserialization failure.
507 result->clear_cert_status();
508 }
509
510 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
511 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
512 }
513
514 TEST_F(CertVerifierCachePersisterTest, DeserializeCachedResultNoVerifiedCert) {
515 net::CertVerifyResult verify_result;
516 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
517 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
518
519 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
520 cronet_pb::CertVerificationCacheEntry* cache_entry =
521 cert_cache.mutable_cache_entry(i);
522 cronet_pb::CertVerificationCachedResult* cached_result =
523 cache_entry->mutable_cached_result();
524 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
525 // Corrupt the |verified_cert| and verify deserialization failure.
526 result->clear_verified_cert();
527 }
528
529 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
530 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
531 }
532
533 TEST_F(CertVerifierCachePersisterTest,
534 DeserializeCachedResultNoVerifiedCertNumber) {
535 net::CertVerifyResult verify_result;
536 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
537 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
538
539 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
540 cronet_pb::CertVerificationCacheEntry* cache_entry =
541 cert_cache.mutable_cache_entry(i);
542 cronet_pb::CertVerificationCachedResult* cached_result =
543 cache_entry->mutable_cached_result();
544 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
545 result->clear_verified_cert();
546 // Corrupt the verified certificate and verify deserialization failure.
547 cronet_pb::CertVerificationCertificate* certificate =
Ryan Sleevi 2016/06/15 23:31:32 All of these corrupt tests seem to share the commo
ramant (doing other things) 2016/06/17 02:45:15 Acknowledged.
548 result->mutable_verified_cert();
549 certificate->clear_cert_numbers();
550 }
551
552 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
553 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
554 }
555
556 TEST_F(CertVerifierCachePersisterTest,
557 DeserializeCorruptedCachedResultVerifiedCertNumber) {
558 net::CertVerifyResult verify_result;
559 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
560 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
561
562 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
563 cronet_pb::CertVerificationCacheEntry* cache_entry =
564 cert_cache.mutable_cache_entry(i);
565 cronet_pb::CertVerificationCachedResult* cached_result =
566 cache_entry->mutable_cached_result();
567 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
568 cronet_pb::CertVerificationCertificate* certificate =
569 result->mutable_verified_cert();
570 // Set bogus certificate number and verify deserialization failure.
571 certificate->set_cert_numbers(0, 100);
572 }
573
574 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
575 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
576 }
577
578 TEST_F(CertVerifierCachePersisterTest,
579 DeserializeCorruptedCachedResultPublicKeyHashes) {
580 net::CertVerifyResult verify_result;
581 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
582 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
583
584 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
585 cronet_pb::CertVerificationCacheEntry* cache_entry =
586 cert_cache.mutable_cache_entry(i);
587 cronet_pb::CertVerificationCachedResult* cached_result =
588 cache_entry->mutable_cached_result();
589 cronet_pb::CertVerificationResult* result = cached_result->mutable_result();
590 // Set bogus |public_key_hashes| and verify deserialization failure.
591 result->add_public_key_hashes("");
592 }
593
594 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
595 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
596 }
597
598 TEST_F(CertVerifierCachePersisterTest, DeserializeCorruptedVerificationTime) {
599 net::CertVerifyResult verify_result;
600 cronet_pb::CertVerificationCache cert_cache = VerifyAndSerializeCert(
601 "ok_cert.pem", "www.example.com", &verifier_, &verify_result);
602
603 for (int i = 0; i < cert_cache.cache_entry_size(); ++i) {
604 cronet_pb::CertVerificationCacheEntry* cache_entry =
605 cert_cache.mutable_cache_entry(i);
606 // Corrupt |verification_time| and verify deserialization failure.
607 cache_entry->clear_verification_time();
608 }
609
610 net::CachingCertVerifier verifier2(base::MakeUnique<net::MockCertVerifier>());
611 EXPECT_FALSE(DeserializeCertVerifierCache(cert_cache, &verifier2));
612 }
613
614 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698