Index: net/http/http_network_transaction_unittest.cc |
=================================================================== |
--- net/http/http_network_transaction_unittest.cc (revision 58183) |
+++ net/http/http_network_transaction_unittest.cc (working copy) |
@@ -1722,6 +1722,65 @@ |
EXPECT_TRUE(response->auth_challenge.get() == NULL); |
} |
+// Test a SPDY get through an HTTPS Proxy. |
+TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyGet) { |
+ // Configure against https proxy server "proxy:70". |
+ SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70")); |
+ CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
+ session_deps.net_log = log.bound().net_log(); |
+ scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
+ |
+ scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); |
+ |
+ HttpRequestInfo request; |
+ request.method = "GET"; |
+ request.url = GURL("http://www.google.com/"); |
+ request.load_flags = 0; |
+ |
+ // fetch http://www.google.com/ via SPDY |
+ scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST, |
+ false)); |
+ MockWrite spdy_writes[] = { CreateMockWrite(*req) }; |
+ |
+ scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
+ scoped_ptr<spdy::SpdyFrame> data(ConstructSpdyBodyFrame(1, true)); |
+ MockRead spdy_reads[] = { |
+ CreateMockRead(*resp), |
+ CreateMockRead(*data), |
+ MockRead(true, 0, 0), |
+ }; |
+ |
+ scoped_refptr<DelayedSocketData> spdy_data( |
+ new DelayedSocketData( |
+ 1, // wait for one write to finish before reading. |
+ spdy_reads, arraysize(spdy_reads), |
+ spdy_writes, arraysize(spdy_writes))); |
+ session_deps.socket_factory.AddSocketDataProvider(spdy_data); |
+ |
+ SSLSocketDataProvider ssl(true, OK); |
+ ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
+ ssl.next_proto = "spdy/2"; |
+ ssl.was_npn_negotiated = true; |
+ session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); |
+ |
+ TestCompletionCallback callback1; |
+ |
+ int rv = trans->Start(&request, &callback1, log.bound()); |
+ EXPECT_EQ(ERR_IO_PENDING, rv); |
+ |
+ rv = callback1.WaitForResult(); |
+ EXPECT_EQ(OK, rv); |
+ |
+ const HttpResponseInfo* response = trans->GetResponseInfo(); |
+ ASSERT_TRUE(response != NULL); |
+ ASSERT_TRUE(response->headers != NULL); |
+ EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
+ |
+ std::string response_data; |
+ ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); |
+ EXPECT_EQ(net::kUploadData, response_data); |
+} |
+ |
// Test the challenge-response-retry sequence through an HTTPS Proxy |
TEST_F(HttpNetworkTransactionTest, HttpsProxyAuthRetry) { |
// Configure against https proxy server "proxy:70". |