Index: content/browser/download/download_file_manager_unittest.cc |
diff --git a/content/browser/download/download_file_manager_unittest.cc b/content/browser/download/download_file_manager_unittest.cc |
deleted file mode 100644 |
index 52ce433e5a85557846cdf965fca167a123c8ed8e..0000000000000000000000000000000000000000 |
--- a/content/browser/download/download_file_manager_unittest.cc |
+++ /dev/null |
@@ -1,413 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "content/browser/download/download_file_manager.h" |
- |
-#include "base/file_path.h" |
-#include "base/file_util.h" |
-#include "base/message_loop.h" |
-#include "base/scoped_temp_dir.h" |
-#include "base/string_number_conversions.h" |
-#include "content/browser/browser_thread_impl.h" |
-#include "content/browser/download/byte_stream.h" |
-#include "content/browser/download/download_create_info.h" |
-#include "content/browser/download/download_interrupt_reasons_impl.h" |
-#include "content/browser/download/download_request_handle.h" |
-#include "content/browser/download/mock_download_file.h" |
-#include "content/public/browser/download_id.h" |
-#include "content/public/test/mock_download_manager.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using content::BrowserThread; |
-using content::BrowserThreadImpl; |
-using content::DownloadId; |
-using content::MockDownloadManager; |
- |
-using ::testing::_; |
-using ::testing::AtLeast; |
-using ::testing::Mock; |
-using ::testing::Return; |
-using ::testing::SaveArg; |
-using ::testing::StrictMock; |
-using ::testing::StrEq; |
- |
-namespace { |
- |
-// MockDownloadManager with the addition of a mock callback used for testing. |
-class TestDownloadManager : public MockDownloadManager { |
- public: |
- MOCK_METHOD3(OnDownloadRenamed, |
- void(int download_id, |
- content::DownloadInterruptReason reason, |
- const FilePath& full_path)); |
- private: |
- ~TestDownloadManager() {} |
-}; |
- |
-class MockDownloadFileFactory : |
- public DownloadFileManager::DownloadFileFactory { |
- |
- public: |
- MockDownloadFileFactory() {} |
- virtual ~MockDownloadFileFactory() {} |
- |
- virtual content::DownloadFile* CreateFile( |
- DownloadCreateInfo* info, |
- scoped_ptr<content::ByteStreamReader> stream, |
- content::DownloadManager* download_manager, |
- bool calculate_hash, |
- const net::BoundNetLog& bound_net_log) OVERRIDE; |
- |
- MockDownloadFile* GetExistingFile(const DownloadId& id); |
- |
- private: |
- std::map<DownloadId, MockDownloadFile*> files_; |
-}; |
- |
-content::DownloadFile* MockDownloadFileFactory::CreateFile( |
- DownloadCreateInfo* info, |
- scoped_ptr<content::ByteStreamReader> stream, |
- content::DownloadManager* download_manager, |
- bool calculate_hash, |
- const net::BoundNetLog& bound_net_log) { |
- DCHECK(files_.end() == files_.find(info->download_id)); |
- MockDownloadFile* created_file = new StrictMock<MockDownloadFile>(); |
- files_[info->download_id] = created_file; |
- |
- ON_CALL(*created_file, GetDownloadManager()) |
- .WillByDefault(Return(download_manager)); |
- EXPECT_CALL(*created_file, Initialize()); |
- |
- return created_file; |
-} |
- |
-MockDownloadFile* MockDownloadFileFactory::GetExistingFile( |
- const DownloadId& id) { |
- DCHECK(files_.find(id) != files_.end()); |
- return files_[id]; |
-} |
- |
-class MockDownloadRequestHandle : public DownloadRequestHandle { |
- public: |
- MockDownloadRequestHandle(content::DownloadManager* manager) |
- : manager_(manager) {} |
- |
- virtual content::DownloadManager* GetDownloadManager() const OVERRIDE; |
- |
- private: |
- |
- content::DownloadManager* manager_; |
-}; |
- |
-content::DownloadManager* MockDownloadRequestHandle::GetDownloadManager() |
- const { |
- return manager_; |
-} |
- |
-void NullCallback() { } |
- |
-} // namespace |
- |
-class DownloadFileManagerTest : public testing::Test { |
- public: |
- // State of renamed file. Used with RenameFile(). |
- enum RenameFileState { |
- IN_PROGRESS, |
- COMPLETE |
- }; |
- |
- // Whether to overwrite the target filename in RenameFile(). |
- enum RenameFileOverwrite { |
- OVERWRITE, |
- DONT_OVERWRITE |
- }; |
- |
- static const char* kTestData1; |
- static const char* kTestData2; |
- static const char* kTestData3; |
- static const char* kTestData4; |
- static const char* kTestData5; |
- static const char* kTestData6; |
- static const int32 kDummyDownloadId; |
- static const int32 kDummyDownloadId2; |
- static const int kDummyChildId; |
- static const int kDummyRequestId; |
- |
- // We need a UI |BrowserThread| in order to destruct |download_manager_|, |
- // which has trait |BrowserThread::DeleteOnUIThread|. Without this, |
- // calling Release() on |download_manager_| won't ever result in its |
- // destructor being called and we get a leak. |
- DownloadFileManagerTest() |
- : last_reason_(content::DOWNLOAD_INTERRUPT_REASON_NONE), |
- ui_thread_(BrowserThread::UI, &loop_), |
- file_thread_(BrowserThread::FILE, &loop_) { |
- } |
- |
- ~DownloadFileManagerTest() { |
- } |
- |
- virtual void SetUp() { |
- download_manager_ = new TestDownloadManager(); |
- request_handle_.reset(new MockDownloadRequestHandle(download_manager_)); |
- download_file_factory_ = new MockDownloadFileFactory; |
- download_file_manager_ = new DownloadFileManager(download_file_factory_); |
- } |
- |
- virtual void TearDown() { |
- // When a DownloadManager's reference count drops to 0, it is not |
- // deleted immediately. Instead, a task is posted to the UI thread's |
- // message loop to delete it. |
- // So, drop the reference count to 0 and run the message loop once |
- // to ensure that all resources are cleaned up before the test exits. |
- download_manager_ = NULL; |
- ui_thread_.message_loop()->RunAllPending(); |
- } |
- |
- void ProcessAllPendingMessages() { |
- loop_.RunAllPending(); |
- } |
- |
- // Clears all gmock expectations for the download file |id| and the manager. |
- void ClearExpectations(DownloadId id) { |
- MockDownloadFile* file = download_file_factory_->GetExistingFile(id); |
- Mock::VerifyAndClearExpectations(file); |
- Mock::VerifyAndClearExpectations(download_manager_); |
- } |
- |
- void OnDownloadFileCreated(content::DownloadInterruptReason reason) { |
- last_reason_ = reason; |
- } |
- |
- // Create a download item on the DFM. |
- // |info| is the information needed to create a new download file. |
- // |id| is the download ID of the new download file. |
- void CreateDownloadFile(scoped_ptr<DownloadCreateInfo> info) { |
- // Mostly null out args; they'll be passed to MockDownloadFileFactory |
- // to be ignored anyway. |
- download_file_manager_->CreateDownloadFile( |
- info.Pass(), scoped_ptr<content::ByteStreamReader>(), |
- download_manager_, true, net::BoundNetLog(), |
- base::Bind(&DownloadFileManagerTest::OnDownloadFileCreated, |
- // The test jig will outlive all download files. |
- base::Unretained(this))); |
- |
- // Anything that isn't DOWNLOAD_INTERRUPT_REASON_NONE. |
- last_reason_ = content::DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED; |
- ProcessAllPendingMessages(); |
- EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, last_reason_); |
- } |
- |
- // Renames the download file. |
- // |id| is the download ID of the download file. |
- // |new_path| is the new file path. |
- // |unique_path| is the actual path that the download file will be |
- // renamed to. If there is an existing file at |
- // |new_path| and |replace| is false, then |new_path| |
- // will be uniquified. |
- // |rename_error| is the error to inject. For no error, |
- // use content::DOWNLOAD_INTERRUPT_REASON_NONE. |
- // |state| whether we are renaming an in-progress download or a |
- // completed download. |
- // |should_overwrite| indicates whether to replace or uniquify the file. |
- void RenameFile(const DownloadId& id, |
- const FilePath& new_path, |
- bool should_overwrite) { |
- MockDownloadFile* file = download_file_factory_->GetExistingFile(id); |
- ASSERT_TRUE(file != NULL); |
- content::DownloadFile::RenameCompletionCallback rename_callback; |
- |
- EXPECT_CALL(*file, Rename(new_path, should_overwrite, _)) |
- .WillOnce(SaveArg<2>(&rename_callback)); |
- |
- content::DownloadFile::RenameCompletionCallback passed_callback( |
- base::Bind(&TestDownloadManager::OnDownloadRenamed, |
- download_manager_, id.local())); |
- |
- download_file_manager_->RenameDownloadFile( |
- id, new_path, should_overwrite, passed_callback); |
- |
- EXPECT_TRUE(rename_callback.Equals(passed_callback)); |
- } |
- |
- void Complete(DownloadId id) { |
- MockDownloadFile* file = download_file_factory_->GetExistingFile(id); |
- ASSERT_TRUE(file != NULL); |
- |
- EXPECT_CALL(*file, AnnotateWithSourceInformation()) |
- .WillOnce(Return()); |
- EXPECT_CALL(*file, Detach()) |
- .WillOnce(Return()); |
- int num_downloads = download_file_manager_->NumberOfActiveDownloads(); |
- EXPECT_LT(0, num_downloads); |
- download_file_manager_->CompleteDownload(id, base::Bind(NullCallback)); |
- EXPECT_EQ(num_downloads - 1, |
- download_file_manager_->NumberOfActiveDownloads()); |
- EXPECT_EQ(NULL, download_file_manager_->GetDownloadFile(id)); |
- } |
- |
- void CleanUp(DownloadId id) { |
- // Expected calls: |
- // DownloadFileManager::CancelDownload |
- // DownloadFile::Cancel |
- // DownloadFileManager::EraseDownload |
- // if no more downloads: |
- // DownloadFileManager::StopUpdateTimer |
- MockDownloadFile* file = download_file_factory_->GetExistingFile(id); |
- ASSERT_TRUE(file != NULL); |
- |
- EXPECT_CALL(*file, Cancel()); |
- |
- download_file_manager_->CancelDownload(id); |
- |
- EXPECT_EQ(NULL, download_file_manager_->GetDownloadFile(id)); |
- } |
- |
- protected: |
- scoped_refptr<TestDownloadManager> download_manager_; |
- scoped_ptr<MockDownloadRequestHandle> request_handle_; |
- MockDownloadFileFactory* download_file_factory_; |
- scoped_refptr<DownloadFileManager> download_file_manager_; |
- |
- // Error from creating download file. |
- content::DownloadInterruptReason last_reason_; |
- |
- // Per-download statistics. |
- std::map<DownloadId, int64> byte_count_; |
- std::map<DownloadId, int> error_count_; |
- |
- private: |
- MessageLoop loop_; |
- |
- // UI thread. |
- BrowserThreadImpl ui_thread_; |
- |
- // File thread to satisfy debug checks in DownloadFile. |
- BrowserThreadImpl file_thread_; |
-}; |
- |
-const char* DownloadFileManagerTest::kTestData1 = |
- "Let's write some data to the file!\n"; |
-const char* DownloadFileManagerTest::kTestData2 = "Writing more data.\n"; |
-const char* DownloadFileManagerTest::kTestData3 = "Final line."; |
-const char* DownloadFileManagerTest::kTestData4 = "Writing, writing, writing\n"; |
-const char* DownloadFileManagerTest::kTestData5 = "All we do is writing,\n"; |
-const char* DownloadFileManagerTest::kTestData6 = "Rawhide!"; |
- |
-const int32 DownloadFileManagerTest::kDummyDownloadId = 23; |
-const int32 DownloadFileManagerTest::kDummyDownloadId2 = 77; |
-const int DownloadFileManagerTest::kDummyChildId = 3; |
-const int DownloadFileManagerTest::kDummyRequestId = 67; |
- |
-TEST_F(DownloadFileManagerTest, Cancel) { |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- |
- CreateDownloadFile(info.Pass()); |
- |
- CleanUp(dummy_id); |
-} |
- |
-TEST_F(DownloadFileManagerTest, Complete) { |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- |
- CreateDownloadFile(info.Pass()); |
- |
- Complete(dummy_id); |
-} |
- |
-TEST_F(DownloadFileManagerTest, Rename) { |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- ScopedTempDir download_dir; |
- ASSERT_TRUE(download_dir.CreateUniqueTempDir()); |
- |
- CreateDownloadFile(info.Pass()); |
- |
- FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); |
- RenameFile(dummy_id, foo, true); |
- |
- CleanUp(dummy_id); |
-} |
- |
-TEST_F(DownloadFileManagerTest, RenameNoOverwrite) { |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- ScopedTempDir download_dir; |
- ASSERT_TRUE(download_dir.CreateUniqueTempDir()); |
- |
- CreateDownloadFile(info.Pass()); |
- |
- FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); |
- RenameFile(dummy_id, foo, false); |
- |
- CleanUp(dummy_id); |
-} |
- |
-TEST_F(DownloadFileManagerTest, RenameTwice) { |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- ScopedTempDir download_dir; |
- ASSERT_TRUE(download_dir.CreateUniqueTempDir()); |
- |
- CreateDownloadFile(info.Pass()); |
- |
- FilePath crfoo(download_dir.path().Append( |
- FILE_PATH_LITERAL("foo.txt.crdownload"))); |
- RenameFile(dummy_id, crfoo, true); |
- |
- FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); |
- RenameFile(dummy_id, foo, true); |
- |
- CleanUp(dummy_id); |
-} |
- |
-TEST_F(DownloadFileManagerTest, TwoDownloads) { |
- // Same as StartDownload, at first. |
- scoped_ptr<DownloadCreateInfo> info(new DownloadCreateInfo); |
- DownloadId dummy_id(download_manager_.get(), kDummyDownloadId); |
- info->download_id = dummy_id; |
- scoped_ptr<DownloadCreateInfo> info2(new DownloadCreateInfo); |
- DownloadId dummy_id2(download_manager_.get(), kDummyDownloadId2); |
- info2->download_id = dummy_id2; |
- ScopedTempDir download_dir; |
- ASSERT_TRUE(download_dir.CreateUniqueTempDir()); |
- |
- CreateDownloadFile(info.Pass()); |
- CreateDownloadFile(info2.Pass()); |
- |
- FilePath crbar(download_dir.path().Append( |
- FILE_PATH_LITERAL("bar.txt.crdownload"))); |
- RenameFile(dummy_id2, crbar, true); |
- |
- FilePath crfoo(download_dir.path().Append( |
- FILE_PATH_LITERAL("foo.txt.crdownload"))); |
- RenameFile(dummy_id, crfoo, true); |
- |
- |
- FilePath bar(download_dir.path().Append(FILE_PATH_LITERAL("bar.txt"))); |
- RenameFile(dummy_id2, bar, true); |
- |
- CleanUp(dummy_id2); |
- |
- FilePath foo(download_dir.path().Append(FILE_PATH_LITERAL("foo.txt"))); |
- RenameFile(dummy_id, foo, true); |
- |
- CleanUp(dummy_id); |
-} |
- |
-// TODO(ahendrickson) -- A test for download manager shutdown. |
-// Expected call sequence: |
-// OnDownloadManagerShutdown |
-// DownloadFile::GetDownloadManager |
-// DownloadFile::CancelDownloadRequest |
-// DownloadFile::~DownloadFile |