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

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

Issue 10872044: Retry failed network requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Fix bug Created 8 years, 4 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
« no previous file with comments | « net/http/http_transaction_unittest.h ('k') | net/url_request/url_request_http_job.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_transaction_unittest.h" 5 #include "net/http/http_transaction_unittest.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/stringprintf.h" 11 #include "base/stringprintf.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 #include "net/base/load_flags.h" 13 #include "net/base/load_flags.h"
14 #include "net/disk_cache/disk_cache.h" 14 #include "net/disk_cache/disk_cache.h"
15 #include "net/http/http_cache.h" 15 #include "net/http/http_cache.h"
16 #include "net/http/http_request_info.h" 16 #include "net/http/http_request_info.h"
17 #include "net/http/http_response_info.h" 17 #include "net/http/http_response_info.h"
18 #include "net/http/http_transaction.h" 18 #include "net/http/http_transaction.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace { 21 namespace {
22 typedef base::hash_map<std::string, const MockTransaction*> MockTransactionMap; 22 typedef base::hash_map<std::string, const MockTransaction*> MockTransactionMap;
23 static MockTransactionMap mock_transactions; 23 static MockTransactionMap mock_transactions;
24 } // namespace 24 } // namespace
25 25
26 //----------------------------------------------------------------------------- 26 //-----------------------------------------------------------------------------
27 // mock transaction data 27 // mock transaction data
28 28
29 const MockTransaction kSimpleGET_Transaction = { 29 const MockTransaction kSimpleGET_Transaction = {
30 net::OK,
30 "http://www.google.com/", 31 "http://www.google.com/",
31 "GET", 32 "GET",
32 base::Time(), 33 base::Time(),
33 "", 34 "",
34 net::LOAD_NORMAL, 35 net::LOAD_NORMAL,
35 "HTTP/1.1 200 OK", 36 "HTTP/1.1 200 OK",
36 "Cache-Control: max-age=10000\n", 37 "Cache-Control: max-age=10000\n",
37 base::Time(), 38 base::Time(),
38 "<html><body>Google Blah Blah</body></html>", 39 "<html><body>Google Blah Blah</body></html>",
39 TEST_MODE_NORMAL, 40 TEST_MODE_NORMAL,
40 NULL, 41 NULL,
41 0 42 0
42 }; 43 };
43 44
44 const MockTransaction kSimplePOST_Transaction = { 45 const MockTransaction kSimplePOST_Transaction = {
46 net::OK,
45 "http://bugdatabase.com/edit", 47 "http://bugdatabase.com/edit",
46 "POST", 48 "POST",
47 base::Time(), 49 base::Time(),
48 "", 50 "",
49 net::LOAD_NORMAL, 51 net::LOAD_NORMAL,
50 "HTTP/1.1 200 OK", 52 "HTTP/1.1 200 OK",
51 "", 53 "",
52 base::Time(), 54 base::Time(),
53 "<html><body>Google Blah Blah</body></html>", 55 "<html><body>Google Blah Blah</body></html>",
54 TEST_MODE_NORMAL, 56 TEST_MODE_NORMAL,
55 NULL, 57 NULL,
56 0 58 0
57 }; 59 };
58 60
59 const MockTransaction kTypicalGET_Transaction = { 61 const MockTransaction kTypicalGET_Transaction = {
62 net::OK,
60 "http://www.example.com/~foo/bar.html", 63 "http://www.example.com/~foo/bar.html",
61 "GET", 64 "GET",
62 base::Time(), 65 base::Time(),
63 "", 66 "",
64 net::LOAD_NORMAL, 67 net::LOAD_NORMAL,
65 "HTTP/1.1 200 OK", 68 "HTTP/1.1 200 OK",
66 "Date: Wed, 28 Nov 2007 09:40:09 GMT\n" 69 "Date: Wed, 28 Nov 2007 09:40:09 GMT\n"
67 "Last-Modified: Wed, 28 Nov 2007 00:40:09 GMT\n", 70 "Last-Modified: Wed, 28 Nov 2007 00:40:09 GMT\n",
68 base::Time(), 71 base::Time(),
69 "<html><body>Google Blah Blah</body></html>", 72 "<html><body>Google Blah Blah</body></html>",
70 TEST_MODE_NORMAL, 73 TEST_MODE_NORMAL,
71 NULL, 74 NULL,
72 0 75 0
73 }; 76 };
74 77
75 const MockTransaction kETagGET_Transaction = { 78 const MockTransaction kETagGET_Transaction = {
79 net::OK,
76 "http://www.google.com/foopy", 80 "http://www.google.com/foopy",
77 "GET", 81 "GET",
78 base::Time(), 82 base::Time(),
79 "", 83 "",
80 net::LOAD_NORMAL, 84 net::LOAD_NORMAL,
81 "HTTP/1.1 200 OK", 85 "HTTP/1.1 200 OK",
82 "Cache-Control: max-age=10000\n" 86 "Cache-Control: max-age=10000\n"
83 "Etag: \"foopy\"\n", 87 "Etag: \"foopy\"\n",
84 base::Time(), 88 base::Time(),
85 "<html><body>Google Blah Blah</body></html>", 89 "<html><body>Google Blah Blah</body></html>",
86 TEST_MODE_NORMAL, 90 TEST_MODE_NORMAL,
87 NULL, 91 NULL,
88 0 92 0
89 }; 93 };
90 94
91 const MockTransaction kRangeGET_Transaction = { 95 const MockTransaction kRangeGET_Transaction = {
96 net::OK,
92 "http://www.google.com/", 97 "http://www.google.com/",
93 "GET", 98 "GET",
94 base::Time(), 99 base::Time(),
95 "Range: 0-100\r\n", 100 "Range: 0-100\r\n",
96 net::LOAD_NORMAL, 101 net::LOAD_NORMAL,
97 "HTTP/1.1 200 OK", 102 "HTTP/1.1 200 OK",
98 "Cache-Control: max-age=10000\n", 103 "Cache-Control: max-age=10000\n",
99 base::Time(), 104 base::Time(),
100 "<html><body>Google Blah Blah</body></html>", 105 "<html><body>Google Blah Blah</body></html>",
101 TEST_MODE_NORMAL, 106 TEST_MODE_NORMAL,
(...skipping 17 matching lines...) Expand all
119 124
120 // look for builtins: 125 // look for builtins:
121 for (size_t i = 0; i < arraysize(kBuiltinMockTransactions); ++i) { 126 for (size_t i = 0; i < arraysize(kBuiltinMockTransactions); ++i) {
122 if (url == GURL(kBuiltinMockTransactions[i]->url)) 127 if (url == GURL(kBuiltinMockTransactions[i]->url))
123 return kBuiltinMockTransactions[i]; 128 return kBuiltinMockTransactions[i];
124 } 129 }
125 return NULL; 130 return NULL;
126 } 131 }
127 132
128 void AddMockTransaction(const MockTransaction* trans) { 133 void AddMockTransaction(const MockTransaction* trans) {
134 // To return a result asynchronously, set the TEST_MODE_SYNC_NET_START bit
135 // of |test_mode|.
136 ASSERT_NE(net::ERR_IO_PENDING, trans->start_result);
129 mock_transactions[GURL(trans->url).spec()] = trans; 137 mock_transactions[GURL(trans->url).spec()] = trans;
130 } 138 }
131 139
132 void RemoveMockTransaction(const MockTransaction* trans) { 140 void RemoveMockTransaction(const MockTransaction* trans) {
133 mock_transactions.erase(GURL(trans->url).spec()); 141 mock_transactions.erase(GURL(trans->url).spec());
134 } 142 }
135 143
136 MockHttpRequest::MockHttpRequest(const MockTransaction& t) { 144 MockHttpRequest::MockHttpRequest(const MockTransaction& t) {
137 url = GURL(t.url); 145 url = GURL(t.url);
138 method = t.method; 146 method = t.method;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 231
224 MockNetworkTransaction::~MockNetworkTransaction() {} 232 MockNetworkTransaction::~MockNetworkTransaction() {}
225 233
226 int MockNetworkTransaction::Start(const net::HttpRequestInfo* request, 234 int MockNetworkTransaction::Start(const net::HttpRequestInfo* request,
227 const net::CompletionCallback& callback, 235 const net::CompletionCallback& callback,
228 const net::BoundNetLog& net_log) { 236 const net::BoundNetLog& net_log) {
229 const MockTransaction* t = FindMockTransaction(request->url); 237 const MockTransaction* t = FindMockTransaction(request->url);
230 if (!t) 238 if (!t)
231 return net::ERR_FAILED; 239 return net::ERR_FAILED;
232 240
233 std::string resp_status = t->status; 241 net::Error result = t->start_result;
234 std::string resp_headers = t->response_headers; 242 test_mode_ = t->test_mode;
235 std::string resp_data = t->data; 243 if (result == net::OK) {
236 if (t->handler) 244 std::string resp_status = t->status;
237 (t->handler)(request, &resp_status, &resp_headers, &resp_data); 245 std::string resp_headers = t->response_headers;
246 std::string resp_data = t->data;
247 if (t->handler)
248 (t->handler)(request, &resp_status, &resp_headers, &resp_data);
238 249
239 std::string header_data = base::StringPrintf( 250 std::string header_data = base::StringPrintf(
240 "%s\n%s\n", resp_status.c_str(), resp_headers.c_str()); 251 "%s\n%s\n", resp_status.c_str(), resp_headers.c_str());
241 std::replace(header_data.begin(), header_data.end(), '\n', '\0'); 252 std::replace(header_data.begin(), header_data.end(), '\n', '\0');
242 253
243 response_.request_time = base::Time::Now(); 254 response_.request_time = base::Time::Now();
244 if (!t->request_time.is_null()) 255 if (!t->request_time.is_null())
245 response_.request_time = t->request_time; 256 response_.request_time = t->request_time;
246 257
247 response_.was_cached = false; 258 response_.was_cached = false;
248 259
249 response_.response_time = base::Time::Now(); 260 response_.response_time = base::Time::Now();
250 if (!t->response_time.is_null()) 261 if (!t->response_time.is_null())
251 response_.response_time = t->response_time; 262 response_.response_time = t->response_time;
252 263
253 response_.headers = new net::HttpResponseHeaders(header_data); 264 response_.headers = new net::HttpResponseHeaders(header_data);
254 response_.ssl_info.cert_status = t->cert_status; 265 response_.ssl_info.cert_status = t->cert_status;
255 data_ = resp_data; 266 data_ = resp_data;
256 test_mode_ = t->test_mode; 267 }
257 268
258 if (test_mode_ & TEST_MODE_SYNC_NET_START) 269 if (test_mode_ & TEST_MODE_SYNC_NET_START)
259 return net::OK; 270 return result;
260 271
261 CallbackLater(callback, net::OK); 272 CallbackLater(callback, result);
262 return net::ERR_IO_PENDING; 273 return net::ERR_IO_PENDING;
263 } 274 }
264 275
265 int MockNetworkTransaction::RestartIgnoringLastError( 276 int MockNetworkTransaction::RestartIgnoringLastError(
266 const net::CompletionCallback& callback) { 277 const net::CompletionCallback& callback) {
267 return net::ERR_FAILED; 278 return net::ERR_FAILED;
268 } 279 }
269 280
270 int MockNetworkTransaction::RestartWithCertificate( 281 int MockNetworkTransaction::RestartWithCertificate(
271 net::X509Certificate* client_cert, 282 net::X509Certificate* client_cert,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 384
374 if (rv > 0) 385 if (rv > 0)
375 content.append(buf->data(), rv); 386 content.append(buf->data(), rv);
376 else if (rv < 0) 387 else if (rv < 0)
377 return rv; 388 return rv;
378 } while (rv > 0); 389 } while (rv > 0);
379 390
380 result->swap(content); 391 result->swap(content);
381 return net::OK; 392 return net::OK;
382 } 393 }
OLDNEW
« no previous file with comments | « net/http/http_transaction_unittest.h ('k') | net/url_request/url_request_http_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698