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

Unified Diff: net/socket_stream/socket_stream_unittest.cc

Issue 7484065: secure proxy support in websocket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: net/socket_stream/socket_stream_unittest.cc
diff --git a/net/socket_stream/socket_stream_unittest.cc b/net/socket_stream/socket_stream_unittest.cc
index 090ecff3a9402fc2c4403f708e99007363d1f500..80bff3ca39f7886116c3998a0d3f47460ffe0e6d 100644
--- a/net/socket_stream/socket_stream_unittest.cc
+++ b/net/socket_stream/socket_stream_unittest.cc
@@ -535,4 +535,109 @@ TEST_F(SocketStreamTest, SwitchAfterPending) {
EXPECT_EQ(net::ERR_PROTOCOL_SWITCHED, events[1].error_code);
}
+// Test a connection though a secure proxy.
+TEST_F(SocketStreamTest, SecureProxyConnectError) {
+ MockClientSocketFactory mock_socket_factory;
+ MockWrite data_writes[] = {
+ MockWrite("CONNECT example.com:80 HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n")
+ };
+ MockRead data_reads[] = {
+ MockRead("HTTP/1.1 200 Connection Established\r\n"),
+ MockRead("Proxy-agent: Apache/2.2.8\r\n"),
+ MockRead("\r\n"),
+ // SocketStream::DoClose is run asynchronously. Socket can be read after
+ // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate
+ // server doesn't close the connection.
+ MockRead(true, ERR_IO_PENDING)
+ };
+ StaticSocketDataProvider data(data_reads, arraysize(data_reads),
+ data_writes, arraysize(data_writes));
+ mock_socket_factory.AddSocketDataProvider(&data);
+ SSLSocketDataProvider ssl(false, ERR_SSL_PROTOCOL_ERROR);
+ mock_socket_factory.AddSSLSocketDataProvider(&ssl);
+
+ TestCompletionCallback callback;
+
+ scoped_ptr<SocketStreamEventRecorder> delegate(
+ new SocketStreamEventRecorder(&callback));
+ delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
+ base::Unretained(delegate.get())));
+
+ scoped_refptr<SocketStream> socket_stream(
+ new SocketStream(GURL("ws://example.com/demo"), delegate.get()));
+
+ socket_stream->set_context(new TestURLRequestContext("https://myproxy:70"));
+ MockHostResolver host_resolver;
+ socket_stream->SetHostResolver(&host_resolver);
+ socket_stream->SetClientSocketFactory(&mock_socket_factory);
+
+ socket_stream->Connect();
+
+ callback.WaitForResult();
+
+ const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
+ ASSERT_EQ(3U, events.size());
+
+ EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
+ events[0].event_type);
+ EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[1].event_type);
+ EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, events[1].error_code);
+ EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[2].event_type);
+}
+
+// Test a connection though a secure proxy.
+TEST_F(SocketStreamTest, SecureProxyConnect) {
+ MockClientSocketFactory mock_socket_factory;
+ MockWrite data_writes[] = {
+ MockWrite("CONNECT example.com:80 HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n")
+ };
+ MockRead data_reads[] = {
+ MockRead("HTTP/1.1 200 Connection Established\r\n"),
+ MockRead("Proxy-agent: Apache/2.2.8\r\n"),
+ MockRead("\r\n"),
+ // SocketStream::DoClose is run asynchronously. Socket can be read after
+ // "\r\n". We have to give ERR_IO_PENDING to SocketStream then to indicate
+ // server doesn't close the connection.
+ MockRead(true, ERR_IO_PENDING)
+ };
+ StaticSocketDataProvider data(data_reads, arraysize(data_reads),
+ data_writes, arraysize(data_writes));
+ mock_socket_factory.AddSocketDataProvider(&data);
+ SSLSocketDataProvider ssl(false, OK);
+ mock_socket_factory.AddSSLSocketDataProvider(&ssl);
+
+ TestCompletionCallback callback;
+
+ scoped_ptr<SocketStreamEventRecorder> delegate(
+ new SocketStreamEventRecorder(&callback));
+ delegate->SetOnConnected(base::Bind(&SocketStreamEventRecorder::DoClose,
+ base::Unretained(delegate.get())));
+
+ scoped_refptr<SocketStream> socket_stream(
+ new SocketStream(GURL("ws://example.com/demo"), delegate.get()));
+
+ socket_stream->set_context(new TestURLRequestContext("https://myproxy:70"));
+ MockHostResolver host_resolver;
+ socket_stream->SetHostResolver(&host_resolver);
+ socket_stream->SetClientSocketFactory(&mock_socket_factory);
+
+ socket_stream->Connect();
+
+ callback.WaitForResult();
+
+ const std::vector<SocketStreamEvent>& events = delegate->GetSeenEvents();
+ ASSERT_EQ(4U, events.size());
+
+ EXPECT_EQ(SocketStreamEvent::EVENT_START_OPEN_CONNECTION,
+ events[0].event_type);
+ EXPECT_EQ(SocketStreamEvent::EVENT_CONNECTED, events[1].event_type);
+ EXPECT_EQ(SocketStreamEvent::EVENT_ERROR, events[2].event_type);
+ EXPECT_EQ(net::ERR_ABORTED, events[2].error_code);
+ EXPECT_EQ(SocketStreamEvent::EVENT_CLOSE, events[3].event_type);
+}
+
} // namespace net
« net/socket_stream/socket_stream.cc ('K') | « net/socket_stream/socket_stream_metrics.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698