| 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/socket_stream/socket_stream.h" | 5 #include "net/socket_stream/socket_stream.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 | 272 |
| 273 scoped_ptr<SocketStreamEventRecorder> delegate( | 273 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 274 new SocketStreamEventRecorder(test_callback.callback())); | 274 new SocketStreamEventRecorder(test_callback.callback())); |
| 275 delegate->SetOnConnected(base::Bind( | 275 delegate->SetOnConnected(base::Bind( |
| 276 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); | 276 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); |
| 277 delegate->SetOnReceivedData(base::Bind( | 277 delegate->SetOnReceivedData(base::Bind( |
| 278 &SocketStreamTest::DoCloseFlushPendingWriteTest, | 278 &SocketStreamTest::DoCloseFlushPendingWriteTest, |
| 279 base::Unretained(this))); | 279 base::Unretained(this))); |
| 280 | 280 |
| 281 MockHostResolver host_resolver; | 281 MockHostResolver host_resolver; |
| 282 TestURLRequestContext context; |
| 282 | 283 |
| 283 scoped_refptr<SocketStream> socket_stream( | 284 scoped_refptr<SocketStream> socket_stream( |
| 284 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 285 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 285 | 286 |
| 286 socket_stream->set_context(new TestURLRequestContext()); | 287 socket_stream->set_context(&context); |
| 287 socket_stream->SetHostResolver(&host_resolver); | 288 socket_stream->SetHostResolver(&host_resolver); |
| 288 | 289 |
| 289 MockWrite data_writes[] = { | 290 MockWrite data_writes[] = { |
| 290 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), | 291 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), |
| 291 MockWrite(ASYNC, "\0message1\xff", 10), | 292 MockWrite(ASYNC, "\0message1\xff", 10), |
| 292 MockWrite(ASYNC, "\0message2\xff", 10) | 293 MockWrite(ASYNC, "\0message2\xff", 10) |
| 293 }; | 294 }; |
| 294 MockRead data_reads[] = { | 295 MockRead data_reads[] = { |
| 295 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), | 296 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), |
| 296 // Server doesn't close the connection after handshake. | 297 // Server doesn't close the connection after handshake. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 base::Unretained(delegate.get()))); | 373 base::Unretained(delegate.get()))); |
| 373 delegate->SetAuthInfo(net::AuthCredentials(ASCIIToUTF16("foo"), | 374 delegate->SetAuthInfo(net::AuthCredentials(ASCIIToUTF16("foo"), |
| 374 ASCIIToUTF16("bar"))); | 375 ASCIIToUTF16("bar"))); |
| 375 delegate->SetOnAuthRequired(base::Bind( | 376 delegate->SetOnAuthRequired(base::Bind( |
| 376 &SocketStreamEventRecorder::DoRestartWithAuth, | 377 &SocketStreamEventRecorder::DoRestartWithAuth, |
| 377 base::Unretained(delegate.get()))); | 378 base::Unretained(delegate.get()))); |
| 378 | 379 |
| 379 scoped_refptr<SocketStream> socket_stream( | 380 scoped_refptr<SocketStream> socket_stream( |
| 380 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 381 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 381 | 382 |
| 382 socket_stream->set_context(new TestURLRequestContext("myproxy:70")); | |
| 383 MockHostResolver host_resolver; | 383 MockHostResolver host_resolver; |
| 384 TestURLRequestContext context("myproxy:70"); |
| 385 |
| 386 socket_stream->set_context(&context); |
| 384 socket_stream->SetHostResolver(&host_resolver); | 387 socket_stream->SetHostResolver(&host_resolver); |
| 385 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 388 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
| 386 | 389 |
| 387 socket_stream->Connect(); | 390 socket_stream->Connect(); |
| 388 | 391 |
| 389 test_callback.WaitForResult(); | 392 test_callback.WaitForResult(); |
| 390 | 393 |
| 391 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 394 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 392 ASSERT_EQ(5U, events.size()); | 395 ASSERT_EQ(5U, events.size()); |
| 393 | 396 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 409 new SocketStreamEventRecorder(test_callback.callback())); | 412 new SocketStreamEventRecorder(test_callback.callback())); |
| 410 delegate->SetOnConnected(base::Bind( | 413 delegate->SetOnConnected(base::Bind( |
| 411 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); | 414 &SocketStreamTest::DoSendWebSocketHandshake, base::Unretained(this))); |
| 412 delegate->SetOnReceivedData(base::Bind( | 415 delegate->SetOnReceivedData(base::Bind( |
| 413 &SocketStreamTest::DoCloseFlushPendingWriteTest, | 416 &SocketStreamTest::DoCloseFlushPendingWriteTest, |
| 414 base::Unretained(this))); | 417 base::Unretained(this))); |
| 415 delegate->SetOnStartOpenConnection(base::Bind( | 418 delegate->SetOnStartOpenConnection(base::Bind( |
| 416 &SocketStreamTest::DoIOPending, base::Unretained(this))); | 419 &SocketStreamTest::DoIOPending, base::Unretained(this))); |
| 417 | 420 |
| 418 MockHostResolver host_resolver; | 421 MockHostResolver host_resolver; |
| 422 TestURLRequestContext context; |
| 419 | 423 |
| 420 scoped_refptr<SocketStream> socket_stream( | 424 scoped_refptr<SocketStream> socket_stream( |
| 421 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 425 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 422 | 426 |
| 423 socket_stream->set_context(new TestURLRequestContext()); | 427 socket_stream->set_context(&context); |
| 424 socket_stream->SetHostResolver(&host_resolver); | 428 socket_stream->SetHostResolver(&host_resolver); |
| 425 | 429 |
| 426 MockWrite data_writes[] = { | 430 MockWrite data_writes[] = { |
| 427 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), | 431 MockWrite(SocketStreamTest::kWebSocketHandshakeRequest), |
| 428 MockWrite(ASYNC, "\0message1\xff", 10), | 432 MockWrite(ASYNC, "\0message1\xff", 10), |
| 429 MockWrite(ASYNC, "\0message2\xff", 10) | 433 MockWrite(ASYNC, "\0message2\xff", 10) |
| 430 }; | 434 }; |
| 431 MockRead data_reads[] = { | 435 MockRead data_reads[] = { |
| 432 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), | 436 MockRead(SocketStreamTest::kWebSocketHandshakeResponse), |
| 433 // Server doesn't close the connection after handshake. | 437 // Server doesn't close the connection after handshake. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 | 476 |
| 473 TEST_F(SocketStreamTest, SwitchToSpdy) { | 477 TEST_F(SocketStreamTest, SwitchToSpdy) { |
| 474 TestCompletionCallback test_callback; | 478 TestCompletionCallback test_callback; |
| 475 | 479 |
| 476 scoped_ptr<SocketStreamEventRecorder> delegate( | 480 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 477 new SocketStreamEventRecorder(test_callback.callback())); | 481 new SocketStreamEventRecorder(test_callback.callback())); |
| 478 delegate->SetOnStartOpenConnection(base::Bind( | 482 delegate->SetOnStartOpenConnection(base::Bind( |
| 479 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); | 483 &SocketStreamTest::DoSwitchToSpdyTest, base::Unretained(this))); |
| 480 | 484 |
| 481 MockHostResolver host_resolver; | 485 MockHostResolver host_resolver; |
| 486 TestURLRequestContext context; |
| 482 | 487 |
| 483 scoped_refptr<SocketStream> socket_stream( | 488 scoped_refptr<SocketStream> socket_stream( |
| 484 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 489 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 485 | 490 |
| 486 socket_stream->set_context(new TestURLRequestContext()); | 491 socket_stream->set_context(&context); |
| 487 socket_stream->SetHostResolver(&host_resolver); | 492 socket_stream->SetHostResolver(&host_resolver); |
| 488 | 493 |
| 489 socket_stream->Connect(); | 494 socket_stream->Connect(); |
| 490 | 495 |
| 491 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); | 496 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); |
| 492 | 497 |
| 493 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 498 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 494 ASSERT_EQ(2U, events.size()); | 499 ASSERT_EQ(2U, events.size()); |
| 495 | 500 |
| 496 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 501 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
| 497 events[0].event_type); | 502 events[0].event_type); |
| 498 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); | 503 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); |
| 499 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code); | 504 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code); |
| 500 } | 505 } |
| 501 | 506 |
| 502 TEST_F(SocketStreamTest, SwitchAfterPending) { | 507 TEST_F(SocketStreamTest, SwitchAfterPending) { |
| 503 TestCompletionCallback test_callback; | 508 TestCompletionCallback test_callback; |
| 504 | 509 |
| 505 scoped_ptr<SocketStreamEventRecorder> delegate( | 510 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 506 new SocketStreamEventRecorder(test_callback.callback())); | 511 new SocketStreamEventRecorder(test_callback.callback())); |
| 507 delegate->SetOnStartOpenConnection(base::Bind( | 512 delegate->SetOnStartOpenConnection(base::Bind( |
| 508 &SocketStreamTest::DoIOPending, base::Unretained(this))); | 513 &SocketStreamTest::DoIOPending, base::Unretained(this))); |
| 509 | 514 |
| 510 MockHostResolver host_resolver; | 515 MockHostResolver host_resolver; |
| 516 TestURLRequestContext context; |
| 511 | 517 |
| 512 scoped_refptr<SocketStream> socket_stream( | 518 scoped_refptr<SocketStream> socket_stream( |
| 513 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 519 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 514 | 520 |
| 515 socket_stream->set_context(new TestURLRequestContext()); | 521 socket_stream->set_context(&context); |
| 516 socket_stream->SetHostResolver(&host_resolver); | 522 socket_stream->SetHostResolver(&host_resolver); |
| 517 | 523 |
| 518 socket_stream->Connect(); | 524 socket_stream->Connect(); |
| 519 io_test_callback_.WaitForResult(); | 525 io_test_callback_.WaitForResult(); |
| 520 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, | 526 EXPECT_EQ(net::SocketStream::STATE_RESOLVE_PROTOCOL_COMPLETE, |
| 521 socket_stream->next_state_); | 527 socket_stream->next_state_); |
| 522 delegate->CompleteConnection(net::ERR_PROTOCOL_SWITCHED); | 528 delegate->CompleteConnection(net::ERR_PROTOCOL_SWITCHED); |
| 523 | 529 |
| 524 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); | 530 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, test_callback.WaitForResult()); |
| 525 | 531 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 549 // server doesn't close the connection. | 555 // server doesn't close the connection. |
| 550 MockRead(ASYNC, ERR_IO_PENDING) | 556 MockRead(ASYNC, ERR_IO_PENDING) |
| 551 }; | 557 }; |
| 552 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 558 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 553 data_writes, arraysize(data_writes)); | 559 data_writes, arraysize(data_writes)); |
| 554 mock_socket_factory.AddSocketDataProvider(&data); | 560 mock_socket_factory.AddSocketDataProvider(&data); |
| 555 SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); | 561 SSLSocketDataProvider ssl(SYNCHRONOUS, ERR_SSL_PROTOCOL_ERROR); |
| 556 mock_socket_factory.AddSSLSocketDataProvider(&ssl); | 562 mock_socket_factory.AddSSLSocketDataProvider(&ssl); |
| 557 | 563 |
| 558 TestCompletionCallback test_callback; | 564 TestCompletionCallback test_callback; |
| 565 MockHostResolver host_resolver; |
| 566 TestURLRequestContext context("https://myproxy:70"); |
| 559 | 567 |
| 560 scoped_ptr<SocketStreamEventRecorder> delegate( | 568 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 561 new SocketStreamEventRecorder(test_callback.callback())); | 569 new SocketStreamEventRecorder(test_callback.callback())); |
| 562 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 570 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
| 563 base::Unretained(delegate.get()))); | 571 base::Unretained(delegate.get()))); |
| 564 | 572 |
| 565 scoped_refptr<SocketStream> socket_stream( | 573 scoped_refptr<SocketStream> socket_stream( |
| 566 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 574 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 567 | 575 |
| 568 socket_stream->set_context(new TestURLRequestContext("https://myproxy:70")); | 576 socket_stream->set_context(&context); |
| 569 MockHostResolver host_resolver; | |
| 570 socket_stream->SetHostResolver(&host_resolver); | 577 socket_stream->SetHostResolver(&host_resolver); |
| 571 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 578 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
| 572 | 579 |
| 573 socket_stream->Connect(); | 580 socket_stream->Connect(); |
| 574 | 581 |
| 575 test_callback.WaitForResult(); | 582 test_callback.WaitForResult(); |
| 576 | 583 |
| 577 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 584 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 578 ASSERT_EQ(3U, events.size()); | 585 ASSERT_EQ(3U, events.size()); |
| 579 | 586 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 601 // server doesn't close the connection. | 608 // server doesn't close the connection. |
| 602 MockRead(ASYNC, ERR_IO_PENDING) | 609 MockRead(ASYNC, ERR_IO_PENDING) |
| 603 }; | 610 }; |
| 604 StaticSocketDataProvider data(data_reads, arraysize(data_reads), | 611 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 605 data_writes, arraysize(data_writes)); | 612 data_writes, arraysize(data_writes)); |
| 606 mock_socket_factory.AddSocketDataProvider(&data); | 613 mock_socket_factory.AddSocketDataProvider(&data); |
| 607 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); | 614 SSLSocketDataProvider ssl(SYNCHRONOUS, OK); |
| 608 mock_socket_factory.AddSSLSocketDataProvider(&ssl); | 615 mock_socket_factory.AddSSLSocketDataProvider(&ssl); |
| 609 | 616 |
| 610 TestCompletionCallback test_callback; | 617 TestCompletionCallback test_callback; |
| 618 MockHostResolver host_resolver; |
| 619 TestURLRequestContext context("https://myproxy:70"); |
| 611 | 620 |
| 612 scoped_ptr<SocketStreamEventRecorder> delegate( | 621 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 613 new SocketStreamEventRecorder(test_callback.callback())); | 622 new SocketStreamEventRecorder(test_callback.callback())); |
| 614 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, | 623 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
| 615 base::Unretained(delegate.get()))); | 624 base::Unretained(delegate.get()))); |
| 616 | 625 |
| 617 scoped_refptr<SocketStream> socket_stream( | 626 scoped_refptr<SocketStream> socket_stream( |
| 618 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); | 627 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 619 | 628 |
| 620 socket_stream->set_context(new TestURLRequestContext("https://myproxy:70")); | 629 socket_stream->set_context(&context); |
| 621 MockHostResolver host_resolver; | |
| 622 socket_stream->SetHostResolver(&host_resolver); | 630 socket_stream->SetHostResolver(&host_resolver); |
| 623 socket_stream->SetClientSocketFactory(&mock_socket_factory); | 631 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
| 624 | 632 |
| 625 socket_stream->Connect(); | 633 socket_stream->Connect(); |
| 626 | 634 |
| 627 test_callback.WaitForResult(); | 635 test_callback.WaitForResult(); |
| 628 | 636 |
| 629 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 637 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 630 ASSERT_EQ(4U, events.size()); | 638 ASSERT_EQ(4U, events.size()); |
| 631 | 639 |
| 632 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 640 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
| 633 events[0].event_type); | 641 events[0].event_type); |
| 634 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); | 642 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); |
| 635 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); | 643 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); |
| 636 EXPECT_EQ(net::ERR_ABORTED, events[2].error_code); | 644 EXPECT_EQ(net::ERR_ABORTED, events[2].error_code); |
| 637 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); | 645 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); |
| 638 } | 646 } |
| 639 | 647 |
| 640 } // namespace net | 648 } // namespace net |
| OLD | NEW |