OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/cert/multi_threaded_cert_verifier.h" | 5 #include "net/cert/multi_threaded_cert_verifier.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 | 88 |
89 error = verifier_.Verify(test_cert.get(), | 89 error = verifier_.Verify(test_cert.get(), |
90 "www.example.com", | 90 "www.example.com", |
91 0, | 91 0, |
92 NULL, | 92 NULL, |
93 &verify_result, | 93 &verify_result, |
94 callback.callback(), | 94 callback.callback(), |
95 &request_handle, | 95 &request_handle, |
96 BoundNetLog()); | 96 BoundNetLog()); |
97 ASSERT_EQ(ERR_IO_PENDING, error); | 97 ASSERT_EQ(ERR_IO_PENDING, error); |
98 ASSERT_TRUE(request_handle != NULL); | 98 EXPECT_TRUE(request_handle); |
99 error = callback.WaitForResult(); | 99 error = callback.WaitForResult(); |
100 ASSERT_TRUE(IsCertificateError(error)); | 100 ASSERT_TRUE(IsCertificateError(error)); |
101 ASSERT_EQ(1u, verifier_.requests()); | 101 ASSERT_EQ(1u, verifier_.requests()); |
102 ASSERT_EQ(0u, verifier_.cache_hits()); | 102 ASSERT_EQ(0u, verifier_.cache_hits()); |
103 ASSERT_EQ(0u, verifier_.inflight_joins()); | 103 ASSERT_EQ(0u, verifier_.inflight_joins()); |
104 ASSERT_EQ(1u, verifier_.GetCacheSize()); | 104 ASSERT_EQ(1u, verifier_.GetCacheSize()); |
105 | 105 |
106 error = verifier_.Verify(test_cert.get(), | 106 error = verifier_.Verify(test_cert.get(), |
107 "www.example.com", | 107 "www.example.com", |
108 0, | 108 0, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 | 158 |
159 error = verifier_.Verify(cert_chain1.get(), | 159 error = verifier_.Verify(cert_chain1.get(), |
160 "www.example.com", | 160 "www.example.com", |
161 0, | 161 0, |
162 NULL, | 162 NULL, |
163 &verify_result, | 163 &verify_result, |
164 callback.callback(), | 164 callback.callback(), |
165 &request_handle, | 165 &request_handle, |
166 BoundNetLog()); | 166 BoundNetLog()); |
167 ASSERT_EQ(ERR_IO_PENDING, error); | 167 ASSERT_EQ(ERR_IO_PENDING, error); |
168 ASSERT_TRUE(request_handle != NULL); | 168 EXPECT_TRUE(request_handle); |
169 error = callback.WaitForResult(); | 169 error = callback.WaitForResult(); |
170 ASSERT_TRUE(IsCertificateError(error)); | 170 ASSERT_TRUE(IsCertificateError(error)); |
171 ASSERT_EQ(1u, verifier_.requests()); | 171 ASSERT_EQ(1u, verifier_.requests()); |
172 ASSERT_EQ(0u, verifier_.cache_hits()); | 172 ASSERT_EQ(0u, verifier_.cache_hits()); |
173 ASSERT_EQ(0u, verifier_.inflight_joins()); | 173 ASSERT_EQ(0u, verifier_.inflight_joins()); |
174 ASSERT_EQ(1u, verifier_.GetCacheSize()); | 174 ASSERT_EQ(1u, verifier_.GetCacheSize()); |
175 | 175 |
176 error = verifier_.Verify(cert_chain2.get(), | 176 error = verifier_.Verify(cert_chain2.get(), |
177 "www.example.com", | 177 "www.example.com", |
178 0, | 178 0, |
179 NULL, | 179 NULL, |
180 &verify_result, | 180 &verify_result, |
181 callback.callback(), | 181 callback.callback(), |
182 &request_handle, | 182 &request_handle, |
183 BoundNetLog()); | 183 BoundNetLog()); |
184 ASSERT_EQ(ERR_IO_PENDING, error); | 184 ASSERT_EQ(ERR_IO_PENDING, error); |
185 ASSERT_TRUE(request_handle != NULL); | 185 EXPECT_TRUE(request_handle); |
186 error = callback.WaitForResult(); | 186 error = callback.WaitForResult(); |
187 ASSERT_TRUE(IsCertificateError(error)); | 187 ASSERT_TRUE(IsCertificateError(error)); |
188 ASSERT_EQ(2u, verifier_.requests()); | 188 ASSERT_EQ(2u, verifier_.requests()); |
189 ASSERT_EQ(0u, verifier_.cache_hits()); | 189 ASSERT_EQ(0u, verifier_.cache_hits()); |
190 ASSERT_EQ(0u, verifier_.inflight_joins()); | 190 ASSERT_EQ(0u, verifier_.inflight_joins()); |
191 ASSERT_EQ(2u, verifier_.GetCacheSize()); | 191 ASSERT_EQ(2u, verifier_.GetCacheSize()); |
192 } | 192 } |
193 | 193 |
194 // Tests an inflight join. | 194 // Tests an inflight join. |
195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { | 195 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { |
(...skipping 12 matching lines...) Expand all Loading... |
208 | 208 |
209 error = verifier_.Verify(test_cert.get(), | 209 error = verifier_.Verify(test_cert.get(), |
210 "www.example.com", | 210 "www.example.com", |
211 0, | 211 0, |
212 NULL, | 212 NULL, |
213 &verify_result, | 213 &verify_result, |
214 callback.callback(), | 214 callback.callback(), |
215 &request_handle, | 215 &request_handle, |
216 BoundNetLog()); | 216 BoundNetLog()); |
217 ASSERT_EQ(ERR_IO_PENDING, error); | 217 ASSERT_EQ(ERR_IO_PENDING, error); |
218 ASSERT_TRUE(request_handle != NULL); | 218 EXPECT_TRUE(request_handle); |
219 error = verifier_.Verify(test_cert.get(), | 219 error = verifier_.Verify(test_cert.get(), |
220 "www.example.com", | 220 "www.example.com", |
221 0, | 221 0, |
222 NULL, | 222 NULL, |
223 &verify_result2, | 223 &verify_result2, |
224 callback2.callback(), | 224 callback2.callback(), |
225 &request_handle2, | 225 &request_handle2, |
226 BoundNetLog()); | 226 BoundNetLog()); |
227 ASSERT_EQ(ERR_IO_PENDING, error); | 227 EXPECT_EQ(ERR_IO_PENDING, error); |
228 ASSERT_TRUE(request_handle2 != NULL); | 228 EXPECT_TRUE(request_handle2 != NULL); |
229 error = callback.WaitForResult(); | 229 error = callback.WaitForResult(); |
230 ASSERT_TRUE(IsCertificateError(error)); | 230 EXPECT_TRUE(IsCertificateError(error)); |
231 error = callback2.WaitForResult(); | 231 error = callback2.WaitForResult(); |
232 ASSERT_TRUE(IsCertificateError(error)); | 232 ASSERT_TRUE(IsCertificateError(error)); |
233 ASSERT_EQ(2u, verifier_.requests()); | 233 ASSERT_EQ(2u, verifier_.requests()); |
234 ASSERT_EQ(0u, verifier_.cache_hits()); | 234 ASSERT_EQ(0u, verifier_.cache_hits()); |
235 ASSERT_EQ(1u, verifier_.inflight_joins()); | 235 ASSERT_EQ(1u, verifier_.inflight_joins()); |
236 } | 236 } |
237 | 237 |
238 // Tests that the callback of a canceled request is never made. | 238 // Tests that the callback of a canceled request is never made. |
239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { | 239 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { |
240 base::FilePath certs_dir = GetTestCertsDirectory(); | 240 base::FilePath certs_dir = GetTestCertsDirectory(); |
(...skipping 24 matching lines...) Expand all Loading... |
265 for (int i = 0; i < 5; ++i) { | 265 for (int i = 0; i < 5; ++i) { |
266 error = verifier_.Verify(test_cert.get(), | 266 error = verifier_.Verify(test_cert.get(), |
267 "www2.example.com", | 267 "www2.example.com", |
268 0, | 268 0, |
269 NULL, | 269 NULL, |
270 &verify_result, | 270 &verify_result, |
271 callback.callback(), | 271 callback.callback(), |
272 &request_handle, | 272 &request_handle, |
273 BoundNetLog()); | 273 BoundNetLog()); |
274 ASSERT_EQ(ERR_IO_PENDING, error); | 274 ASSERT_EQ(ERR_IO_PENDING, error); |
275 ASSERT_TRUE(request_handle != NULL); | 275 EXPECT_TRUE(request_handle); |
276 error = callback.WaitForResult(); | 276 error = callback.WaitForResult(); |
277 verifier_.ClearCache(); | 277 verifier_.ClearCache(); |
278 } | 278 } |
279 } | 279 } |
280 | 280 |
281 // Tests that a canceled request is not leaked. | 281 // Tests that a canceled request is not leaked. |
282 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) { | 282 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) { |
283 base::FilePath certs_dir = GetTestCertsDirectory(); | 283 base::FilePath certs_dir = GetTestCertsDirectory(); |
284 scoped_refptr<X509Certificate> test_cert( | 284 scoped_refptr<X509Certificate> test_cert( |
285 ImportCertFromFile(certs_dir, "ok_cert.pem")); | 285 ImportCertFromFile(certs_dir, "ok_cert.pem")); |
286 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); | 286 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert); |
287 | 287 |
288 int error; | 288 int error; |
289 CertVerifyResult verify_result; | 289 CertVerifyResult verify_result; |
290 TestCompletionCallback callback; | 290 TestCompletionCallback callback; |
291 CertVerifier::RequestHandle request_handle; | 291 CertVerifier::RequestHandle request_handle; |
292 | 292 |
293 error = verifier_.Verify(test_cert.get(), | 293 error = verifier_.Verify(test_cert.get(), |
294 "www.example.com", | 294 "www.example.com", |
295 0, | 295 0, |
296 NULL, | 296 NULL, |
297 &verify_result, | 297 &verify_result, |
298 callback.callback(), | 298 callback.callback(), |
299 &request_handle, | 299 &request_handle, |
300 BoundNetLog()); | 300 BoundNetLog()); |
301 ASSERT_EQ(ERR_IO_PENDING, error); | 301 ASSERT_EQ(ERR_IO_PENDING, error); |
302 ASSERT_TRUE(request_handle != NULL); | 302 EXPECT_TRUE(request_handle); |
303 verifier_.CancelRequest(request_handle); | 303 verifier_.CancelRequest(request_handle); |
304 // Destroy |verifier| by going out of scope. | 304 // Destroy |verifier| by going out of scope. |
305 } | 305 } |
306 | 306 |
307 TEST_F(MultiThreadedCertVerifierTest, RequestParamsComparators) { | 307 TEST_F(MultiThreadedCertVerifierTest, RequestParamsComparators) { |
308 SHA1HashValue a_key; | 308 SHA1HashValue a_key; |
309 memset(a_key.data, 'a', sizeof(a_key.data)); | 309 memset(a_key.data, 'a', sizeof(a_key.data)); |
310 | 310 |
311 SHA1HashValue z_key; | 311 SHA1HashValue z_key; |
312 memset(z_key.data, 'z', sizeof(z_key.data)); | 312 memset(z_key.data, 'z', sizeof(z_key.data)); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 error = verifier_.Verify(test_cert.get(), | 425 error = verifier_.Verify(test_cert.get(), |
426 "www.example.com", | 426 "www.example.com", |
427 0, | 427 0, |
428 NULL, | 428 NULL, |
429 &verify_result, | 429 &verify_result, |
430 callback.callback(), | 430 callback.callback(), |
431 &request_handle, | 431 &request_handle, |
432 BoundNetLog()); | 432 BoundNetLog()); |
433 Mock::VerifyAndClearExpectations(&trust_provider); | 433 Mock::VerifyAndClearExpectations(&trust_provider); |
434 ASSERT_EQ(ERR_IO_PENDING, error); | 434 ASSERT_EQ(ERR_IO_PENDING, error); |
435 ASSERT_TRUE(request_handle); | 435 EXPECT_TRUE(request_handle); |
436 error = callback.WaitForResult(); | 436 error = callback.WaitForResult(); |
437 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 437 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
438 ASSERT_EQ(1u, verifier_.requests()); | 438 ASSERT_EQ(1u, verifier_.requests()); |
439 ASSERT_EQ(0u, verifier_.cache_hits()); | 439 ASSERT_EQ(0u, verifier_.cache_hits()); |
440 | 440 |
441 // The next Verify() uses the cached result. | 441 // The next Verify() uses the cached result. |
442 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) | 442 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) |
443 .WillOnce(ReturnRef(empty_cert_list)); | 443 .WillOnce(ReturnRef(empty_cert_list)); |
444 error = verifier_.Verify(test_cert.get(), | 444 error = verifier_.Verify(test_cert.get(), |
445 "www.example.com", | 445 "www.example.com", |
(...skipping 16 matching lines...) Expand all Loading... |
462 error = verifier_.Verify(test_cert.get(), | 462 error = verifier_.Verify(test_cert.get(), |
463 "www.example.com", | 463 "www.example.com", |
464 0, | 464 0, |
465 NULL, | 465 NULL, |
466 &verify_result, | 466 &verify_result, |
467 callback.callback(), | 467 callback.callback(), |
468 &request_handle, | 468 &request_handle, |
469 BoundNetLog()); | 469 BoundNetLog()); |
470 Mock::VerifyAndClearExpectations(&trust_provider); | 470 Mock::VerifyAndClearExpectations(&trust_provider); |
471 ASSERT_EQ(ERR_IO_PENDING, error); | 471 ASSERT_EQ(ERR_IO_PENDING, error); |
472 ASSERT_TRUE(request_handle != NULL); | 472 EXPECT_TRUE(request_handle); |
473 error = callback.WaitForResult(); | 473 error = callback.WaitForResult(); |
474 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); | 474 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); |
475 ASSERT_EQ(3u, verifier_.requests()); | 475 ASSERT_EQ(3u, verifier_.requests()); |
476 ASSERT_EQ(1u, verifier_.cache_hits()); | 476 ASSERT_EQ(1u, verifier_.cache_hits()); |
477 } | 477 } |
478 | 478 |
479 } // namespace net | 479 } // namespace net |
OLD | NEW |