OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/socket/ssl_client_socket.h" | 5 #include "net/socket/ssl_client_socket.h" |
6 | 6 |
7 #include "net/base/address_list.h" | 7 #include "net/base/address_list.h" |
8 #include "net/base/host_resolver.h" | 8 #include "net/base/host_resolver.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_log.h" | 10 #include "net/base/net_log.h" |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 rv = sock->Connect(&callback); | 313 rv = sock->Connect(&callback); |
314 if (rv != net::OK) { | 314 if (rv != net::OK) { |
315 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 315 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
316 | 316 |
317 rv = callback.WaitForResult(); | 317 rv = callback.WaitForResult(); |
318 EXPECT_EQ(net::OK, rv); | 318 EXPECT_EQ(net::OK, rv); |
319 } | 319 } |
320 EXPECT_TRUE(sock->IsConnected()); | 320 EXPECT_TRUE(sock->IsConnected()); |
321 | 321 |
322 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 322 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
323 scoped_refptr<net::IOBuffer> request_buffer = | 323 scoped_refptr<net::IOBuffer> request_buffer( |
324 new net::IOBuffer(arraysize(request_text) - 1); | 324 new net::IOBuffer(arraysize(request_text) - 1)); |
325 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 325 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
326 | 326 |
327 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 327 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
328 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 328 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
329 | 329 |
330 if (rv == net::ERR_IO_PENDING) | 330 if (rv == net::ERR_IO_PENDING) |
331 rv = callback.WaitForResult(); | 331 rv = callback.WaitForResult(); |
332 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 332 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
333 | 333 |
334 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(4096); | 334 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(4096)); |
335 for (;;) { | 335 for (;;) { |
336 rv = sock->Read(buf, 4096, &callback); | 336 rv = sock->Read(buf, 4096, &callback); |
337 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 337 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
338 | 338 |
339 if (rv == net::ERR_IO_PENDING) | 339 if (rv == net::ERR_IO_PENDING) |
340 rv = callback.WaitForResult(); | 340 rv = callback.WaitForResult(); |
341 | 341 |
342 EXPECT_GE(rv, 0); | 342 EXPECT_GE(rv, 0); |
343 if (rv <= 0) | 343 if (rv <= 0) |
344 break; | 344 break; |
(...skipping 29 matching lines...) Expand all Loading... |
374 rv = sock->Connect(&callback); | 374 rv = sock->Connect(&callback); |
375 if (rv != net::OK) { | 375 if (rv != net::OK) { |
376 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 376 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
377 | 377 |
378 rv = callback.WaitForResult(); | 378 rv = callback.WaitForResult(); |
379 EXPECT_EQ(net::OK, rv); | 379 EXPECT_EQ(net::OK, rv); |
380 } | 380 } |
381 EXPECT_TRUE(sock->IsConnected()); | 381 EXPECT_TRUE(sock->IsConnected()); |
382 | 382 |
383 // Issue a "hanging" Read first. | 383 // Issue a "hanging" Read first. |
384 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(4096); | 384 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(4096)); |
385 rv = sock->Read(buf, 4096, &callback); | 385 rv = sock->Read(buf, 4096, &callback); |
386 // We haven't written the request, so there should be no response yet. | 386 // We haven't written the request, so there should be no response yet. |
387 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 387 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
388 | 388 |
389 // Write the request. | 389 // Write the request. |
390 // The request is padded with a User-Agent header to a size that causes the | 390 // The request is padded with a User-Agent header to a size that causes the |
391 // memio circular buffer (4k bytes) in SSLClientSocketNSS to wrap around. | 391 // memio circular buffer (4k bytes) in SSLClientSocketNSS to wrap around. |
392 // This tests the fix for http://crbug.com/29815. | 392 // This tests the fix for http://crbug.com/29815. |
393 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; | 393 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; |
394 for (int i = 0; i < 3800; ++i) | 394 for (int i = 0; i < 3800; ++i) |
395 request_text.push_back('*'); | 395 request_text.push_back('*'); |
396 request_text.append("\r\n\r\n"); | 396 request_text.append("\r\n\r\n"); |
397 scoped_refptr<net::IOBuffer> request_buffer = | 397 scoped_refptr<net::IOBuffer> request_buffer( |
398 new net::StringIOBuffer(request_text); | 398 new net::StringIOBuffer(request_text)); |
399 | 399 |
400 rv = sock->Write(request_buffer, request_text.size(), &callback2); | 400 rv = sock->Write(request_buffer, request_text.size(), &callback2); |
401 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 401 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
402 | 402 |
403 if (rv == net::ERR_IO_PENDING) | 403 if (rv == net::ERR_IO_PENDING) |
404 rv = callback2.WaitForResult(); | 404 rv = callback2.WaitForResult(); |
405 EXPECT_EQ(static_cast<int>(request_text.size()), rv); | 405 EXPECT_EQ(static_cast<int>(request_text.size()), rv); |
406 | 406 |
407 // Now get the Read result. | 407 // Now get the Read result. |
408 rv = callback.WaitForResult(); | 408 rv = callback.WaitForResult(); |
(...skipping 22 matching lines...) Expand all Loading... |
431 | 431 |
432 rv = sock->Connect(&callback); | 432 rv = sock->Connect(&callback); |
433 if (rv != net::OK) { | 433 if (rv != net::OK) { |
434 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 434 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
435 | 435 |
436 rv = callback.WaitForResult(); | 436 rv = callback.WaitForResult(); |
437 EXPECT_EQ(net::OK, rv); | 437 EXPECT_EQ(net::OK, rv); |
438 } | 438 } |
439 | 439 |
440 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 440 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
441 scoped_refptr<net::IOBuffer> request_buffer = | 441 scoped_refptr<net::IOBuffer> request_buffer( |
442 new net::IOBuffer(arraysize(request_text) - 1); | 442 new net::IOBuffer(arraysize(request_text) - 1)); |
443 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 443 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
444 | 444 |
445 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 445 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
446 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 446 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
447 | 447 |
448 if (rv == net::ERR_IO_PENDING) | 448 if (rv == net::ERR_IO_PENDING) |
449 rv = callback.WaitForResult(); | 449 rv = callback.WaitForResult(); |
450 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 450 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
451 | 451 |
452 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(1); | 452 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(1)); |
453 for (;;) { | 453 for (;;) { |
454 rv = sock->Read(buf, 1, &callback); | 454 rv = sock->Read(buf, 1, &callback); |
455 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 455 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
456 | 456 |
457 if (rv == net::ERR_IO_PENDING) | 457 if (rv == net::ERR_IO_PENDING) |
458 rv = callback.WaitForResult(); | 458 rv = callback.WaitForResult(); |
459 | 459 |
460 EXPECT_GE(rv, 0); | 460 EXPECT_GE(rv, 0); |
461 if (rv <= 0) | 461 if (rv <= 0) |
462 break; | 462 break; |
(...skipping 22 matching lines...) Expand all Loading... |
485 | 485 |
486 rv = sock->Connect(&callback); | 486 rv = sock->Connect(&callback); |
487 if (rv != net::OK) { | 487 if (rv != net::OK) { |
488 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 488 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
489 | 489 |
490 rv = callback.WaitForResult(); | 490 rv = callback.WaitForResult(); |
491 EXPECT_EQ(net::OK, rv); | 491 EXPECT_EQ(net::OK, rv); |
492 } | 492 } |
493 | 493 |
494 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 494 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
495 scoped_refptr<net::IOBuffer> request_buffer = | 495 scoped_refptr<net::IOBuffer> request_buffer( |
496 new net::IOBuffer(arraysize(request_text) - 1); | 496 new net::IOBuffer(arraysize(request_text) - 1)); |
497 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 497 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
498 | 498 |
499 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 499 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
500 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 500 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
501 | 501 |
502 if (rv == net::ERR_IO_PENDING) | 502 if (rv == net::ERR_IO_PENDING) |
503 rv = callback.WaitForResult(); | 503 rv = callback.WaitForResult(); |
504 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 504 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
505 | 505 |
506 // Do a partial read and then exit. This test should not crash! | 506 // Do a partial read and then exit. This test should not crash! |
507 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(512); | 507 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(512)); |
508 rv = sock->Read(buf, 512, &callback); | 508 rv = sock->Read(buf, 512, &callback); |
509 EXPECT_TRUE(rv > 0 || rv == net::ERR_IO_PENDING); | 509 EXPECT_TRUE(rv > 0 || rv == net::ERR_IO_PENDING); |
510 | 510 |
511 if (rv == net::ERR_IO_PENDING) | 511 if (rv == net::ERR_IO_PENDING) |
512 rv = callback.WaitForResult(); | 512 rv = callback.WaitForResult(); |
513 | 513 |
514 EXPECT_GT(rv, 0); | 514 EXPECT_GT(rv, 0); |
515 } | 515 } |
516 | 516 |
517 // Regression test for http://crbug.com/42538 | 517 // Regression test for http://crbug.com/42538 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 EXPECT_EQ(net::OK, rv); | 553 EXPECT_EQ(net::OK, rv); |
554 | 554 |
555 scoped_ptr<net::SSLClientSocket> sock( | 555 scoped_ptr<net::SSLClientSocket> sock( |
556 socket_factory_->CreateSSLClientSocket( | 556 socket_factory_->CreateSSLClientSocket( |
557 transport, test_server.host_port_pair().host(), kDefaultSSLConfig, | 557 transport, test_server.host_port_pair().host(), kDefaultSSLConfig, |
558 NULL /* ssl_host_info */)); | 558 NULL /* ssl_host_info */)); |
559 | 559 |
560 rv = sock->Connect(&callback); | 560 rv = sock->Connect(&callback); |
561 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); | 561 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); |
562 } | 562 } |
OLD | NEW |