| 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/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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 spdy::SpdyFramer::set_enable_compression_default(true); | 136 spdy::SpdyFramer::set_enable_compression_default(true); |
| 137 // Empty the current queue. | 137 // Empty the current queue. |
| 138 MessageLoop::current()->RunAllPending(); | 138 MessageLoop::current()->RunAllPending(); |
| 139 PlatformTest::TearDown(); | 139 PlatformTest::TearDown(); |
| 140 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 140 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 141 MessageLoop::current()->RunAllPending(); | 141 MessageLoop::current()->RunAllPending(); |
| 142 } | 142 } |
| 143 | 143 |
| 144 void KeepAliveConnectionResendRequestTest(const MockRead& read_failure); | 144 void KeepAliveConnectionResendRequestTest(const MockRead& read_failure); |
| 145 | 145 |
| 146 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], | 146 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], |
| 147 size_t reads_count) { | 147 size_t data_count) { |
| 148 SimpleGetHelperResult out; | 148 SimpleGetHelperResult out; |
| 149 | 149 |
| 150 HttpRequestInfo request; | 150 HttpRequestInfo request; |
| 151 request.method = "GET"; | 151 request.method = "GET"; |
| 152 request.url = GURL("http://www.google.com/"); | 152 request.url = GURL("http://www.google.com/"); |
| 153 request.load_flags = 0; | 153 request.load_flags = 0; |
| 154 | 154 |
| 155 SessionDependencies session_deps; | 155 SessionDependencies session_deps; |
| 156 scoped_ptr<HttpTransaction> trans( | 156 scoped_ptr<HttpTransaction> trans( |
| 157 new HttpNetworkTransaction(CreateSession(&session_deps))); | 157 new HttpNetworkTransaction(CreateSession(&session_deps))); |
| 158 | 158 |
| 159 StaticSocketDataProvider data(data_reads, reads_count, NULL, 0); | 159 for (size_t i = 0; i < data_count; ++i) { |
| 160 session_deps.socket_factory.AddSocketDataProvider(&data); | 160 session_deps.socket_factory.AddSocketDataProvider(data[i]); |
| 161 } |
| 161 | 162 |
| 162 TestCompletionCallback callback; | 163 TestCompletionCallback callback; |
| 163 | 164 |
| 164 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); | 165 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); |
| 165 EXPECT_TRUE(log.bound().IsLoggingAllEvents()); | 166 EXPECT_TRUE(log.bound().IsLoggingAllEvents()); |
| 166 int rv = trans->Start(&request, &callback, log.bound()); | 167 int rv = trans->Start(&request, &callback, log.bound()); |
| 167 EXPECT_EQ(ERR_IO_PENDING, rv); | 168 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 168 | 169 |
| 169 out.rv = callback.WaitForResult(); | 170 out.rv = callback.WaitForResult(); |
| 170 if (out.rv != OK) | 171 if (out.rv != OK) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 199 NetLogHttpRequestParameter* request_params = | 200 NetLogHttpRequestParameter* request_params = |
| 200 static_cast<NetLogHttpRequestParameter*>(entry.extra_parameters.get()); | 201 static_cast<NetLogHttpRequestParameter*>(entry.extra_parameters.get()); |
| 201 EXPECT_EQ("GET / HTTP/1.1\r\n", request_params->GetLine()); | 202 EXPECT_EQ("GET / HTTP/1.1\r\n", request_params->GetLine()); |
| 202 EXPECT_EQ("Host: www.google.com\r\n" | 203 EXPECT_EQ("Host: www.google.com\r\n" |
| 203 "Connection: keep-alive\r\n\r\n", | 204 "Connection: keep-alive\r\n\r\n", |
| 204 request_params->GetHeaders().ToString()); | 205 request_params->GetHeaders().ToString()); |
| 205 | 206 |
| 206 return out; | 207 return out; |
| 207 } | 208 } |
| 208 | 209 |
| 210 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], |
| 211 size_t reads_count) { |
| 212 StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); |
| 213 StaticSocketDataProvider* data[] = { &reads }; |
| 214 return SimpleGetHelperForData(data, 1); |
| 215 } |
| 216 |
| 209 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, | 217 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, |
| 210 int expected_status); | 218 int expected_status); |
| 211 | 219 |
| 212 void ConnectStatusHelper(const MockRead& status); | 220 void ConnectStatusHelper(const MockRead& status); |
| 213 }; | 221 }; |
| 214 | 222 |
| 215 // Fill |str| with a long header list that consumes >= |size| bytes. | 223 // Fill |str| with a long header list that consumes >= |size| bytes. |
| 216 void FillLargeHeadersString(std::string* str, int size) { | 224 void FillLargeHeadersString(std::string* str, int size) { |
| 217 const char* row = | 225 const char* row = |
| 218 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; | 226 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; |
| (...skipping 8678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8897 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8905 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
| 8898 EXPECT_TRUE(response->was_fetched_via_spdy); | 8906 EXPECT_TRUE(response->was_fetched_via_spdy); |
| 8899 EXPECT_TRUE(response->was_npn_negotiated); | 8907 EXPECT_TRUE(response->was_npn_negotiated); |
| 8900 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 8908 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
| 8901 EXPECT_EQ("hello!", response_data); | 8909 EXPECT_EQ("hello!", response_data); |
| 8902 | 8910 |
| 8903 HttpStreamFactory::set_next_protos(""); | 8911 HttpStreamFactory::set_next_protos(""); |
| 8904 HttpStreamFactory::set_use_alternate_protocols(false); | 8912 HttpStreamFactory::set_use_alternate_protocols(false); |
| 8905 } | 8913 } |
| 8906 | 8914 |
| 8915 TEST_F(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { |
| 8916 MockRead data_reads1[] = { |
| 8917 MockRead(false, ERR_PIPELINE_EVICTION), |
| 8918 }; |
| 8919 MockRead data_reads2[] = { |
| 8920 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 8921 MockRead("hello world"), |
| 8922 MockRead(false, OK), |
| 8923 }; |
| 8924 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); |
| 8925 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 8926 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
| 8927 |
| 8928 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 8929 |
| 8930 EXPECT_EQ(OK, out.rv); |
| 8931 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 8932 EXPECT_EQ("hello world", out.response_data); |
| 8933 } |
| 8934 |
| 8935 TEST_F(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { |
| 8936 MockWrite data_writes1[] = { |
| 8937 MockWrite(false, ERR_PIPELINE_EVICTION), |
| 8938 }; |
| 8939 MockWrite data_writes2[] = { |
| 8940 MockWrite("GET / HTTP/1.1\r\n" |
| 8941 "Host: www.google.com\r\n" |
| 8942 "Connection: keep-alive\r\n\r\n"), |
| 8943 }; |
| 8944 MockRead data_reads2[] = { |
| 8945 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 8946 MockRead("hello world"), |
| 8947 MockRead(false, OK), |
| 8948 }; |
| 8949 StaticSocketDataProvider data1(NULL, 0, |
| 8950 data_writes1, arraysize(data_writes1)); |
| 8951 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 8952 data_writes2, arraysize(data_writes2)); |
| 8953 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
| 8954 |
| 8955 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 8956 |
| 8957 EXPECT_EQ(OK, out.rv); |
| 8958 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 8959 EXPECT_EQ("hello world", out.response_data); |
| 8960 } |
| 8961 |
| 8907 } // namespace net | 8962 } // namespace net |
| OLD | NEW |