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

Side by Side Diff: net/cert/multi_threaded_cert_verifier_unittest.cc

Issue 1994353002: Update CertVerifier::Verify to use RequestParams instead (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@request_params
Patch Set: Rebased Created 4 years, 7 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
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 <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/leak_annotations.h" 10 #include "base/debug/leak_annotations.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 base::FilePath certs_dir = GetTestCertsDirectory(); 83 base::FilePath certs_dir = GetTestCertsDirectory();
84 scoped_refptr<X509Certificate> test_cert( 84 scoped_refptr<X509Certificate> test_cert(
85 ImportCertFromFile(certs_dir, "ok_cert.pem")); 85 ImportCertFromFile(certs_dir, "ok_cert.pem"));
86 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); 86 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
87 87
88 int error; 88 int error;
89 CertVerifyResult verify_result; 89 CertVerifyResult verify_result;
90 TestCompletionCallback callback; 90 TestCompletionCallback callback;
91 std::unique_ptr<CertVerifier::Request> request; 91 std::unique_ptr<CertVerifier::Request> request;
92 92
93 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 93 error = verifier_.Verify(
94 NULL, &verify_result, callback.callback(), &request, 94 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
95 BoundNetLog()); 95 std::string(), CertificateList()),
96 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
96 ASSERT_EQ(ERR_IO_PENDING, error); 97 ASSERT_EQ(ERR_IO_PENDING, error);
97 EXPECT_TRUE(request); 98 EXPECT_TRUE(request);
98 error = callback.WaitForResult(); 99 error = callback.WaitForResult();
99 ASSERT_TRUE(IsCertificateError(error)); 100 ASSERT_TRUE(IsCertificateError(error));
100 ASSERT_EQ(1u, verifier_.requests()); 101 ASSERT_EQ(1u, verifier_.requests());
101 ASSERT_EQ(0u, verifier_.cache_hits()); 102 ASSERT_EQ(0u, verifier_.cache_hits());
102 ASSERT_EQ(0u, verifier_.inflight_joins()); 103 ASSERT_EQ(0u, verifier_.inflight_joins());
103 ASSERT_EQ(1u, verifier_.GetCacheSize()); 104 ASSERT_EQ(1u, verifier_.GetCacheSize());
104 105
105 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 106 error = verifier_.Verify(
106 NULL, &verify_result, callback.callback(), &request, 107 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
107 BoundNetLog()); 108 std::string(), CertificateList()),
109 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
108 // Synchronous completion. 110 // Synchronous completion.
109 ASSERT_NE(ERR_IO_PENDING, error); 111 ASSERT_NE(ERR_IO_PENDING, error);
110 ASSERT_TRUE(IsCertificateError(error)); 112 ASSERT_TRUE(IsCertificateError(error));
111 ASSERT_FALSE(request); 113 ASSERT_FALSE(request);
112 ASSERT_EQ(2u, verifier_.requests()); 114 ASSERT_EQ(2u, verifier_.requests());
113 ASSERT_EQ(1u, verifier_.cache_hits()); 115 ASSERT_EQ(1u, verifier_.cache_hits());
114 ASSERT_EQ(0u, verifier_.inflight_joins()); 116 ASSERT_EQ(0u, verifier_.inflight_joins());
115 ASSERT_EQ(1u, verifier_.GetCacheSize()); 117 ASSERT_EQ(1u, verifier_.GetCacheSize());
116 } 118 }
117 119
(...skipping 25 matching lines...) Expand all
143 intermediates.push_back(intermediate_cert2->os_cert_handle()); 145 intermediates.push_back(intermediate_cert2->os_cert_handle());
144 scoped_refptr<X509Certificate> cert_chain2 = 146 scoped_refptr<X509Certificate> cert_chain2 =
145 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(), 147 X509Certificate::CreateFromHandle(server_cert->os_cert_handle(),
146 intermediates); 148 intermediates);
147 149
148 int error; 150 int error;
149 CertVerifyResult verify_result; 151 CertVerifyResult verify_result;
150 TestCompletionCallback callback; 152 TestCompletionCallback callback;
151 std::unique_ptr<CertVerifier::Request> request; 153 std::unique_ptr<CertVerifier::Request> request;
152 154
153 error = verifier_.Verify(cert_chain1.get(), "www.example.com", std::string(), 155 error = verifier_.Verify(
154 0, NULL, &verify_result, callback.callback(), 156 CertVerifier::RequestParams(cert_chain1, "www.example.com", 0,
155 &request, BoundNetLog()); 157 std::string(), CertificateList()),
158 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
156 ASSERT_EQ(ERR_IO_PENDING, error); 159 ASSERT_EQ(ERR_IO_PENDING, error);
157 EXPECT_TRUE(request); 160 EXPECT_TRUE(request);
158 error = callback.WaitForResult(); 161 error = callback.WaitForResult();
159 ASSERT_TRUE(IsCertificateError(error)); 162 ASSERT_TRUE(IsCertificateError(error));
160 ASSERT_EQ(1u, verifier_.requests()); 163 ASSERT_EQ(1u, verifier_.requests());
161 ASSERT_EQ(0u, verifier_.cache_hits()); 164 ASSERT_EQ(0u, verifier_.cache_hits());
162 ASSERT_EQ(0u, verifier_.inflight_joins()); 165 ASSERT_EQ(0u, verifier_.inflight_joins());
163 ASSERT_EQ(1u, verifier_.GetCacheSize()); 166 ASSERT_EQ(1u, verifier_.GetCacheSize());
164 167
165 error = verifier_.Verify(cert_chain2.get(), "www.example.com", std::string(), 168 error = verifier_.Verify(
166 0, NULL, &verify_result, callback.callback(), 169 CertVerifier::RequestParams(cert_chain2, "www.example.com", 0,
167 &request, BoundNetLog()); 170 std::string(), CertificateList()),
171 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
168 ASSERT_EQ(ERR_IO_PENDING, error); 172 ASSERT_EQ(ERR_IO_PENDING, error);
169 EXPECT_TRUE(request); 173 EXPECT_TRUE(request);
170 error = callback.WaitForResult(); 174 error = callback.WaitForResult();
171 ASSERT_TRUE(IsCertificateError(error)); 175 ASSERT_TRUE(IsCertificateError(error));
172 ASSERT_EQ(2u, verifier_.requests()); 176 ASSERT_EQ(2u, verifier_.requests());
173 ASSERT_EQ(0u, verifier_.cache_hits()); 177 ASSERT_EQ(0u, verifier_.cache_hits());
174 ASSERT_EQ(0u, verifier_.inflight_joins()); 178 ASSERT_EQ(0u, verifier_.inflight_joins());
175 ASSERT_EQ(2u, verifier_.GetCacheSize()); 179 ASSERT_EQ(2u, verifier_.GetCacheSize());
176 } 180 }
177 181
178 // Tests an inflight join. 182 // Tests an inflight join.
179 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) { 183 TEST_F(MultiThreadedCertVerifierTest, InflightJoin) {
180 base::FilePath certs_dir = GetTestCertsDirectory(); 184 base::FilePath certs_dir = GetTestCertsDirectory();
181 scoped_refptr<X509Certificate> test_cert( 185 scoped_refptr<X509Certificate> test_cert(
182 ImportCertFromFile(certs_dir, "ok_cert.pem")); 186 ImportCertFromFile(certs_dir, "ok_cert.pem"));
183 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); 187 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
184 188
185 int error; 189 int error;
186 CertVerifyResult verify_result; 190 CertVerifyResult verify_result;
187 TestCompletionCallback callback; 191 TestCompletionCallback callback;
188 std::unique_ptr<CertVerifier::Request> request; 192 std::unique_ptr<CertVerifier::Request> request;
189 CertVerifyResult verify_result2; 193 CertVerifyResult verify_result2;
190 TestCompletionCallback callback2; 194 TestCompletionCallback callback2;
191 std::unique_ptr<CertVerifier::Request> request2; 195 std::unique_ptr<CertVerifier::Request> request2;
192 196
193 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 197 error = verifier_.Verify(
194 NULL, &verify_result, callback.callback(), &request, 198 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
195 BoundNetLog()); 199 std::string(), CertificateList()),
200 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
196 ASSERT_EQ(ERR_IO_PENDING, error); 201 ASSERT_EQ(ERR_IO_PENDING, error);
197 EXPECT_TRUE(request); 202 EXPECT_TRUE(request);
198 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 203 error = verifier_.Verify(
199 NULL, &verify_result2, callback2.callback(), 204 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
200 &request2, BoundNetLog()); 205 std::string(), CertificateList()),
206 NULL, &verify_result2, callback2.callback(), &request2, BoundNetLog());
201 EXPECT_EQ(ERR_IO_PENDING, error); 207 EXPECT_EQ(ERR_IO_PENDING, error);
202 EXPECT_TRUE(request2); 208 EXPECT_TRUE(request2);
203 error = callback.WaitForResult(); 209 error = callback.WaitForResult();
204 EXPECT_TRUE(IsCertificateError(error)); 210 EXPECT_TRUE(IsCertificateError(error));
205 error = callback2.WaitForResult(); 211 error = callback2.WaitForResult();
206 ASSERT_TRUE(IsCertificateError(error)); 212 ASSERT_TRUE(IsCertificateError(error));
207 ASSERT_EQ(2u, verifier_.requests()); 213 ASSERT_EQ(2u, verifier_.requests());
208 ASSERT_EQ(0u, verifier_.cache_hits()); 214 ASSERT_EQ(0u, verifier_.cache_hits());
209 ASSERT_EQ(1u, verifier_.inflight_joins()); 215 ASSERT_EQ(1u, verifier_.inflight_joins());
210 } 216 }
211 217
212 // Tests that the callback of a canceled request is never made. 218 // Tests that the callback of a canceled request is never made.
213 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) { 219 TEST_F(MultiThreadedCertVerifierTest, CancelRequest) {
214 base::FilePath certs_dir = GetTestCertsDirectory(); 220 base::FilePath certs_dir = GetTestCertsDirectory();
215 scoped_refptr<X509Certificate> test_cert( 221 scoped_refptr<X509Certificate> test_cert(
216 ImportCertFromFile(certs_dir, "ok_cert.pem")); 222 ImportCertFromFile(certs_dir, "ok_cert.pem"));
217 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); 223 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
218 224
219 int error; 225 int error;
220 CertVerifyResult verify_result; 226 CertVerifyResult verify_result;
221 std::unique_ptr<CertVerifier::Request> request; 227 std::unique_ptr<CertVerifier::Request> request;
222 228
223 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 229 error = verifier_.Verify(
224 NULL, &verify_result, base::Bind(&FailTest), 230 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
225 &request, BoundNetLog()); 231 std::string(), CertificateList()),
232 NULL, &verify_result, base::Bind(&FailTest), &request, BoundNetLog());
226 ASSERT_EQ(ERR_IO_PENDING, error); 233 ASSERT_EQ(ERR_IO_PENDING, error);
227 ASSERT_TRUE(request); 234 ASSERT_TRUE(request);
228 request.reset(); 235 request.reset();
229 236
230 // Issue a few more requests to the worker pool and wait for their 237 // Issue a few more requests to the worker pool and wait for their
231 // completion, so that the task of the canceled request (which runs on a 238 // completion, so that the task of the canceled request (which runs on a
232 // worker thread) is likely to complete by the end of this test. 239 // worker thread) is likely to complete by the end of this test.
233 TestCompletionCallback callback; 240 TestCompletionCallback callback;
234 for (int i = 0; i < 5; ++i) { 241 for (int i = 0; i < 5; ++i) {
235 error = verifier_.Verify(test_cert.get(), "www2.example.com", std::string(), 242 error = verifier_.Verify(
236 0, NULL, &verify_result, callback.callback(), 243 CertVerifier::RequestParams(test_cert, "www2.example.com", 0,
237 &request, BoundNetLog()); 244 std::string(), CertificateList()),
245 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
238 ASSERT_EQ(ERR_IO_PENDING, error); 246 ASSERT_EQ(ERR_IO_PENDING, error);
239 EXPECT_TRUE(request); 247 EXPECT_TRUE(request);
240 error = callback.WaitForResult(); 248 error = callback.WaitForResult();
241 verifier_.ClearCache(); 249 verifier_.ClearCache();
242 } 250 }
243 } 251 }
244 252
245 // Tests that a canceled request is not leaked. 253 // Tests that a canceled request is not leaked.
246 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) { 254 TEST_F(MultiThreadedCertVerifierTest, CancelRequestThenQuit) {
247 base::FilePath certs_dir = GetTestCertsDirectory(); 255 base::FilePath certs_dir = GetTestCertsDirectory();
248 scoped_refptr<X509Certificate> test_cert( 256 scoped_refptr<X509Certificate> test_cert(
249 ImportCertFromFile(certs_dir, "ok_cert.pem")); 257 ImportCertFromFile(certs_dir, "ok_cert.pem"));
250 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get()); 258 ASSERT_NE(static_cast<X509Certificate*>(NULL), test_cert.get());
251 259
252 int error; 260 int error;
253 CertVerifyResult verify_result; 261 CertVerifyResult verify_result;
254 TestCompletionCallback callback; 262 TestCompletionCallback callback;
255 std::unique_ptr<CertVerifier::Request> request; 263 std::unique_ptr<CertVerifier::Request> request;
256 264
257 { 265 {
258 // Because shutdown intentionally doesn't join worker threads, memory may 266 // Because shutdown intentionally doesn't join worker threads, memory may
259 // be leaked if the main thread shuts down before the worker thread 267 // be leaked if the main thread shuts down before the worker thread
260 // completes. In particular MultiThreadedCertVerifier calls 268 // completes. In particular MultiThreadedCertVerifier calls
261 // base::WorkerPool::PostTaskAndReply(), which leaks its "relay" when it 269 // base::WorkerPool::PostTaskAndReply(), which leaks its "relay" when it
262 // can't post the reply back to the origin thread. See 270 // can't post the reply back to the origin thread. See
263 // https://crbug.com/522514 271 // https://crbug.com/522514
264 ANNOTATE_SCOPED_MEMORY_LEAK; 272 ANNOTATE_SCOPED_MEMORY_LEAK;
265 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 273 error = verifier_.Verify(
266 0, NULL, &verify_result, callback.callback(), 274 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
267 &request, BoundNetLog()); 275 std::string(), CertificateList()),
276 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
268 } 277 }
269 ASSERT_EQ(ERR_IO_PENDING, error); 278 ASSERT_EQ(ERR_IO_PENDING, error);
270 EXPECT_TRUE(request); 279 EXPECT_TRUE(request);
271 request.reset(); 280 request.reset();
272 // Destroy |verifier| by going out of scope. 281 // Destroy |verifier| by going out of scope.
273 } 282 }
274 283
275 TEST_F(MultiThreadedCertVerifierTest, CertTrustAnchorProvider) { 284 TEST_F(MultiThreadedCertVerifierTest, CertTrustAnchorProvider) {
276 MockCertTrustAnchorProvider trust_provider; 285 MockCertTrustAnchorProvider trust_provider;
277 verifier_.SetCertTrustAnchorProvider(&trust_provider); 286 verifier_.SetCertTrustAnchorProvider(&trust_provider);
278 287
279 scoped_refptr<X509Certificate> test_cert( 288 scoped_refptr<X509Certificate> test_cert(
280 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem")); 289 ImportCertFromFile(GetTestCertsDirectory(), "ok_cert.pem"));
281 ASSERT_TRUE(test_cert.get()); 290 ASSERT_TRUE(test_cert.get());
282 291
283 const CertificateList empty_cert_list; 292 const CertificateList empty_cert_list;
284 CertificateList cert_list; 293 CertificateList cert_list;
285 cert_list.push_back(test_cert); 294 cert_list.push_back(test_cert);
286 295
287 // Check that Verify() asks the |trust_provider| for the current list of 296 // Check that Verify() asks the |trust_provider| for the current list of
288 // additional trust anchors. 297 // additional trust anchors.
289 int error; 298 int error;
290 CertVerifyResult verify_result; 299 CertVerifyResult verify_result;
291 TestCompletionCallback callback; 300 TestCompletionCallback callback;
292 std::unique_ptr<CertVerifier::Request> request; 301 std::unique_ptr<CertVerifier::Request> request;
293 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) 302 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors())
294 .WillOnce(ReturnRef(empty_cert_list)); 303 .WillOnce(ReturnRef(empty_cert_list));
295 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 304 error = verifier_.Verify(
296 NULL, &verify_result, callback.callback(), &request, 305 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
297 BoundNetLog()); 306 std::string(), CertificateList()),
307 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
298 Mock::VerifyAndClearExpectations(&trust_provider); 308 Mock::VerifyAndClearExpectations(&trust_provider);
299 ASSERT_EQ(ERR_IO_PENDING, error); 309 ASSERT_EQ(ERR_IO_PENDING, error);
300 EXPECT_TRUE(request); 310 EXPECT_TRUE(request);
301 error = callback.WaitForResult(); 311 error = callback.WaitForResult();
302 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 312 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
303 ASSERT_EQ(1u, verifier_.requests()); 313 ASSERT_EQ(1u, verifier_.requests());
304 ASSERT_EQ(0u, verifier_.cache_hits()); 314 ASSERT_EQ(0u, verifier_.cache_hits());
305 315
306 // The next Verify() uses the cached result. 316 // The next Verify() uses the cached result.
307 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) 317 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors())
308 .WillOnce(ReturnRef(empty_cert_list)); 318 .WillOnce(ReturnRef(empty_cert_list));
309 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 319 error = verifier_.Verify(
310 NULL, &verify_result, callback.callback(), &request, 320 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
311 BoundNetLog()); 321 std::string(), CertificateList()),
322 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
312 Mock::VerifyAndClearExpectations(&trust_provider); 323 Mock::VerifyAndClearExpectations(&trust_provider);
313 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 324 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
314 EXPECT_FALSE(request); 325 EXPECT_FALSE(request);
315 ASSERT_EQ(2u, verifier_.requests()); 326 ASSERT_EQ(2u, verifier_.requests());
316 ASSERT_EQ(1u, verifier_.cache_hits()); 327 ASSERT_EQ(1u, verifier_.cache_hits());
317 328
318 // Another Verify() for the same certificate but with a different list of 329 // Another Verify() for the same certificate but with a different list of
319 // trust anchors will not reuse the cache. 330 // trust anchors will not reuse the cache.
320 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors()) 331 EXPECT_CALL(trust_provider, GetAdditionalTrustAnchors())
321 .WillOnce(ReturnRef(cert_list)); 332 .WillOnce(ReturnRef(cert_list));
322 error = verifier_.Verify(test_cert.get(), "www.example.com", std::string(), 0, 333 error = verifier_.Verify(
323 NULL, &verify_result, callback.callback(), &request, 334 CertVerifier::RequestParams(test_cert, "www.example.com", 0,
324 BoundNetLog()); 335 std::string(), CertificateList()),
336 NULL, &verify_result, callback.callback(), &request, BoundNetLog());
325 Mock::VerifyAndClearExpectations(&trust_provider); 337 Mock::VerifyAndClearExpectations(&trust_provider);
326 ASSERT_EQ(ERR_IO_PENDING, error); 338 ASSERT_EQ(ERR_IO_PENDING, error);
327 EXPECT_TRUE(request); 339 EXPECT_TRUE(request);
328 error = callback.WaitForResult(); 340 error = callback.WaitForResult();
329 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error); 341 EXPECT_EQ(ERR_CERT_COMMON_NAME_INVALID, error);
330 ASSERT_EQ(3u, verifier_.requests()); 342 ASSERT_EQ(3u, verifier_.requests());
331 ASSERT_EQ(1u, verifier_.cache_hits()); 343 ASSERT_EQ(1u, verifier_.cache_hits());
332 } 344 }
333 345
334 // Tests de-duplication of requests. 346 // Tests de-duplication of requests.
(...skipping 19 matching lines...) Expand all
354 std::unique_ptr<CertVerifier::Request> request4; 366 std::unique_ptr<CertVerifier::Request> request4;
355 CertVerifyResult verify_result5; 367 CertVerifyResult verify_result5;
356 TestCompletionCallback callback5; 368 TestCompletionCallback callback5;
357 std::unique_ptr<CertVerifier::Request> request5; 369 std::unique_ptr<CertVerifier::Request> request5;
358 370
359 const char domain1[] = "www.example1.com"; 371 const char domain1[] = "www.example1.com";
360 const char domain2[] = "www.exampleB.com"; 372 const char domain2[] = "www.exampleB.com";
361 const char domain3[] = "www.example3.com"; 373 const char domain3[] = "www.example3.com";
362 374
363 // Start 3 unique requests. 375 // Start 3 unique requests.
364 error = verifier_.Verify(test_cert.get(), domain2, std::string(), 0, nullptr, 376 error = verifier_.Verify(
365 &verify_result1, callback1.callback(), &request1, 377 CertVerifier::RequestParams(test_cert, domain2, 0, std::string(),
366 BoundNetLog()); 378 CertificateList()),
379 nullptr, &verify_result1, callback1.callback(), &request1, BoundNetLog());
367 ASSERT_EQ(ERR_IO_PENDING, error); 380 ASSERT_EQ(ERR_IO_PENDING, error);
368 EXPECT_TRUE(request1); 381 EXPECT_TRUE(request1);
369 382
370 error = verifier_.Verify(test_cert.get(), domain2, std::string(), 0, nullptr, 383 error = verifier_.Verify(
371 &verify_result2, callback2.callback(), &request2, 384 CertVerifier::RequestParams(test_cert, domain2, 0, std::string(),
372 BoundNetLog()); 385 CertificateList()),
386 nullptr, &verify_result2, callback2.callback(), &request2, BoundNetLog());
373 EXPECT_EQ(ERR_IO_PENDING, error); 387 EXPECT_EQ(ERR_IO_PENDING, error);
374 EXPECT_TRUE(request2); 388 EXPECT_TRUE(request2);
375 389
376 error = verifier_.Verify(test_cert.get(), domain3, std::string(), 0, nullptr, 390 error = verifier_.Verify(
377 &verify_result3, callback3.callback(), &request3, 391 CertVerifier::RequestParams(test_cert, domain3, 0, std::string(),
378 BoundNetLog()); 392 CertificateList()),
393 nullptr, &verify_result3, callback3.callback(), &request3, BoundNetLog());
379 EXPECT_EQ(ERR_IO_PENDING, error); 394 EXPECT_EQ(ERR_IO_PENDING, error);
380 EXPECT_TRUE(request3); 395 EXPECT_TRUE(request3);
381 396
382 // Start duplicate requests (which should join to existing jobs). 397 // Start duplicate requests (which should join to existing jobs).
383 error = verifier_.Verify(test_cert.get(), domain1, std::string(), 0, nullptr, 398 error = verifier_.Verify(
384 &verify_result4, callback4.callback(), &request4, 399 CertVerifier::RequestParams(test_cert, domain1, 0, std::string(),
385 BoundNetLog()); 400 CertificateList()),
401 nullptr, &verify_result4, callback4.callback(), &request4, BoundNetLog());
386 EXPECT_EQ(ERR_IO_PENDING, error); 402 EXPECT_EQ(ERR_IO_PENDING, error);
387 EXPECT_TRUE(request4); 403 EXPECT_TRUE(request4);
388 404
389 error = verifier_.Verify(test_cert.get(), domain2, std::string(), 0, nullptr, 405 error = verifier_.Verify(
390 &verify_result5, callback5.callback(), &request5, 406 CertVerifier::RequestParams(test_cert, domain2, 0, std::string(),
391 BoundNetLog()); 407 CertificateList()),
408 nullptr, &verify_result5, callback5.callback(), &request5, BoundNetLog());
392 EXPECT_EQ(ERR_IO_PENDING, error); 409 EXPECT_EQ(ERR_IO_PENDING, error);
393 EXPECT_TRUE(request5); 410 EXPECT_TRUE(request5);
394 411
395 error = callback1.WaitForResult(); 412 error = callback1.WaitForResult();
396 EXPECT_TRUE(IsCertificateError(error)); 413 EXPECT_TRUE(IsCertificateError(error));
397 error = callback2.WaitForResult(); 414 error = callback2.WaitForResult();
398 ASSERT_TRUE(IsCertificateError(error)); 415 ASSERT_TRUE(IsCertificateError(error));
399 error = callback4.WaitForResult(); 416 error = callback4.WaitForResult();
400 ASSERT_TRUE(IsCertificateError(error)); 417 ASSERT_TRUE(IsCertificateError(error));
401 418
402 // Let the other requests automatically cancel. 419 // Let the other requests automatically cancel.
403 ASSERT_EQ(5u, verifier_.requests()); 420 ASSERT_EQ(5u, verifier_.requests());
404 ASSERT_EQ(0u, verifier_.cache_hits()); 421 ASSERT_EQ(0u, verifier_.cache_hits());
405 ASSERT_EQ(2u, verifier_.inflight_joins()); 422 ASSERT_EQ(2u, verifier_.inflight_joins());
406 } 423 }
407 424
408 } // namespace net 425 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698