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

Side by Side Diff: net/url_request/url_fetcher_impl_unittest.cc

Issue 11308035: Fix URLFetcherDownloadProgressTest to work with remote test server (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix code formatting (braces) as advised by pliard Created 8 years, 1 month 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
« no previous file with comments | « build/android/gtest_filter/net_unittests_disabled ('k') | no next file » | 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/url_request/url_fetcher_impl.h" 5 #include "net/url_request/url_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 class ThrottlingTestURLRequestContextGetter 54 class ThrottlingTestURLRequestContextGetter
55 : public TestURLRequestContextGetter { 55 : public TestURLRequestContextGetter {
56 public: 56 public:
57 ThrottlingTestURLRequestContextGetter( 57 ThrottlingTestURLRequestContextGetter(
58 base::MessageLoopProxy* io_message_loop_proxy, 58 base::MessageLoopProxy* io_message_loop_proxy,
59 TestURLRequestContext* request_context) 59 TestURLRequestContext* request_context)
60 : TestURLRequestContextGetter(io_message_loop_proxy), 60 : TestURLRequestContextGetter(io_message_loop_proxy),
61 context_(request_context) { 61 context_(request_context) {
62 } 62 }
63 63
64 // TestURLRequestContextGetter:
64 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE { 65 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE {
65 return context_; 66 return context_;
66 } 67 }
67 68
68 protected: 69 protected:
69 virtual ~ThrottlingTestURLRequestContextGetter() {} 70 virtual ~ThrottlingTestURLRequestContextGetter() {}
70 71
71 TestURLRequestContext* const context_; 72 TestURLRequestContext* const context_;
72 }; 73 };
73 74
74 } // namespace 75 } // namespace
75 76
76 class URLFetcherTest : public testing::Test, 77 class URLFetcherTest : public testing::Test,
77 public URLFetcherDelegate { 78 public URLFetcherDelegate {
78 public: 79 public:
79 URLFetcherTest() 80 URLFetcherTest()
80 : fetcher_(NULL), 81 : fetcher_(NULL),
81 context_(new ThrottlingTestURLRequestContext()) { 82 context_(new ThrottlingTestURLRequestContext()) {
82 } 83 }
83 84
84 static int GetNumFetcherCores() { 85 static int GetNumFetcherCores() {
85 return URLFetcherImpl::GetNumFetcherCores(); 86 return URLFetcherImpl::GetNumFetcherCores();
86 } 87 }
87 88
88 // Creates a URLFetcher, using the program's main thread to do IO. 89 // Creates a URLFetcher, using the program's main thread to do IO.
89 virtual void CreateFetcher(const GURL& url); 90 virtual void CreateFetcher(const GURL& url);
90 91
91 // URLFetcherDelegate 92 // URLFetcherDelegate:
92 // Subclasses that override this should either call this function or 93 // Subclasses that override this should either call this function or
93 // CleanupAfterFetchComplete() at the end of their processing, depending on 94 // CleanupAfterFetchComplete() at the end of their processing, depending on
94 // whether they want to check for a non-empty HTTP 200 response or not. 95 // whether they want to check for a non-empty HTTP 200 response or not.
95 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 96 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
96 97
97 // Deletes |fetcher| and terminates the message loop. 98 // Deletes |fetcher| and terminates the message loop.
98 void CleanupAfterFetchComplete(); 99 void CleanupAfterFetchComplete();
99 100
100 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy() { 101 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy() {
101 return io_message_loop_proxy_; 102 return io_message_loop_proxy_;
102 } 103 }
103 104
104 TestURLRequestContext* request_context() { 105 TestURLRequestContext* request_context() {
105 return context_.get(); 106 return context_.get();
106 } 107 }
107 108
108 protected: 109 protected:
110 // testing::Test:
109 virtual void SetUp() OVERRIDE { 111 virtual void SetUp() OVERRIDE {
110 testing::Test::SetUp(); 112 testing::Test::SetUp();
111 113
112 io_message_loop_proxy_ = base::MessageLoopProxy::current(); 114 io_message_loop_proxy_ = base::MessageLoopProxy::current();
113 115
114 #if defined(USE_NSS) 116 #if defined(USE_NSS)
115 crypto::EnsureNSSInit(); 117 crypto::EnsureNSSInit();
116 EnsureNSSHttpIOInit(); 118 EnsureNSSHttpIOInit();
117 #endif 119 #endif
118 } 120 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 161 io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
160 // If the current message loop is not the IO loop, it will be shut down when 162 // If the current message loop is not the IO loop, it will be shut down when
161 // the main loop returns and this thread subsequently goes out of scope. 163 // the main loop returns and this thread subsequently goes out of scope.
162 } 164 }
163 165
164 namespace { 166 namespace {
165 167
166 // Version of URLFetcherTest that does a POST instead 168 // Version of URLFetcherTest that does a POST instead
167 class URLFetcherPostTest : public URLFetcherTest { 169 class URLFetcherPostTest : public URLFetcherTest {
168 public: 170 public:
169 // URLFetcherTest override. 171 // URLFetcherTest:
170 virtual void CreateFetcher(const GURL& url) OVERRIDE; 172 virtual void CreateFetcher(const GURL& url) OVERRIDE;
171
172 // URLFetcherDelegate
173 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 173 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
174 }; 174 };
175 175
176 // Version of URLFetcherTest that does a POST instead with empty upload body 176 // Version of URLFetcherTest that does a POST instead with empty upload body
177 class URLFetcherEmptyPostTest : public URLFetcherTest { 177 class URLFetcherEmptyPostTest : public URLFetcherTest {
178 public: 178 public:
179 // URLFetcherTest override. 179 // URLFetcherTest:
180 virtual void CreateFetcher(const GURL& url) OVERRIDE; 180 virtual void CreateFetcher(const GURL& url) OVERRIDE;
181
182 // URLFetcherDelegate
183 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 181 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
184 }; 182 };
185 183
186 // Version of URLFetcherTest that tests download progress reports. 184 // Version of URLFetcherTest that tests download progress reports.
187 class URLFetcherDownloadProgressTest : public URLFetcherTest { 185 class URLFetcherDownloadProgressTest : public URLFetcherTest {
188 public: 186 public:
189 // URLFetcherTest override. 187 URLFetcherDownloadProgressTest()
188 : previous_progress_(0),
189 previous_total_(0),
190 first_call_(true),
191 file_size_(0),
192 file_size_available_(false) {
193 }
194
195 // URLFetcherTest:
190 virtual void CreateFetcher(const GURL& url) OVERRIDE; 196 virtual void CreateFetcher(const GURL& url) OVERRIDE;
197 virtual void OnURLFetchDownloadProgress(const URLFetcher* source,
198 int64 current,
199 int64 total) OVERRIDE;
191 200
192 // URLFetcherDelegate
193 virtual void OnURLFetchDownloadProgress(const URLFetcher* source,
194 int64 current, int64 total) OVERRIDE;
195 protected: 201 protected:
202 // Data returned by the previous callback.
196 int64 previous_progress_; 203 int64 previous_progress_;
197 int64 expected_total_; 204 int64 previous_total_;
205 // Indicates that |previous_progress_| and |previous_total_| are not yet set.
206 bool first_call_;
207 // File size fetched from the file system.
208 int64 file_size_;
209 bool file_size_available_;
198 }; 210 };
199 211
200 /// Version of URLFetcherTest that tests progress reports at cancellation. 212 // Version of URLFetcherTest that tests progress reports at cancellation.
201 class URLFetcherDownloadProgressCancelTest : public URLFetcherTest { 213 class URLFetcherDownloadProgressCancelTest : public URLFetcherTest {
202 public: 214 public:
203 // URLFetcherTest override. 215 // URLFetcherTest:
204 virtual void CreateFetcher(const GURL& url) OVERRIDE; 216 virtual void CreateFetcher(const GURL& url) OVERRIDE;
205
206 // URLFetcherDelegate
207 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 217 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
208 virtual void OnURLFetchDownloadProgress(const URLFetcher* source, 218 virtual void OnURLFetchDownloadProgress(const URLFetcher* source,
209 int64 current, int64 total) OVERRIDE; 219 int64 current,
220 int64 total) OVERRIDE;
210 protected: 221 protected:
211 bool cancelled_; 222 bool cancelled_;
212 }; 223 };
213 224
214 // Version of URLFetcherTest that tests upload progress reports. 225 // Version of URLFetcherTest that tests upload progress reports.
215 class URLFetcherUploadProgressTest : public URLFetcherTest { 226 class URLFetcherUploadProgressTest : public URLFetcherTest {
216 public: 227 public:
217 virtual void CreateFetcher(const GURL& url); 228 // URLFetcherTest:
218 229 virtual void CreateFetcher(const GURL& url) OVERRIDE;
219 // URLFetcherDelegate
220 virtual void OnURLFetchUploadProgress(const URLFetcher* source, 230 virtual void OnURLFetchUploadProgress(const URLFetcher* source,
221 int64 current, int64 total); 231 int64 current,
232 int64 total) OVERRIDE;
222 protected: 233 protected:
223 int64 previous_progress_; 234 int64 previous_progress_;
224 std::string chunk_; 235 std::string chunk_;
225 int64 number_of_chunks_added_; 236 int64 number_of_chunks_added_;
226 }; 237 };
227 238
228 // Version of URLFetcherTest that tests headers. 239 // Version of URLFetcherTest that tests headers.
229 class URLFetcherHeadersTest : public URLFetcherTest { 240 class URLFetcherHeadersTest : public URLFetcherTest {
230 public: 241 public:
231 // URLFetcherDelegate 242 // URLFetcherTest:
232 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 243 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
233 }; 244 };
234 245
235 // Version of URLFetcherTest that tests SocketAddress. 246 // Version of URLFetcherTest that tests SocketAddress.
236 class URLFetcherSocketAddressTest : public URLFetcherTest { 247 class URLFetcherSocketAddressTest : public URLFetcherTest {
237 public: 248 public:
238 // URLFetcherDelegate 249 // URLFetcherTest:
239 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 250 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
240 protected: 251 protected:
241 std::string expected_host_; 252 std::string expected_host_;
242 uint16 expected_port_; 253 uint16 expected_port_;
243 }; 254 };
244 255
245 // Version of URLFetcherTest that tests stopping on a redirect. 256 // Version of URLFetcherTest that tests stopping on a redirect.
246 class URLFetcherStopOnRedirectTest : public URLFetcherTest { 257 class URLFetcherStopOnRedirectTest : public URLFetcherTest {
247 public: 258 public:
248 URLFetcherStopOnRedirectTest(); 259 URLFetcherStopOnRedirectTest();
249 virtual ~URLFetcherStopOnRedirectTest(); 260 virtual ~URLFetcherStopOnRedirectTest();
250 261
251 // URLFetcherTest override. 262 // URLFetcherTest:
252 virtual void CreateFetcher(const GURL& url) OVERRIDE; 263 virtual void CreateFetcher(const GURL& url) OVERRIDE;
253 // URLFetcherDelegate
254 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 264 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
255 265
256 protected: 266 protected:
257 // The URL we should be redirected to. 267 // The URL we should be redirected to.
258 static const char* kRedirectTarget; 268 static const char* kRedirectTarget;
259 269
260 bool callback_called_; // Set to true in OnURLFetchComplete(). 270 bool callback_called_; // Set to true in OnURLFetchComplete().
261 }; 271 };
262 272
263 // Version of URLFetcherTest that tests overload protection. 273 // Version of URLFetcherTest that tests overload protection.
264 class URLFetcherProtectTest : public URLFetcherTest { 274 class URLFetcherProtectTest : public URLFetcherTest {
265 public: 275 public:
266 // URLFetcherTest override. 276 // URLFetcherTest:
267 virtual void CreateFetcher(const GURL& url) OVERRIDE; 277 virtual void CreateFetcher(const GURL& url) OVERRIDE;
268 // URLFetcherDelegate
269 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 278 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
270 private: 279 private:
271 Time start_time_; 280 Time start_time_;
272 }; 281 };
273 282
274 // Version of URLFetcherTest that tests overload protection, when responses 283 // Version of URLFetcherTest that tests overload protection, when responses
275 // passed through. 284 // passed through.
276 class URLFetcherProtectTestPassedThrough : public URLFetcherTest { 285 class URLFetcherProtectTestPassedThrough : public URLFetcherTest {
277 public: 286 public:
278 // URLFetcherTest override. 287 // URLFetcherTest:
279 virtual void CreateFetcher(const GURL& url) OVERRIDE; 288 virtual void CreateFetcher(const GURL& url) OVERRIDE;
280 // URLFetcherDelegate
281 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 289 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
282 private: 290 private:
283 Time start_time_; 291 Time start_time_;
284 }; 292 };
285 293
286 // Version of URLFetcherTest that tests bad HTTPS requests. 294 // Version of URLFetcherTest that tests bad HTTPS requests.
287 class URLFetcherBadHTTPSTest : public URLFetcherTest { 295 class URLFetcherBadHTTPSTest : public URLFetcherTest {
288 public: 296 public:
289 URLFetcherBadHTTPSTest(); 297 URLFetcherBadHTTPSTest();
290 298
291 // URLFetcherDelegate 299 // URLFetcherTest:
292 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 300 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
293 301
294 private: 302 private:
295 FilePath cert_dir_; 303 FilePath cert_dir_;
296 }; 304 };
297 305
298 // Version of URLFetcherTest that tests request cancellation on shutdown. 306 // Version of URLFetcherTest that tests request cancellation on shutdown.
299 class URLFetcherCancelTest : public URLFetcherTest { 307 class URLFetcherCancelTest : public URLFetcherTest {
300 public: 308 public:
301 // URLFetcherTest override. 309 // URLFetcherTest:
302 virtual void CreateFetcher(const GURL& url) OVERRIDE; 310 virtual void CreateFetcher(const GURL& url) OVERRIDE;
303 // URLFetcherDelegate
304 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 311 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
305 312
306 void CancelRequest(); 313 void CancelRequest();
307 }; 314 };
308 315
309 // Version of TestURLRequestContext that posts a Quit task to the IO 316 // Version of TestURLRequestContext that posts a Quit task to the IO
310 // thread once it is deleted. 317 // thread once it is deleted.
311 class CancelTestURLRequestContext : public ThrottlingTestURLRequestContext { 318 class CancelTestURLRequestContext : public ThrottlingTestURLRequestContext {
312 public: 319 public:
313 explicit CancelTestURLRequestContext() { 320 explicit CancelTestURLRequestContext() {
(...skipping 11 matching lines...) Expand all
325 : public TestURLRequestContextGetter { 332 : public TestURLRequestContextGetter {
326 public: 333 public:
327 CancelTestURLRequestContextGetter( 334 CancelTestURLRequestContextGetter(
328 base::MessageLoopProxy* io_message_loop_proxy, 335 base::MessageLoopProxy* io_message_loop_proxy,
329 const GURL& throttle_for_url) 336 const GURL& throttle_for_url)
330 : TestURLRequestContextGetter(io_message_loop_proxy), 337 : TestURLRequestContextGetter(io_message_loop_proxy),
331 io_message_loop_proxy_(io_message_loop_proxy), 338 io_message_loop_proxy_(io_message_loop_proxy),
332 context_created_(false, false), 339 context_created_(false, false),
333 throttle_for_url_(throttle_for_url) { 340 throttle_for_url_(throttle_for_url) {
334 } 341 }
342
343 // TestURLRequestContextGetter:
335 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE { 344 virtual TestURLRequestContext* GetURLRequestContext() OVERRIDE {
336 if (!context_.get()) { 345 if (!context_.get()) {
337 context_.reset(new CancelTestURLRequestContext()); 346 context_.reset(new CancelTestURLRequestContext());
338 DCHECK(context_->throttler_manager()); 347 DCHECK(context_->throttler_manager());
339 348
340 // Registers an entry for test url. The backoff time is calculated by: 349 // Registers an entry for test url. The backoff time is calculated by:
341 // new_backoff = 2.0 * old_backoff + 0 350 // new_backoff = 2.0 * old_backoff + 0
342 // The initial backoff is 2 seconds and maximum backoff is 4 seconds. 351 // The initial backoff is 2 seconds and maximum backoff is 4 seconds.
343 // Maximum retries allowed is set to 2. 352 // Maximum retries allowed is set to 2.
344 scoped_refptr<URLRequestThrottlerEntry> entry( 353 scoped_refptr<URLRequestThrottlerEntry> entry(
345 new URLRequestThrottlerEntry( 354 new URLRequestThrottlerEntry(
346 context_->throttler_manager(), 355 context_->throttler_manager(),
347 "", 200, 3, 2000, 2.0, 0.0, 4000)); 356 "", 200, 3, 2000, 2.0, 0.0, 4000));
348 context_->throttler_manager()->OverrideEntryForTests( 357 context_->throttler_manager()->OverrideEntryForTests(
349 throttle_for_url_, entry); 358 throttle_for_url_, entry);
350 359
351 context_created_.Signal(); 360 context_created_.Signal();
352 } 361 }
353 return context_.get(); 362 return context_.get();
354 } 363 }
364
355 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const { 365 virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() const {
356 return io_message_loop_proxy_; 366 return io_message_loop_proxy_;
357 } 367 }
368
358 void WaitForContextCreation() { 369 void WaitForContextCreation() {
359 context_created_.Wait(); 370 context_created_.Wait();
360 } 371 }
361 372
362 protected: 373 protected:
363 virtual ~CancelTestURLRequestContextGetter() {} 374 virtual ~CancelTestURLRequestContextGetter() {}
364 375
365 private: 376 private:
366 scoped_ptr<TestURLRequestContext> context_; 377 scoped_ptr<TestURLRequestContext> context_;
367 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; 378 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_;
368 base::WaitableEvent context_created_; 379 base::WaitableEvent context_created_;
369 GURL throttle_for_url_; 380 GURL throttle_for_url_;
370 }; 381 };
371 382
372 // Version of URLFetcherTest that tests retying the same request twice. 383 // Version of URLFetcherTest that tests retying the same request twice.
373 class URLFetcherMultipleAttemptTest : public URLFetcherTest { 384 class URLFetcherMultipleAttemptTest : public URLFetcherTest {
374 public: 385 public:
375 // URLFetcherDelegate 386 // URLFetcherTest:
376 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 387 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
377 private: 388 private:
378 std::string data_; 389 std::string data_;
379 }; 390 };
380 391
381 class URLFetcherFileTest : public URLFetcherTest { 392 class URLFetcherFileTest : public URLFetcherTest {
382 public: 393 public:
383 URLFetcherFileTest() : take_ownership_of_file_(false), 394 URLFetcherFileTest() : take_ownership_of_file_(false),
384 expected_file_error_(base::PLATFORM_FILE_OK) {} 395 expected_file_error_(base::PLATFORM_FILE_OK) {}
385 396
386 void CreateFetcherForFile(const GURL& url, const FilePath& file_path); 397 void CreateFetcherForFile(const GURL& url, const FilePath& file_path);
387 void CreateFetcherForTempFile(const GURL& url); 398 void CreateFetcherForTempFile(const GURL& url);
388 399
389 // URLFetcherDelegate 400 // URLFetcherTest:
390 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE; 401 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE;
391 402
392 protected: 403 protected:
393 FilePath expected_file_; 404 FilePath expected_file_;
394 FilePath file_path_; 405 FilePath file_path_;
395 406
396 // Set by the test. Used in OnURLFetchComplete() to decide if 407 // Set by the test. Used in OnURLFetchComplete() to decide if
397 // the URLFetcher should own the temp file, so that we can test 408 // the URLFetcher should own the temp file, so that we can test
398 // disowning prevents the file from being deleted. 409 // disowning prevents the file from being deleted.
399 bool take_ownership_of_file_; 410 bool take_ownership_of_file_;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 448
438 CleanupAfterFetchComplete(); 449 CleanupAfterFetchComplete();
439 // Do not call the super class method URLFetcherTest::OnURLFetchComplete, 450 // Do not call the super class method URLFetcherTest::OnURLFetchComplete,
440 // since it expects a non-empty response. 451 // since it expects a non-empty response.
441 } 452 }
442 453
443 void URLFetcherDownloadProgressTest::CreateFetcher(const GURL& url) { 454 void URLFetcherDownloadProgressTest::CreateFetcher(const GURL& url) {
444 fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this); 455 fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this);
445 fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter( 456 fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
446 io_message_loop_proxy(), request_context())); 457 io_message_loop_proxy(), request_context()));
447 previous_progress_ = 0;
448 fetcher_->Start(); 458 fetcher_->Start();
449 } 459 }
450 460
451 void URLFetcherDownloadProgressTest::OnURLFetchDownloadProgress( 461 void URLFetcherDownloadProgressTest::OnURLFetchDownloadProgress(
452 const URLFetcher* source, int64 current, int64 total) { 462 const URLFetcher* source, int64 current, int64 total) {
453 // Increasing between 0 and total. 463 // Progress has to be between 0 and total size.
454 EXPECT_LE(0, current); 464 EXPECT_LE(0, current);
455 EXPECT_GE(total, current); 465 EXPECT_GE(total, current);
456 EXPECT_LE(previous_progress_, current); 466
467 // Progress has to be non-decreasing, total size has to be constant.
468 if (!first_call_) {
469 EXPECT_LE(previous_progress_, current);
470 EXPECT_EQ(previous_total_, total);
471 }
472
473 // File size is available only when local http server is used.
474 if (file_size_available_)
475 EXPECT_EQ(file_size_, total);
476
457 previous_progress_ = current; 477 previous_progress_ = current;
458 EXPECT_EQ(expected_total_, total); 478 previous_total_ = total;
479 first_call_ = false;
459 } 480 }
460 481
461 void URLFetcherDownloadProgressCancelTest::CreateFetcher(const GURL& url) { 482 void URLFetcherDownloadProgressCancelTest::CreateFetcher(const GURL& url) {
462 fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this); 483 fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this);
463 fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter( 484 fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
464 io_message_loop_proxy(), request_context())); 485 io_message_loop_proxy(), request_context()));
465 cancelled_ = false; 486 cancelled_ = false;
466 fetcher_->Start(); 487 fetcher_->Start();
467 } 488 }
468 489
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 } 868 }
848 869
849 TEST_F(URLFetcherDownloadProgressTest, Basic) { 870 TEST_F(URLFetcherDownloadProgressTest, Basic) {
850 TestServer test_server(TestServer::TYPE_HTTP, 871 TestServer test_server(TestServer::TYPE_HTTP,
851 TestServer::kLocalhost, 872 TestServer::kLocalhost,
852 FilePath(kDocRoot)); 873 FilePath(kDocRoot));
853 ASSERT_TRUE(test_server.Start()); 874 ASSERT_TRUE(test_server.Start());
854 875
855 // Get a file large enough to require more than one read into 876 // Get a file large enough to require more than one read into
856 // URLFetcher::Core's IOBuffer. 877 // URLFetcher::Core's IOBuffer.
857 static const char kFileToFetch[] = "animate1.gif"; 878 static const char kFileToFetch[] = "animate1.gif";
wtc 2012/11/22 18:58:02 Since we hardcoded the file name here, I think it
858 file_util::GetFileSize(test_server.document_root().AppendASCII(kFileToFetch), 879 #if !defined(OS_ANDROID)
859 &expected_total_); 880 ASSERT_TRUE(
881 file_util::GetFileSize(
882 test_server.document_root().AppendASCII(kFileToFetch),
883 &file_size));
wtc 2012/11/22 18:58:02 I think you missed the trailing '_' for 'file_size
884 file_size_available_ = true;
885 #endif
860 CreateFetcher(test_server.GetURL( 886 CreateFetcher(test_server.GetURL(
861 std::string(kTestServerFilePrefix) + kFileToFetch)); 887 std::string(kTestServerFilePrefix) + kFileToFetch));
862 888
863 MessageLoop::current()->Run(); 889 MessageLoop::current()->Run();
864 } 890 }
865 891
866 TEST_F(URLFetcherDownloadProgressCancelTest, CancelWhileProgressReport) { 892 TEST_F(URLFetcherDownloadProgressCancelTest, CancelWhileProgressReport) {
867 TestServer test_server(TestServer::TYPE_HTTP, 893 TestServer test_server(TestServer::TYPE_HTTP,
868 TestServer::kLocalhost, 894 TestServer::kLocalhost,
869 FilePath(kDocRoot)); 895 FilePath(kDocRoot));
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1245 MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit(). 1271 MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
1246 1272
1247 MessageLoop::current()->RunUntilIdle(); 1273 MessageLoop::current()->RunUntilIdle();
1248 ASSERT_FALSE(file_util::PathExists(file_path_)) 1274 ASSERT_FALSE(file_util::PathExists(file_path_))
1249 << file_path_.value() << " not removed."; 1275 << file_path_.value() << " not removed.";
1250 } 1276 }
1251 1277
1252 } // namespace 1278 } // namespace
1253 1279
1254 } // namespace net 1280 } // namespace net
OLDNEW
« no previous file with comments | « build/android/gtest_filter/net_unittests_disabled ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698