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

Side by Side Diff: content/browser/download/download_file_unittest.cc

Issue 10689093: Move Rename functionality from DownloadFileManager to DownloadFileImple. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to TOT to avoid showing already committed changes in Rietveld. Created 8 years, 5 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
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 "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/message_loop.h" 6 #include "base/message_loop.h"
7 #include "base/string_number_conversions.h" 7 #include "base/string_number_conversions.h"
8 #include "content/browser/browser_thread_impl.h" 8 #include "content/browser/browser_thread_impl.h"
9 #include "content/browser/download/byte_stream.h" 9 #include "content/browser/download/byte_stream.h"
10 #include "content/browser/download/download_create_info.h" 10 #include "content/browser/download/download_create_info.h"
11 #include "content/browser/download/download_file_impl.h" 11 #include "content/browser/download/download_file_impl.h"
12 #include "content/browser/download/download_request_handle.h" 12 #include "content/browser/download/download_request_handle.h"
13 #include "content/browser/power_save_blocker.h" 13 #include "content/browser/power_save_blocker.h"
14 #include "content/public/browser/download_interrupt_reasons.h" 14 #include "content/public/browser/download_interrupt_reasons.h"
15 #include "content/public/browser/download_manager.h" 15 #include "content/public/browser/download_manager.h"
16 #include "content/public/test/mock_download_manager.h" 16 #include "content/public/test/mock_download_manager.h"
17 #include "net/base/file_stream.h" 17 #include "net/base/file_stream.h"
18 #include "net/base/mock_file_stream.h"
18 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
19 #include "testing/gmock/include/gmock/gmock.h" 20 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 22
22 using content::BrowserThread; 23 using content::BrowserThread;
23 using content::BrowserThreadImpl; 24 using content::BrowserThreadImpl;
24 using content::DownloadFile; 25 using content::DownloadFile;
25 using content::DownloadId; 26 using content::DownloadId;
26 using content::DownloadManager; 27 using content::DownloadManager;
27 using ::testing::_; 28 using ::testing::_;
(...skipping 10 matching lines...) Expand all
38 MockByteStreamReader() {} 39 MockByteStreamReader() {}
39 ~MockByteStreamReader() {} 40 ~MockByteStreamReader() {}
40 41
41 // ByteStream functions 42 // ByteStream functions
42 MOCK_METHOD2(Read, content::ByteStreamReader::StreamState( 43 MOCK_METHOD2(Read, content::ByteStreamReader::StreamState(
43 scoped_refptr<net::IOBuffer>*, size_t*)); 44 scoped_refptr<net::IOBuffer>*, size_t*));
44 MOCK_CONST_METHOD0(GetStatus, content::DownloadInterruptReason()); 45 MOCK_CONST_METHOD0(GetStatus, content::DownloadInterruptReason());
45 MOCK_METHOD1(RegisterCallback, void(const base::Closure&)); 46 MOCK_METHOD1(RegisterCallback, void(const base::Closure&));
46 }; 47 };
47 48
49 void SetRenameResult(bool* called_p,
50 content::DownloadInterruptReason* reason_p,
51 FilePath* result_path_p,
52 content::DownloadInterruptReason reason,
53 const FilePath& result_path) {
54 if (called_p)
55 *called_p = true;
56 if (reason_p)
57 *reason_p = reason;
58 if (result_path_p)
59 *result_path_p = result_path;
60 }
61
48 } // namespace 62 } // namespace
49 63
50 DownloadId::Domain kValidIdDomain = "valid DownloadId::Domain"; 64 DownloadId::Domain kValidIdDomain = "valid DownloadId::Domain";
51 65
52 class DownloadFileTest : public testing::Test { 66 class DownloadFileTest : public testing::Test {
53 public: 67 public:
54 68
55 static const char* kTestData1; 69 static const char* kTestData1;
56 static const char* kTestData2; 70 static const char* kTestData2;
57 static const char* kTestData3; 71 static const char* kTestData3;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 124
111 input_stream_ = new StrictMock<MockByteStreamReader>(); 125 input_stream_ = new StrictMock<MockByteStreamReader>();
112 126
113 // TODO: Need to actually create a function that'll set the variables 127 // TODO: Need to actually create a function that'll set the variables
114 // based on the inputs from the callback. 128 // based on the inputs from the callback.
115 EXPECT_CALL(*input_stream_, RegisterCallback(_)) 129 EXPECT_CALL(*input_stream_, RegisterCallback(_))
116 .WillOnce(Invoke(this, &DownloadFileTest::RegisterCallback)) 130 .WillOnce(Invoke(this, &DownloadFileTest::RegisterCallback))
117 .RetiresOnSaturation(); 131 .RetiresOnSaturation();
118 132
119 DownloadCreateInfo info; 133 DownloadCreateInfo info;
134 // info.request_handle default constructed to null.
120 info.download_id = DownloadId(kValidIdDomain, kDummyDownloadId + offset); 135 info.download_id = DownloadId(kValidIdDomain, kDummyDownloadId + offset);
121 // info.request_handle default constructed to null.
122 info.save_info.file_stream = file_stream_; 136 info.save_info.file_stream = file_stream_;
123 download_file_.reset( 137 download_file_.reset(
124 new DownloadFileImpl( 138 new DownloadFileImpl(
125 &info, 139 &info,
126 scoped_ptr<content::ByteStreamReader>(input_stream_).Pass(), 140 scoped_ptr<content::ByteStreamReader>(input_stream_).Pass(),
127 new DownloadRequestHandle(), 141 new DownloadRequestHandle(),
128 download_manager_, calculate_hash, 142 download_manager_, calculate_hash,
129 scoped_ptr<content::PowerSaveBlocker>(NULL).Pass(), 143 scoped_ptr<content::PowerSaveBlocker>(NULL).Pass(),
130 net::BoundNetLog())); 144 net::BoundNetLog()));
131 145
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 EXPECT_CALL(*(download_manager_.get()), 235 EXPECT_CALL(*(download_manager_.get()),
222 UpdateDownload( 236 UpdateDownload(
223 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(), 237 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(),
224 _, _, _)) 238 _, _, _))
225 .Times(AnyNumber()) 239 .Times(AnyNumber())
226 .WillRepeatedly(Invoke(this, 240 .WillRepeatedly(Invoke(this,
227 &DownloadFileTest::SetUpdateDownloadInfo)); 241 &DownloadFileTest::SetUpdateDownloadInfo));
228 } 242 }
229 } 243 }
230 244
245 content::DownloadInterruptReason Rename(
246 const FilePath& full_path, bool overwrite_existing_file,
247 FilePath* result_path_p) {
248 content::DownloadInterruptReason result_reason(
249 content::DOWNLOAD_INTERRUPT_REASON_NONE);
250 bool callback_was_called(false);
251 FilePath result_path;
252
253 download_file_->Rename(full_path, overwrite_existing_file,
254 base::Bind(&SetRenameResult,
255 &callback_was_called,
256 &result_reason, result_path_p));
257 loop_.RunAllPending();
258
259 // If the callback wasn't called we've got a memory stomper waiting
260 // to happen; best to crash.
261 CHECK(callback_was_called);
asanka 2012/07/05 18:47:21 The last time came up, I ended up creating a local
Randy Smith (Not in Mondays) 2012/07/09 20:35:51 Nice. Done.
262 return result_reason;
263 }
264
231 protected: 265 protected:
232 scoped_refptr<StrictMock<content::MockDownloadManager> > download_manager_; 266 scoped_refptr<StrictMock<content::MockDownloadManager> > download_manager_;
233 267
234 linked_ptr<net::FileStream> file_stream_; 268 linked_ptr<net::FileStream> file_stream_;
235 269
236 // DownloadFile instance we are testing. 270 // DownloadFile instance we are testing.
237 scoped_ptr<DownloadFile> download_file_; 271 scoped_ptr<DownloadFile> download_file_;
238 272
239 // Stream for sending data into the download file. 273 // Stream for sending data into the download file.
240 // Owned by download_file_; will be alive for lifetime of download_file_. 274 // Owned by download_file_; will be alive for lifetime of download_file_.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 // Rename the file before any data is downloaded, after some has, after it all 308 // Rename the file before any data is downloaded, after some has, after it all
275 // has, and after it's closed. 309 // has, and after it's closed.
276 TEST_F(DownloadFileTest, RenameFileFinal) { 310 TEST_F(DownloadFileTest, RenameFileFinal) {
277 ASSERT_TRUE(CreateDownloadFile(0, true)); 311 ASSERT_TRUE(CreateDownloadFile(0, true));
278 FilePath initial_path(download_file_->FullPath()); 312 FilePath initial_path(download_file_->FullPath());
279 EXPECT_TRUE(file_util::PathExists(initial_path)); 313 EXPECT_TRUE(file_util::PathExists(initial_path));
280 FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1")); 314 FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1"));
281 FilePath path_2(initial_path.InsertBeforeExtensionASCII("_2")); 315 FilePath path_2(initial_path.InsertBeforeExtensionASCII("_2"));
282 FilePath path_3(initial_path.InsertBeforeExtensionASCII("_3")); 316 FilePath path_3(initial_path.InsertBeforeExtensionASCII("_3"));
283 FilePath path_4(initial_path.InsertBeforeExtensionASCII("_4")); 317 FilePath path_4(initial_path.InsertBeforeExtensionASCII("_4"));
318 FilePath path_5(initial_path.InsertBeforeExtensionASCII("_5"));
319 FilePath output_path;
284 320
285 // Rename the file before downloading any data. 321 // Rename the file before downloading any data.
286 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, 322 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
287 download_file_->Rename(path_1)); 323 Rename(path_1, false, &output_path));
288 FilePath renamed_path = download_file_->FullPath(); 324 FilePath renamed_path = download_file_->FullPath();
289 EXPECT_EQ(path_1, renamed_path); 325 EXPECT_EQ(path_1, renamed_path);
326 EXPECT_EQ(path_1, output_path);
290 327
291 // Check the files. 328 // Check the files.
292 EXPECT_FALSE(file_util::PathExists(initial_path)); 329 EXPECT_FALSE(file_util::PathExists(initial_path));
293 EXPECT_TRUE(file_util::PathExists(path_1)); 330 EXPECT_TRUE(file_util::PathExists(path_1));
294 331
295 // Download the data. 332 // Download the data.
296 const char* chunks1[] = { kTestData1, kTestData2 }; 333 const char* chunks1[] = { kTestData1, kTestData2 };
297 AppendDataToFile(chunks1, 2); 334 AppendDataToFile(chunks1, 2);
298 335
299 // Rename the file after downloading some data. 336 // Rename the file after downloading some data.
300 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, 337 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
301 download_file_->Rename(path_2)); 338 Rename(path_2, false, &output_path));
302 renamed_path = download_file_->FullPath(); 339 renamed_path = download_file_->FullPath();
303 EXPECT_EQ(path_2, renamed_path); 340 EXPECT_EQ(path_2, renamed_path);
341 EXPECT_EQ(path_2, output_path);
304 342
305 // Check the files. 343 // Check the files.
306 EXPECT_FALSE(file_util::PathExists(path_1)); 344 EXPECT_FALSE(file_util::PathExists(path_1));
307 EXPECT_TRUE(file_util::PathExists(path_2)); 345 EXPECT_TRUE(file_util::PathExists(path_2));
308 346
309 const char* chunks2[] = { kTestData3 }; 347 const char* chunks2[] = { kTestData3 };
310 AppendDataToFile(chunks2, 1); 348 AppendDataToFile(chunks2, 1);
311 349
312 // Rename the file after downloading all the data. 350 // Rename the file after downloading all the data.
313 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, 351 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
314 download_file_->Rename(path_3)); 352 Rename(path_3, false, &output_path));
315 renamed_path = download_file_->FullPath(); 353 renamed_path = download_file_->FullPath();
316 EXPECT_EQ(path_3, renamed_path); 354 EXPECT_EQ(path_3, renamed_path);
355 EXPECT_EQ(path_3, output_path);
317 356
318 // Check the files. 357 // Check the files.
319 EXPECT_FALSE(file_util::PathExists(path_2)); 358 EXPECT_FALSE(file_util::PathExists(path_2));
320 EXPECT_TRUE(file_util::PathExists(path_3)); 359 EXPECT_TRUE(file_util::PathExists(path_3));
321 360
322 // Should not be able to get the hash until the file is closed. 361 // Should not be able to get the hash until the file is closed.
323 std::string hash; 362 std::string hash;
324 EXPECT_FALSE(download_file_->GetHash(&hash)); 363 EXPECT_FALSE(download_file_->GetHash(&hash));
325 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NONE, true); 364 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NONE, true);
326 loop_.RunAllPending(); 365 loop_.RunAllPending();
327 366
328 // Rename the file after downloading all the data and closing the file. 367 // Rename the file after downloading all the data and closing the file.
329 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, 368 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
330 download_file_->Rename(path_4)); 369 Rename(path_4, false, &output_path));
331 renamed_path = download_file_->FullPath(); 370 renamed_path = download_file_->FullPath();
332 EXPECT_EQ(path_4, renamed_path); 371 EXPECT_EQ(path_4, renamed_path);
372 EXPECT_EQ(path_4, output_path);
333 373
334 // Check the files. 374 // Check the files.
335 EXPECT_FALSE(file_util::PathExists(path_3)); 375 EXPECT_FALSE(file_util::PathExists(path_3));
336 EXPECT_TRUE(file_util::PathExists(path_4)); 376 EXPECT_TRUE(file_util::PathExists(path_4));
337 377
338 // Check the hash. 378 // Check the hash.
339 EXPECT_TRUE(download_file_->GetHash(&hash)); 379 EXPECT_TRUE(download_file_->GetHash(&hash));
340 EXPECT_EQ(kDataHash, base::HexEncode(hash.data(), hash.size())); 380 EXPECT_EQ(kDataHash, base::HexEncode(hash.data(), hash.size()));
341 381
382 // Check that a rename with overwrite to an existing file succeeds.
383 std::string file_contents;
384 ASSERT_FALSE(file_util::PathExists(path_5));
385 static const char file_data[] = "xyzzy";
386 ASSERT_EQ(static_cast<int>(sizeof(file_data) - 1),
387 file_util::WriteFile(path_5, file_data, sizeof(file_data) - 1));
388 ASSERT_TRUE(file_util::PathExists(path_5));
389 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents));
390 EXPECT_EQ(std::string(file_data), file_contents);
391
392 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
393 Rename(path_5, true, &output_path));
394 EXPECT_EQ(path_5, output_path);
395
396 file_contents = "";
397 EXPECT_TRUE(file_util::ReadFileToString(path_5, &file_contents));
398 EXPECT_NE(std::string(file_data), file_contents);
399
342 DestroyDownloadFile(0); 400 DestroyDownloadFile(0);
343 } 401 }
344 402
asanka 2012/07/05 18:47:21 Also throw in a RenameError test now that error re
Randy Smith (Not in Mondays) 2012/07/09 20:35:51 Good thought! I didn't know about MakeFileUnwrita
403 // Test to make sure the rename uniquifies if we aren't overwriting
404 // and there's a file where we're aiming.
405 TEST_F(DownloadFileTest, RenameOverwrite) {
406 ASSERT_TRUE(CreateDownloadFile(0, true));
407 FilePath initial_path(download_file_->FullPath());
408 EXPECT_TRUE(file_util::PathExists(initial_path));
409 FilePath path_1(initial_path.InsertBeforeExtensionASCII("_1"));
410 FilePath path_1_suffixed(path_1.InsertBeforeExtensionASCII(" (1)"));
411
412 ASSERT_FALSE(file_util::PathExists(path_1));
413 static const char file_data[] = "xyzzy";
414 ASSERT_EQ(static_cast<int>(sizeof(file_data)),
415 file_util::WriteFile(path_1, file_data, sizeof(file_data)));
416 ASSERT_TRUE(file_util::PathExists(path_1));
417
418 EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE,
419 Rename(path_1, false, NULL));
420 EXPECT_TRUE(file_util::PathExists(path_1_suffixed));
421
422 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NONE, true);
423 loop_.RunAllPending();
424 DestroyDownloadFile(0);
425 }
426
427 // TODO(rdsmith): Test proper behavior of DownloadFile in the case of
428 // errors on the rename (including writing to the file after rename error).
429
345 // Various tests of the StreamActive method. 430 // Various tests of the StreamActive method.
346 TEST_F(DownloadFileTest, StreamEmptySuccess) { 431 TEST_F(DownloadFileTest, StreamEmptySuccess) {
347 ASSERT_TRUE(CreateDownloadFile(0, true)); 432 ASSERT_TRUE(CreateDownloadFile(0, true));
348 FilePath initial_path(download_file_->FullPath()); 433 FilePath initial_path(download_file_->FullPath());
349 EXPECT_TRUE(file_util::PathExists(initial_path)); 434 EXPECT_TRUE(file_util::PathExists(initial_path));
350 435
351 // Test that calling the sink_callback_ on an empty stream shouldn't 436 // Test that calling the sink_callback_ on an empty stream shouldn't
352 // do anything. 437 // do anything.
353 AppendDataToFile(NULL, 0); 438 AppendDataToFile(NULL, 0);
354 ::testing::Mock::VerifyAndClearExpectations(download_manager_.get()); 439 ::testing::Mock::VerifyAndClearExpectations(download_manager_.get());
(...skipping 15 matching lines...) Expand all
370 DestroyDownloadFile(0); 455 DestroyDownloadFile(0);
371 } 456 }
372 457
373 TEST_F(DownloadFileTest, StreamEmptyError) { 458 TEST_F(DownloadFileTest, StreamEmptyError) {
374 ASSERT_TRUE(CreateDownloadFile(0, true)); 459 ASSERT_TRUE(CreateDownloadFile(0, true));
375 FilePath initial_path(download_file_->FullPath()); 460 FilePath initial_path(download_file_->FullPath());
376 EXPECT_TRUE(file_util::PathExists(initial_path)); 461 EXPECT_TRUE(file_util::PathExists(initial_path));
377 462
378 // Finish the download in error and make sure we see it on the 463 // Finish the download in error and make sure we see it on the
379 // DownloadManager. 464 // DownloadManager.
380 EXPECT_CALL(*(download_manager_.get()), 465 EXPECT_CALL(*(download_manager_.get()),
asanka 2012/07/05 18:47:21 Expect a sequence restricted UpdateDownload() call
Randy Smith (Not in Mondays) 2012/07/09 20:35:51 So the tricky thing here is that we're going to ha
381 OnDownloadInterrupted( 466 OnDownloadInterrupted(
382 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(), 467 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(),
383 0, _,
384 content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED)); 468 content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED));
385 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, false); 469 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, false);
386 470
387 DestroyDownloadFile(0); 471 DestroyDownloadFile(0);
388 } 472 }
389 473
390 TEST_F(DownloadFileTest, StreamNonEmptySuccess) { 474 TEST_F(DownloadFileTest, StreamNonEmptySuccess) {
391 ASSERT_TRUE(CreateDownloadFile(0, true)); 475 ASSERT_TRUE(CreateDownloadFile(0, true));
392 FilePath initial_path(download_file_->FullPath()); 476 FilePath initial_path(download_file_->FullPath());
393 EXPECT_TRUE(file_util::PathExists(initial_path)); 477 EXPECT_TRUE(file_util::PathExists(initial_path));
(...skipping 18 matching lines...) Expand all
412 EXPECT_TRUE(file_util::PathExists(initial_path)); 496 EXPECT_TRUE(file_util::PathExists(initial_path));
413 497
414 const char* chunks1[] = { kTestData1, kTestData2 }; 498 const char* chunks1[] = { kTestData1, kTestData2 };
415 ::testing::Sequence s1; 499 ::testing::Sequence s1;
416 SetupDataAppend(chunks1, 2, s1); 500 SetupDataAppend(chunks1, 2, s1);
417 SetupFinishStream(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED, 501 SetupFinishStream(content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED,
418 s1); 502 s1);
419 EXPECT_CALL(*(download_manager_.get()), 503 EXPECT_CALL(*(download_manager_.get()),
420 OnDownloadInterrupted( 504 OnDownloadInterrupted(
421 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(), 505 DownloadId(kValidIdDomain, kDummyDownloadId + 0).local(),
422 strlen(kTestData1) + strlen(kTestData2), _,
423 content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED)); 506 content::DOWNLOAD_INTERRUPT_REASON_NETWORK_DISCONNECTED));
424 sink_callback_.Run(); 507 sink_callback_.Run();
508 loop_.RunAllPending();
509 EXPECT_EQ(static_cast<int64>(strlen(kTestData1) + strlen(kTestData2)),
510 bytes_);
425 VerifyStreamAndSize(); 511 VerifyStreamAndSize();
426 DestroyDownloadFile(0); 512 DestroyDownloadFile(0);
427 } 513 }
428 514
429 // Send some data, wait 3/4s of a second, run the message loop, and 515 // Send some data, wait 3/4s of a second, run the message loop, and
430 // confirm the values the DownloadManager received are correct. 516 // confirm the values the DownloadManager received are correct.
431 TEST_F(DownloadFileTest, ConfirmUpdate) { 517 TEST_F(DownloadFileTest, ConfirmUpdate) {
432 CreateDownloadFile(0, true); 518 CreateDownloadFile(0, true);
433 519
434 const char* chunks1[] = { kTestData1, kTestData2 }; 520 const char* chunks1[] = { kTestData1, kTestData2 };
435 AppendDataToFile(chunks1, 2); 521 AppendDataToFile(chunks1, 2);
436 522
437 // Run the message loops for 750ms and check for results. 523 // Run the message loops for 750ms and check for results.
438 loop_.PostDelayedTask(FROM_HERE, MessageLoop::QuitClosure(), 524 loop_.PostDelayedTask(FROM_HERE, MessageLoop::QuitClosure(),
439 base::TimeDelta::FromMilliseconds(750)); 525 base::TimeDelta::FromMilliseconds(750));
440 loop_.Run(); 526 loop_.Run();
441 527
442 EXPECT_EQ(static_cast<int64>(strlen(kTestData1) + strlen(kTestData2)), 528 EXPECT_EQ(static_cast<int64>(strlen(kTestData1) + strlen(kTestData2)),
443 bytes_); 529 bytes_);
444 EXPECT_EQ(download_file_->GetHashState(), hash_state_); 530 EXPECT_EQ(download_file_->GetHashState(), hash_state_);
445 531
446 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NONE, true); 532 FinishStream(content::DOWNLOAD_INTERRUPT_REASON_NONE, true);
447 DestroyDownloadFile(0); 533 DestroyDownloadFile(0);
448 } 534 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698