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 25 matching lines...) Expand all Loading... |
196 NetLogHttpRequestParameter* request_params = | 197 NetLogHttpRequestParameter* request_params = |
197 static_cast<NetLogHttpRequestParameter*>(entry.extra_parameters.get()); | 198 static_cast<NetLogHttpRequestParameter*>(entry.extra_parameters.get()); |
198 EXPECT_EQ("GET / HTTP/1.1\r\n", request_params->GetLine()); | 199 EXPECT_EQ("GET / HTTP/1.1\r\n", request_params->GetLine()); |
199 EXPECT_EQ("Host: www.google.com\r\n" | 200 EXPECT_EQ("Host: www.google.com\r\n" |
200 "Connection: keep-alive\r\n\r\n", | 201 "Connection: keep-alive\r\n\r\n", |
201 request_params->GetHeaders().ToString()); | 202 request_params->GetHeaders().ToString()); |
202 | 203 |
203 return out; | 204 return out; |
204 } | 205 } |
205 | 206 |
| 207 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[], |
| 208 size_t reads_count) { |
| 209 StaticSocketDataProvider reads(data_reads, reads_count, NULL, 0); |
| 210 StaticSocketDataProvider* data[] = { &reads }; |
| 211 return SimpleGetHelperForData(data, 1); |
| 212 } |
| 213 |
206 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, | 214 void ConnectStatusHelperWithExpectedStatus(const MockRead& status, |
207 int expected_status); | 215 int expected_status); |
208 | 216 |
209 void ConnectStatusHelper(const MockRead& status); | 217 void ConnectStatusHelper(const MockRead& status); |
210 }; | 218 }; |
211 | 219 |
212 // Fill |str| with a long header list that consumes >= |size| bytes. | 220 // Fill |str| with a long header list that consumes >= |size| bytes. |
213 void FillLargeHeadersString(std::string* str, int size) { | 221 void FillLargeHeadersString(std::string* str, int size) { |
214 const char* row = | 222 const char* row = |
215 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; | 223 "SomeHeaderName: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"; |
(...skipping 8678 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8894 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 8902 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
8895 EXPECT_TRUE(response->was_fetched_via_spdy); | 8903 EXPECT_TRUE(response->was_fetched_via_spdy); |
8896 EXPECT_TRUE(response->was_npn_negotiated); | 8904 EXPECT_TRUE(response->was_npn_negotiated); |
8897 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); | 8905 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); |
8898 EXPECT_EQ("hello!", response_data); | 8906 EXPECT_EQ("hello!", response_data); |
8899 | 8907 |
8900 HttpStreamFactory::set_next_protos(""); | 8908 HttpStreamFactory::set_next_protos(""); |
8901 HttpStreamFactory::set_use_alternate_protocols(false); | 8909 HttpStreamFactory::set_use_alternate_protocols(false); |
8902 } | 8910 } |
8903 | 8911 |
| 8912 TEST_F(HttpNetworkTransactionTest, ReadPipelineEvictionFallback) { |
| 8913 MockRead data_reads1[] = { |
| 8914 MockRead(false, ERR_PIPELINE_EVICTION), |
| 8915 }; |
| 8916 MockRead data_reads2[] = { |
| 8917 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 8918 MockRead("hello world"), |
| 8919 MockRead(false, OK), |
| 8920 }; |
| 8921 StaticSocketDataProvider data1(data_reads1, arraysize(data_reads1), NULL, 0); |
| 8922 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), NULL, 0); |
| 8923 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
| 8924 |
| 8925 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 8926 |
| 8927 EXPECT_EQ(OK, out.rv); |
| 8928 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 8929 EXPECT_EQ("hello world", out.response_data); |
| 8930 } |
| 8931 |
| 8932 TEST_F(HttpNetworkTransactionTest, SendPipelineEvictionFallback) { |
| 8933 MockWrite data_writes1[] = { |
| 8934 MockWrite(false, ERR_PIPELINE_EVICTION), |
| 8935 }; |
| 8936 MockWrite data_writes2[] = { |
| 8937 MockWrite("GET / HTTP/1.1\r\n" |
| 8938 "Host: www.google.com\r\n" |
| 8939 "Connection: keep-alive\r\n\r\n"), |
| 8940 }; |
| 8941 MockRead data_reads2[] = { |
| 8942 MockRead("HTTP/1.0 200 OK\r\n\r\n"), |
| 8943 MockRead("hello world"), |
| 8944 MockRead(false, OK), |
| 8945 }; |
| 8946 StaticSocketDataProvider data1(NULL, 0, |
| 8947 data_writes1, arraysize(data_writes1)); |
| 8948 StaticSocketDataProvider data2(data_reads2, arraysize(data_reads2), |
| 8949 data_writes2, arraysize(data_writes2)); |
| 8950 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
| 8951 |
| 8952 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
| 8953 |
| 8954 EXPECT_EQ(OK, out.rv); |
| 8955 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
| 8956 EXPECT_EQ("hello world", out.response_data); |
| 8957 } |
| 8958 |
8904 } // namespace net | 8959 } // namespace net |
OLD | NEW |