OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 | 528 |
529 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); | 529 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
530 ASSERT_EQ(2U, events.size()); | 530 ASSERT_EQ(2U, events.size()); |
531 | 531 |
532 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, | 532 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
533 events[0].event_type); | 533 events[0].event_type); |
534 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); | 534 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); |
535 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code); | 535 EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code); |
536 } | 536 } |
537 | 537 |
| 538 // Test a connection though a secure proxy. |
| 539 TEST_F(SocketStreamTest, SecureProxyConnectError) { |
| 540 MockClientSocketFactory mock_socket_factory; |
| 541 MockWrite data_writes[] = { |
| 542 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" |
| 543 "Host: example.com\r\n" |
| 544 "Proxy-Connection: keep-alive\r\n\r\n") |
| 545 }; |
| 546 MockRead data_reads[] = { |
| 547 MockRead("HTTP/1.1 200 Connection Established\r\n"), |
| 548 MockRead("Proxy-agent: Apache/2.2.8\r\n"), |
| 549 MockRead("\r\n"), |
| 550 // SocketStream::DoClose is run asynchronously. Socket can be read after |
| 551 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate |
| 552 // server doesn't close the connection. |
| 553 MockRead(true, ERR_IO_PENDING) |
| 554 }; |
| 555 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 556 data_writes, arraysize(data_writes)); |
| 557 mock_socket_factory.AddSocketDataProvider(&data); |
| 558 SSLSocketDataProvider ssl(false, ERR_SSL_PROTOCOL_ERROR); |
| 559 mock_socket_factory.AddSSLSocketDataProvider(&ssl); |
| 560 |
| 561 TestCompletionCallback callback; |
| 562 |
| 563 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 564 new SocketStreamEventRecorder(&callback)); |
| 565 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
| 566 base::Unretained(delegate.get()))); |
| 567 |
| 568 scoped_refptr<SocketStream> socket_stream( |
| 569 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 570 |
| 571 socket_stream->set_context(new TestURLRequestContext("https://myproxy:70")); |
| 572 MockHostResolver host_resolver; |
| 573 socket_stream->SetHostResolver(&host_resolver); |
| 574 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
| 575 |
| 576 socket_stream->Connect(); |
| 577 |
| 578 callback.WaitForResult(); |
| 579 |
| 580 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 581 ASSERT_EQ(3U, events.size()); |
| 582 |
| 583 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
| 584 events[0].event_type); |
| 585 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type); |
| 586 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, events[1].error_code); |
| 587 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[2].event_type); |
| 588 } |
| 589 |
| 590 // Test a connection though a secure proxy. |
| 591 TEST_F(SocketStreamTest, SecureProxyConnect) { |
| 592 MockClientSocketFactory mock_socket_factory; |
| 593 MockWrite data_writes[] = { |
| 594 MockWrite("CONNECT example.com:80 HTTP/1.1\r\n" |
| 595 "Host: example.com\r\n" |
| 596 "Proxy-Connection: keep-alive\r\n\r\n") |
| 597 }; |
| 598 MockRead data_reads[] = { |
| 599 MockRead("HTTP/1.1 200 Connection Established\r\n"), |
| 600 MockRead("Proxy-agent: Apache/2.2.8\r\n"), |
| 601 MockRead("\r\n"), |
| 602 // SocketStream::DoClose is run asynchronously. Socket can be read after |
| 603 // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate |
| 604 // server doesn't close the connection. |
| 605 MockRead(true, ERR_IO_PENDING) |
| 606 }; |
| 607 StaticSocketDataProvider data(data_reads, arraysize(data_reads), |
| 608 data_writes, arraysize(data_writes)); |
| 609 mock_socket_factory.AddSocketDataProvider(&data); |
| 610 SSLSocketDataProvider ssl(false, OK); |
| 611 mock_socket_factory.AddSSLSocketDataProvider(&ssl); |
| 612 |
| 613 TestCompletionCallback callback; |
| 614 |
| 615 scoped_ptr<SocketStreamEventRecorder> delegate( |
| 616 new SocketStreamEventRecorder(&callback)); |
| 617 delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose, |
| 618 base::Unretained(delegate.get()))); |
| 619 |
| 620 scoped_refptr<SocketStream> socket_stream( |
| 621 new SocketStream(GURL("ws://example.com/demo"), delegate.get())); |
| 622 |
| 623 socket_stream->set_context(new TestURLRequestContext("https://myproxy:70")); |
| 624 MockHostResolver host_resolver; |
| 625 socket_stream->SetHostResolver(&host_resolver); |
| 626 socket_stream->SetClientSocketFactory(&mock_socket_factory); |
| 627 |
| 628 socket_stream->Connect(); |
| 629 |
| 630 callback.WaitForResult(); |
| 631 |
| 632 const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents(); |
| 633 ASSERT_EQ(4U, events.size()); |
| 634 |
| 635 EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION, |
| 636 events[0].event_type); |
| 637 EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type); |
| 638 EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type); |
| 639 EXPECT_EQ(net::ERR_ABORTED, events[2].error_code); |
| 640 EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type); |
| 641 } |
| 642 |
538 } // namespace net | 643 } // namespace net |
OLD | NEW |