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 | |
643 } // namespace net | 538 } // namespace net |
OLD | NEW |