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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 3417010: Integrate the SpdyProxyClientSocket into the HttpStreamRequest... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebasing again Created 10 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 1811 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 const HttpResponseInfo* response = trans->GetResponseInfo(); 1822 const HttpResponseInfo* response = trans->GetResponseInfo();
1823 ASSERT_TRUE(response != NULL); 1823 ASSERT_TRUE(response != NULL);
1824 ASSERT_TRUE(response->headers != NULL); 1824 ASSERT_TRUE(response->headers != NULL);
1825 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 1825 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1826 1826
1827 std::string response_data; 1827 std::string response_data;
1828 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 1828 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
1829 EXPECT_EQ(net::kUploadData, response_data); 1829 EXPECT_EQ(net::kUploadData, response_data);
1830 } 1830 }
1831 1831
1832 // Test a SPDY CONNECT through an HTTPS Proxy to an HTTPS (non-SPDY) Server.
1833 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectHttps) {
1834 // Configure against https proxy server "proxy:70".
1835 SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70"));
1836 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
1837 session_deps.net_log = log.bound().net_log();
1838 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
1839
1840 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session));
1841
1842 HttpRequestInfo request;
1843 request.method = "GET";
1844 request.url = GURL("https://www.google.com/");
1845 request.load_flags = 0;
1846
1847 // CONNECT to www.google.com:443 via SPDY
1848 scoped_ptr<spdy::SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1));
1849 // fetch https://www.google.com/ via HTTP
1850
1851 const char get[] = "GET / HTTP/1.1\r\n"
1852 "Host: www.google.com\r\n"
1853 "Connection: keep-alive\r\n\r\n";
1854 scoped_ptr<spdy::SpdyFrame> wrapped_get(
1855 ConstructSpdyBodyFrame(1, get, strlen(get), false));
1856 MockWrite spdy_writes[] = {
1857 CreateMockWrite(*connect, 1),
1858 CreateMockWrite(*wrapped_get, 3)
1859 };
1860
1861 scoped_ptr<spdy::SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1862 const char resp[] = "HTTP/1.1 200 OK\r\n"
1863 "Content-Length: 10\r\n\r\n";
1864
1865 scoped_ptr<spdy::SpdyFrame> wrapped_get_resp(
1866 ConstructSpdyBodyFrame(1, resp, strlen(resp), false));
1867 scoped_ptr<spdy::SpdyFrame> wrapped_body(
1868 ConstructSpdyBodyFrame(1, "1234567890", 10, false));
1869 MockRead spdy_reads[] = {
1870 CreateMockRead(*conn_resp, 2, true),
1871 CreateMockRead(*wrapped_get_resp, 4, true),
1872 CreateMockRead(*wrapped_body, 5, true),
1873 CreateMockRead(*wrapped_body, 6, true),
1874 MockRead(true, 0, 7),
1875 };
1876
1877 scoped_refptr<OrderedSocketData> spdy_data(
1878 new OrderedSocketData(
1879 spdy_reads, arraysize(spdy_reads),
1880 spdy_writes, arraysize(spdy_writes)));
1881 session_deps.socket_factory.AddSocketDataProvider(spdy_data);
1882
1883 SSLSocketDataProvider ssl(true, OK);
1884 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
1885 ssl.next_proto = "spdy/2";
1886 ssl.was_npn_negotiated = true;
1887 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl);
1888 SSLSocketDataProvider ssl2(true, OK);
1889 ssl2.was_npn_negotiated = false;
1890 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2);
1891
1892 TestCompletionCallback callback1;
1893
1894 int rv = trans->Start(&request, &callback1, log.bound());
1895 EXPECT_EQ(ERR_IO_PENDING, rv);
1896
1897 rv = callback1.WaitForResult();
1898 EXPECT_EQ(OK, rv);
1899
1900 const HttpResponseInfo* response = trans->GetResponseInfo();
1901 ASSERT_TRUE(response != NULL);
1902 ASSERT_TRUE(response->headers != NULL);
1903 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1904
1905 std::string response_data;
1906 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
1907 EXPECT_EQ("1234567890", response_data);
1908 }
1909
1910 // Test a SPDY CONNECT through an HTTPS Proxy to a SPDY server.
1911 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectSpdy) {
1912 // Configure against https proxy server "proxy:70".
1913 SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70"));
1914 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
1915 session_deps.net_log = log.bound().net_log();
1916 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
1917
1918 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session));
1919
1920 HttpRequestInfo request;
1921 request.method = "GET";
1922 request.url = GURL("https://www.google.com/");
1923 request.load_flags = 0;
1924
1925 // CONNECT to www.google.com:443 via SPDY
1926 scoped_ptr<spdy::SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1));
1927 // fetch https://www.google.com/ via SPDY
1928 const char* const kMyUrl = "https://www.google.com/";
1929 scoped_ptr<spdy::SpdyFrame> get(ConstructSpdyGet(kMyUrl, false, 1, LOWEST));
1930 scoped_ptr<spdy::SpdyFrame> wrapped_get(ConstructWrappedSpdyFrame(get, 1));
1931 MockWrite spdy_writes[] = {
1932 CreateMockWrite(*connect, 1),
1933 CreateMockWrite(*wrapped_get, 3)
1934 };
1935
1936 scoped_ptr<spdy::SpdyFrame> conn_resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1937 scoped_ptr<spdy::SpdyFrame> get_resp(ConstructSpdyGetSynReply(NULL, 0, 1));
1938 scoped_ptr<spdy::SpdyFrame> wrapped_get_resp(
1939 ConstructWrappedSpdyFrame(get_resp, 1));
1940 scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true));
1941 scoped_ptr<spdy::SpdyFrame> wrapped_body(ConstructWrappedSpdyFrame(body, 1));
1942 MockRead spdy_reads[] = {
1943 CreateMockRead(*conn_resp, 2, true),
1944 CreateMockRead(*wrapped_get_resp, 4, true),
1945 CreateMockRead(*wrapped_body, 5, true),
1946 MockRead(true, 0, 1),
1947 };
1948
1949 scoped_refptr<OrderedSocketData> spdy_data(
1950 new OrderedSocketData(
1951 spdy_reads, arraysize(spdy_reads),
1952 spdy_writes, arraysize(spdy_writes)));
1953 session_deps.socket_factory.AddSocketDataProvider(spdy_data);
1954
1955 SSLSocketDataProvider ssl(true, OK);
1956 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
1957 ssl.next_proto = "spdy/2";
1958 ssl.was_npn_negotiated = true;
1959 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl);
1960 SSLSocketDataProvider ssl2(true, OK);
1961 ssl2.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
1962 ssl2.next_proto = "spdy/2";
1963 ssl2.was_npn_negotiated = true;
1964 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2);
1965
1966 TestCompletionCallback callback1;
1967
1968 int rv = trans->Start(&request, &callback1, log.bound());
1969 EXPECT_EQ(ERR_IO_PENDING, rv);
1970
1971 rv = callback1.WaitForResult();
1972 EXPECT_EQ(OK, rv);
1973
1974 const HttpResponseInfo* response = trans->GetResponseInfo();
1975 ASSERT_TRUE(response != NULL);
1976 ASSERT_TRUE(response->headers != NULL);
1977 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1978
1979 std::string response_data;
1980 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
1981 EXPECT_EQ(net::kUploadData, response_data);
1982 }
1983
1984 // Test a SPDY CONNECT failure through an HTTPS Proxy.
1985 TEST_F(HttpNetworkTransactionTest, HttpsProxySpdyConnectFailure) {
1986 // Configure against https proxy server "proxy:70".
1987 SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70"));
1988 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
1989 session_deps.net_log = log.bound().net_log();
1990 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
1991
1992 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session));
1993
1994 HttpRequestInfo request;
1995 request.method = "GET";
1996 request.url = GURL("https://www.google.com/");
1997 request.load_flags = 0;
1998
1999 // CONNECT to www.google.com:443 via SPDY
2000 scoped_ptr<spdy::SpdyFrame> connect(ConstructSpdyConnect(NULL, 0, 1));
2001 scoped_ptr<spdy::SpdyFrame> get(ConstructSpdyRstStream(1, spdy::CANCEL));
2002
2003 MockWrite spdy_writes[] = {
2004 CreateMockWrite(*connect, 1),
2005 CreateMockWrite(*get, 3),
2006 };
2007
2008 scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdySynReplyError(1));
2009 scoped_ptr<spdy::SpdyFrame> data(ConstructSpdyBodyFrame(1, true));
2010 MockRead spdy_reads[] = {
2011 CreateMockRead(*resp, 2, true),
2012 MockRead(true, 0, 4),
2013 };
2014
2015 scoped_refptr<OrderedSocketData> spdy_data(
2016 new OrderedSocketData(
2017 spdy_reads, arraysize(spdy_reads),
2018 spdy_writes, arraysize(spdy_writes)));
2019 session_deps.socket_factory.AddSocketDataProvider(spdy_data);
2020
2021 SSLSocketDataProvider ssl(true, OK);
2022 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
2023 ssl.next_proto = "spdy/2";
2024 ssl.was_npn_negotiated = true;
2025 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl);
2026 SSLSocketDataProvider ssl2(true, OK);
2027 ssl2.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
2028 ssl2.next_proto = "spdy/2";
2029 ssl2.was_npn_negotiated = true;
2030 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2);
2031
2032 TestCompletionCallback callback1;
2033
2034 int rv = trans->Start(&request, &callback1, log.bound());
2035 EXPECT_EQ(ERR_IO_PENDING, rv);
2036
2037 rv = callback1.WaitForResult();
2038 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, rv);
2039
2040 const HttpResponseInfo* response = trans->GetResponseInfo();
2041 ASSERT_TRUE(response == NULL);
2042 }
2043
1832 // Test the challenge-response-retry sequence through an HTTPS Proxy 2044 // Test the challenge-response-retry sequence through an HTTPS Proxy
1833 TEST_F(HttpNetworkTransactionTest, HttpsProxyAuthRetry) { 2045 TEST_F(HttpNetworkTransactionTest, HttpsProxyAuthRetry) {
1834 // Configure against https proxy server "proxy:70". 2046 // Configure against https proxy server "proxy:70".
1835 SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70")); 2047 SessionDependencies session_deps(CreateFixedProxyService("https://proxy:70"));
1836 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 2048 CapturingBoundNetLog log(CapturingNetLog::kUnbounded);
1837 session_deps.net_log = log.bound().net_log(); 2049 session_deps.net_log = log.bound().net_log();
1838 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); 2050 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
1839 2051
1840 HttpRequestInfo request; 2052 HttpRequestInfo request;
1841 request.method = "GET"; 2053 request.method = "GET";
(...skipping 5613 matching lines...) Expand 10 before | Expand all | Expand 10 after
7455 std::string response_data; 7667 std::string response_data;
7456 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 7668 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
7457 EXPECT_EQ("hello world", response_data); 7669 EXPECT_EQ("hello world", response_data);
7458 7670
7459 HttpStreamFactory::set_next_protos(""); 7671 HttpStreamFactory::set_next_protos("");
7460 HttpStreamFactory::set_use_alternate_protocols(false); 7672 HttpStreamFactory::set_use_alternate_protocols(false);
7461 HttpStreamFactory::set_create_new_spdy_session_for_http(true); 7673 HttpStreamFactory::set_create_new_spdy_session_for_http(true);
7462 } 7674 }
7463 7675
7464 } // namespace net 7676 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698