OLD | NEW |
---|---|
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 <math.h> // ceil | 5 #include <math.h> // ceil |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "net/base/completion_callback.h" | 8 #include "net/base/completion_callback.h" |
9 #include "net/base/mock_host_resolver.h" | 9 #include "net/base/mock_host_resolver.h" |
10 #include "net/base/ssl_config_service_defaults.h" | 10 #include "net/base/ssl_config_service_defaults.h" |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
81 | 81 |
82 virtual void TearDown() { | 82 virtual void TearDown() { |
83 // Empty the current queue. | 83 // Empty the current queue. |
84 MessageLoop::current()->RunAllPending(); | 84 MessageLoop::current()->RunAllPending(); |
85 PlatformTest::TearDown(); | 85 PlatformTest::TearDown(); |
86 } | 86 } |
87 | 87 |
88 protected: | 88 protected: |
89 void KeepAliveConnectionResendRequestTest(const MockRead& read_failure); | 89 void KeepAliveConnectionResendRequestTest(const MockRead& read_failure); |
90 | 90 |
91 struct SimpleGetHelperResult { | 91 struct TransactionHelperResult { |
92 int rv; | 92 int rv; |
93 std::string status_line; | 93 std::string status_line; |
94 std::string response_data; | 94 std::string response_data; |
95 }; | 95 }; |
96 | 96 |
97 SimpleGetHelperResult SimpleGetHelper(MockRead data_reads[]) { | 97 TransactionHelperResult TransactionHelper(const HttpRequestInfo& request, |
98 SimpleGetHelperResult out; | 98 MockRead reads[], |
99 MockWrite writes[]) { | |
100 TransactionHelperResult out; | |
101 | |
102 // We disable SSL for this test. | |
103 FlipSession::SetSSLMode(false); | |
99 | 104 |
100 SessionDependencies session_deps; | 105 SessionDependencies session_deps; |
101 scoped_ptr<FlipNetworkTransaction> trans( | 106 scoped_ptr<FlipNetworkTransaction> trans( |
102 new FlipNetworkTransaction(CreateSession(&session_deps))); | 107 new FlipNetworkTransaction(CreateSession(&session_deps))); |
103 | 108 |
104 HttpRequestInfo request; | 109 StaticMockSocket data(reads, writes); |
105 request.method = "GET"; | |
106 request.url = GURL("http://www.google.com/"); | |
107 request.load_flags = 0; | |
108 | |
109 StaticMockSocket data(data_reads, NULL); | |
110 session_deps.socket_factory.AddMockSocket(&data); | 110 session_deps.socket_factory.AddMockSocket(&data); |
111 | 111 |
112 TestCompletionCallback callback; | 112 TestCompletionCallback callback; |
113 | 113 |
114 int rv = trans->Start(&request, &callback, NULL); | 114 int rv = trans->Start(&request, &callback, NULL); |
115 EXPECT_EQ(ERR_IO_PENDING, rv); | 115 EXPECT_EQ(ERR_IO_PENDING, rv); |
116 | 116 |
117 out.rv = callback.WaitForResult(); | 117 out.rv = callback.WaitForResult(); |
118 if (out.rv != OK) | 118 if (out.rv != OK) |
119 return out; | 119 return out; |
(...skipping 17 matching lines...) Expand all Loading... | |
137 //----------------------------------------------------------------------------- | 137 //----------------------------------------------------------------------------- |
138 | 138 |
139 // Verify FlipNetworkTransaction constructor. | 139 // Verify FlipNetworkTransaction constructor. |
140 TEST_F(FlipNetworkTransactionTest, Constructor) { | 140 TEST_F(FlipNetworkTransactionTest, Constructor) { |
141 SessionDependencies session_deps; | 141 SessionDependencies session_deps; |
142 scoped_refptr<net::HttpNetworkSession> session = | 142 scoped_refptr<net::HttpNetworkSession> session = |
143 CreateSession(&session_deps); | 143 CreateSession(&session_deps); |
144 scoped_ptr<HttpTransaction> trans(new FlipNetworkTransaction(session)); | 144 scoped_ptr<HttpTransaction> trans(new FlipNetworkTransaction(session)); |
145 } | 145 } |
146 | 146 |
147 TEST_F(FlipNetworkTransactionTest, Connect) { | 147 TEST_F(FlipNetworkTransactionTest, Get) { |
148 static const unsigned char syn[] = { | |
149 0x80, 0x01, 0x00, 0x01, // header | |
150 0x01, 0x00, 0x00, 0x30, // FIN, len | |
151 0x00, 0x00, 0x00, 0x01, // stream id | |
152 0xc0, 0x00, 0x00, 0x03, // 4 headers | |
153 0x00, 0x06, 'm', 'e', 't', 'h', 'o', 'd', // "hello" | |
154 0x00, 0x03, 'G', 'E', 'T', // "bye" | |
155 0x00, 0x03, 'u', 'r', 'l', // "url" | |
156 0x00, 0x01, '/', // "/" | |
157 0x00, 0x07, 'v', 'e', 'r', 's', 'i', 'o', 'n', // "status" | |
158 0x00, 0x08, 'H', 'T', 'T', 'P', '/', '1', '.', '1', // "200" | |
159 }; | |
160 | |
148 static const unsigned char syn_reply[] = { | 161 static const unsigned char syn_reply[] = { |
149 0x80, 0x01, 0x00, 0x02, // header | 162 0x80, 0x01, 0x00, 0x02, // header |
150 0x00, 0x00, 0x00, 0x45, | 163 0x00, 0x00, 0x00, 0x45, |
151 0x00, 0x00, 0x00, 0x01, | 164 0x00, 0x00, 0x00, 0x01, |
152 0x00, 0x00, 0x00, 0x04, // 4 headers | 165 0x00, 0x00, 0x00, 0x04, // 4 headers |
153 0x00, 0x05, 'h', 'e', 'l', 'l', 'o', // "hello" | 166 0x00, 0x05, 'h', 'e', 'l', 'l', 'o', // "hello" |
154 0x00, 0x03, 'b', 'y', 'e', // "bye" | 167 0x00, 0x03, 'b', 'y', 'e', // "bye" |
155 0x00, 0x06, 's', 't', 'a', 't', 'u', 's', // "status" | 168 0x00, 0x06, 's', 't', 'a', 't', 'u', 's', // "status" |
156 0x00, 0x03, '2', '0', '0', // "200" | 169 0x00, 0x03, '2', '0', '0', // "200" |
157 0x00, 0x03, 'u', 'r', 'l', // "url" | 170 0x00, 0x03, 'u', 'r', 'l', // "url" |
158 0x00, 0x0a, '/', 'i', 'n', 'd', 'e', 'x', '.', 'p', 'h', 'p', // "HTTP/1.1" | 171 0x00, 0x0a, '/', 'i', 'n', 'd', 'e', 'x', '.', 'p', 'h', 'p', // "HTTP/1.1" |
159 0x00, 0x07, 'v', 'e', 'r', 's', 'i', 'o', 'n', // "version" | 172 0x00, 0x07, 'v', 'e', 'r', 's', 'i', 'o', 'n', // "version" |
160 0x00, 0x08, 'H', 'T', 'T', 'P', '/', '1', '.', '1', // "HTTP/1.1" | 173 0x00, 0x08, 'H', 'T', 'T', 'P', '/', '1', '.', '1', // "HTTP/1.1" |
161 }; | 174 }; |
162 static const unsigned char body_frame[] = { | 175 static const unsigned char body_frame[] = { |
163 0x00, 0x00, 0x00, 0x01, // header | 176 0x00, 0x00, 0x00, 0x01, // header |
164 0x00, 0x00, 0x00, 0x06, | 177 0x00, 0x00, 0x00, 0x06, |
165 'h', 'e', 'l', 'l', 'o', '!', // "hello" | 178 'h', 'e', 'l', 'l', 'o', '!', // "hello" |
166 }; | 179 }; |
167 static const unsigned char fin_frame[] = { | 180 static const unsigned char fin_frame[] = { |
168 0x80, 0x01, 0x00, 0x03, // header | 181 0x80, 0x01, 0x00, 0x03, // header |
169 0x00, 0x00, 0x00, 0x08, | 182 0x00, 0x00, 0x00, 0x08, |
170 0x00, 0x00, 0x00, 0x01, | 183 0x00, 0x00, 0x00, 0x01, |
171 0x00, 0x00, 0x00, 0x00, | 184 0x00, 0x00, 0x00, 0x00, |
172 }; | 185 }; |
173 | 186 |
187 MockWrite writes[] = { | |
188 MockWrite(true, reinterpret_cast<const char*>(syn), sizeof(syn)), | |
189 }; | |
190 | |
191 MockRead reads[] = { | |
192 MockRead(true, reinterpret_cast<const char*>(syn_reply), sizeof(syn_reply)), | |
193 MockWrite(true, reinterpret_cast<const char*>(body_frame), | |
194 sizeof(body_frame)), | |
195 MockWrite(true, reinterpret_cast<const char*>(fin_frame), | |
196 sizeof(fin_frame)), | |
197 MockRead(true, 0, 0) // EOF | |
198 }; | |
199 | |
200 HttpRequestInfo request; | |
201 request.method = "GET"; | |
202 request.url = GURL("http://www.google.com/"); | |
203 request.load_flags = 0; | |
204 TransactionHelperResult out = TransactionHelper(request, reads, writes); | |
205 EXPECT_EQ(OK, out.rv); | |
206 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | |
207 EXPECT_EQ("hello!", out.response_data); | |
208 } | |
209 | |
210 // Test that a simple POST works. | |
211 TEST_F(FlipNetworkTransactionTest, Post) { | |
212 static const char upload[] = { "hello world" }; | |
213 | |
214 // Setup the request | |
215 HttpRequestInfo request; | |
216 request.method = "POST"; | |
217 request.url = GURL("http://www.google.com/"); | |
218 request.upload_data = new UploadData(); | |
219 request.upload_data->AppendBytes(upload, sizeof(upload)); | |
220 | |
221 // TODO(mbelshe): Hook up the write validation. | |
222 | |
223 //static const unsigned char syn[] = { | |
224 // 0x80, 0x01, 0x00, 0x01, // header | |
225 // 0x00, 0x00, 0x00, 0x30, // FIN, len | |
226 // 0x00, 0x00, 0x00, 0x01, // stream i d | |
227 // 0xc0, 0x00, 0x00, 0x03, // 4 header s | |
228 // 0x00, 0x06, 'm', 'e', 't', 'h', 'o', 'd', // "hello" | |
229 // 0x00, 0x03, 'G', 'E', 'T', // "bye" | |
230 // 0x00, 0x03, 'u', 'r', 'l', // "url" | |
231 // 0x00, 0x01, '/', // "/" | |
232 // 0x00, 0x07, 'v', 'e', 'r', 's', 'i', 'o', 'n', // "status" | |
233 // 0x00, 0x08, 'H', 'T', 'T', 'P', '/', '1', '.', '1', // "200" | |
234 //}; | |
235 | |
236 //static const unsigned char upload_frame[] = { | |
237 // 0x00, 0x00, 0x00, 0x01, // header | |
238 // 0x01, 0x00, 0x00, 0x06, // FIN flag | |
239 // 'h', 'e', 'l', 'l', 'o', '!', // "hello" | |
240 //}; | |
241 | |
242 // The response | |
243 static const unsigned char syn_reply[] = { | |
244 0x80, 0x01, 0x00, 0x02, // header | |
245 0x00, 0x00, 0x00, 0x45, | |
246 0x00, 0x00, 0x00, 0x01, | |
247 0x00, 0x00, 0x00, 0x04, // 4 headers | |
248 0x00, 0x05, 'h', 'e', 'l', 'l', 'o', // "hello" | |
249 0x00, 0x03, 'b', 'y', 'e', // "bye" | |
250 0x00, 0x06, 's', 't', 'a', 't', 'u', 's', // "status" | |
251 0x00, 0x03, '2', '0', '0', // "200" | |
252 0x00, 0x03, 'u', 'r', 'l', // "url" | |
253 0x00, 0x0a, '/', 'i', 'n', 'd', 'e', 'x', '.', 'p', 'h', 'p', // "HTTP/1.1" | |
254 0x00, 0x07, 'v', 'e', 'r', 's', 'i', 'o', 'n', // "version" | |
255 0x00, 0x08, 'H', 'T', 'T', 'P', '/', '1', '.', '1', // "HTTP/1.1" | |
256 }; | |
257 static const unsigned char body_frame[] = { | |
258 0x00, 0x00, 0x00, 0x01, // header | |
259 0x00, 0x00, 0x00, 0x06, | |
260 'h', 'e', 'l', 'l', 'o', '!', // "hello" | |
261 }; | |
262 static const unsigned char fin_frame[] = { | |
263 0x80, 0x01, 0x00, 0x03, // header | |
264 0x00, 0x00, 0x00, 0x08, | |
265 0x00, 0x00, 0x00, 0x01, | |
266 0x00, 0x00, 0x00, 0x00, | |
267 }; | |
268 | |
269 //MockWrite writes[] = { | |
270 // MockWrite(true, reinterpret_cast<const char*>(syn), sizeof(syn)), | |
271 // MockWrite(true, reinterpret_cast<const char*>(upload_frame), | |
272 // sizeof(upload_frame)), | |
273 //}; | |
274 | |
174 MockRead data_reads[] = { | 275 MockRead data_reads[] = { |
175 MockRead(true, reinterpret_cast<const char*>(syn_reply), sizeof(syn_reply)), | 276 MockRead(true, reinterpret_cast<const char*>(syn_reply), sizeof(syn_reply)), |
176 MockRead(true, reinterpret_cast<const char*>(body_frame), | 277 MockRead(true, reinterpret_cast<const char*>(body_frame), |
177 sizeof(body_frame)), | 278 sizeof(body_frame)), |
178 MockRead(true, reinterpret_cast<const char*>(fin_frame), sizeof(fin_frame)), | 279 MockRead(true, reinterpret_cast<const char*>(fin_frame), sizeof(fin_frame)), |
179 MockRead(true, 0, 0), // EOF | 280 MockRead(true, 0, 0) // EOF |
180 }; | 281 }; |
181 | 282 |
182 // We disable SSL for this test. | 283 TransactionHelperResult out = TransactionHelper(request, data_reads, NULL); |
183 FlipSession::SetSSLMode(false); | |
184 SimpleGetHelperResult out = SimpleGetHelper(data_reads); | |
185 EXPECT_EQ(OK, out.rv); | 284 EXPECT_EQ(OK, out.rv); |
186 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 285 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
187 EXPECT_EQ("hello!", out.response_data); | 286 EXPECT_EQ("hello!", out.response_data); |
188 } | 287 } |
189 | 288 |
190 // Test that the transaction doesn't crash when we don't have a reply. | 289 // Test that the transaction doesn't crash when we don't have a reply. |
191 TEST_F(FlipNetworkTransactionTest, ResponseWithoutSynReply) { | 290 TEST_F(FlipNetworkTransactionTest, ResponseWithoutSynReply) { |
192 static const unsigned char body_frame[] = { | 291 static const unsigned char body_frame[] = { |
193 0x00, 0x00, 0x00, 0x01, // header | 292 0x00, 0x00, 0x00, 0x01, // header |
194 0x00, 0x00, 0x00, 0x06, | 293 0x00, 0x00, 0x00, 0x06, |
195 'h', 'e', 'l', 'l', 'o', '!', // "hello" | 294 'h', 'e', 'l', 'l', 'o', '!', // "hello" |
196 }; | 295 }; |
197 static const unsigned char fin_frame[] = { | 296 static const unsigned char fin_frame[] = { |
198 0x80, 0x01, 0x00, 0x03, // header | 297 0x80, 0x01, 0x00, 0x03, // header |
199 0x00, 0x00, 0x00, 0x08, | 298 0x00, 0x00, 0x00, 0x08, |
200 0x00, 0x00, 0x00, 0x01, | 299 0x00, 0x00, 0x00, 0x01, |
201 0x00, 0x00, 0x00, 0x00, | 300 0x00, 0x00, 0x00, 0x00, |
202 }; | 301 }; |
203 | 302 |
204 MockRead data_reads[] = { | 303 MockRead data_reads[] = { |
205 MockRead(true, reinterpret_cast<const char*>(body_frame), | 304 MockRead(true, reinterpret_cast<const char*>(body_frame), |
206 sizeof(body_frame)), | 305 sizeof(body_frame)), |
207 MockRead(true, reinterpret_cast<const char*>(fin_frame), sizeof(fin_frame)), | 306 MockRead(true, reinterpret_cast<const char*>(fin_frame), sizeof(fin_frame)), |
208 MockRead(true, 0, 0), // EOF | 307 MockRead(true, 0, 0) // EOF |
209 }; | 308 }; |
210 | 309 |
211 // We disable SSL for this test. | 310 HttpRequestInfo request; |
212 FlipSession::SetSSLMode(false); | 311 request.method = "GET"; |
213 SimpleGetHelperResult out = SimpleGetHelper(data_reads); | 312 request.url = GURL("http://www.google.com/"); |
313 request.load_flags = 0; | |
314 TransactionHelperResult out = TransactionHelper(request, data_reads, NULL); | |
214 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv); | 315 EXPECT_EQ(ERR_SYN_REPLY_NOT_RECEIVED, out.rv); |
215 } | 316 } |
216 | 317 |
318 | |
wtc
2009/10/28 01:12:05
Please delete this blank line, too.
| |
217 } // namespace net | 319 } // namespace net |
218 | 320 |
OLD | NEW |