diff options
author | asanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 01:23:48 +0000 |
---|---|---|
committer | asanka@chromium.org <asanka@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-25 01:23:48 +0000 |
commit | 192d68082fcd74a8de473ed931a9931d28a66bc0 (patch) | |
tree | a4ad2578bc9c14bd13b4f21ae4b9c204c5fd33ba /content/browser/download/base_file_unittest.cc | |
parent | a33efc040cc07ab8526c9701a69103489862b455 (diff) | |
download | chromium_src-192d68082fcd74a8de473ed931a9931d28a66bc0.zip chromium_src-192d68082fcd74a8de473ed931a9931d28a66bc0.tar.gz chromium_src-192d68082fcd74a8de473ed931a9931d28a66bc0.tar.bz2 |
Refactor BaseFile methods to return a DownloadInterruptReason instead of a net::Error.
Also split the implementation into platform specific files.
BUG=157245
Review URL: https://chromiumcodereview.appspot.com/11238044
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163983 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/download/base_file_unittest.cc')
-rw-r--r-- | content/browser/download/base_file_unittest.cc | 166 |
1 files changed, 92 insertions, 74 deletions
diff --git a/content/browser/download/base_file_unittest.cc b/content/browser/download/base_file_unittest.cc index 38206e5..e672fbb 100644 --- a/content/browser/download/base_file_unittest.cc +++ b/content/browser/download/base_file_unittest.cc @@ -11,10 +11,10 @@ #include "base/string_number_conversions.h" #include "base/test/test_file_util.h" #include "content/browser/browser_thread_impl.h" +#include "content/public/browser/download_interrupt_reasons.h" #include "crypto/secure_hash.h" #include "net/base/file_stream.h" #include "net/base/mock_file_stream.h" -#include "net/base/net_errors.h" #include "testing/gtest/include/gtest/gtest.h" using content::BrowserThread; @@ -44,7 +44,7 @@ class BaseFileTest : public testing::Test { BaseFileTest() : expect_file_survives_(false), expect_in_progress_(true), - expected_error_(false), + expected_error_(content::DOWNLOAD_INTERRUPT_REASON_NONE), file_thread_(BrowserThread::FILE, &message_loop_) { } @@ -112,20 +112,29 @@ class BaseFileTest : public testing::Test { net::BoundNetLog())); } - int AppendDataToFile(const std::string& data) { + bool InitializeFile() { + content::DownloadInterruptReason result = + base_file_->Initialize(temp_dir_.path()); + EXPECT_EQ(expected_error_, result); + return result == content::DOWNLOAD_INTERRUPT_REASON_NONE; + } + + bool AppendDataToFile(const std::string& data) { EXPECT_EQ(expect_in_progress_, base_file_->in_progress()); - int appended = base_file_->AppendDataToFile(data.data(), data.size()); - if (appended == net::OK) - EXPECT_TRUE(expect_in_progress_) - << " appended = " << appended; + content::DownloadInterruptReason result = + base_file_->AppendDataToFile(data.data(), data.size()); + if (result == content::DOWNLOAD_INTERRUPT_REASON_NONE) + EXPECT_TRUE(expect_in_progress_) << " result = " << result; + + EXPECT_EQ(expected_error_, result); if (base_file_->in_progress()) { expected_data_ += data; - if (!expected_error_) { + if (expected_error_ == content::DOWNLOAD_INTERRUPT_REASON_NONE) { EXPECT_EQ(static_cast<int64>(expected_data_.size()), base_file_->bytes_so_far()); } } - return appended; + return result == content::DOWNLOAD_INTERRUPT_REASON_NONE; } void set_expected_data(const std::string& data) { expected_data_ = data; } @@ -143,11 +152,13 @@ class BaseFileTest : public testing::Test { scoped_ptr<net::FileStream>(), net::BoundNetLog()); - EXPECT_EQ(net::OK, file.Initialize(temp_dir_.path())); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + file.Initialize(temp_dir_.path())); file_name = file.full_path(); EXPECT_NE(FilePath::StringType(), file_name.value()); - EXPECT_EQ(net::OK, file.AppendDataToFile(kTestData4, kTestDataLength4)); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + file.AppendDataToFile(kTestData4, kTestDataLength4)); // Keep the file from getting deleted when existing_file_name is deleted. file.Detach(); @@ -166,7 +177,8 @@ class BaseFileTest : public testing::Test { "", scoped_ptr<net::FileStream>(), net::BoundNetLog()); - EXPECT_EQ(net::OK, duplicate_file.Initialize(temp_dir_.path())); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + duplicate_file.Initialize(temp_dir_.path())); // Write something into it. duplicate_file.AppendDataToFile(kTestData4, kTestDataLength4); // Detach the file so it isn't deleted on destruction of |duplicate_file|. @@ -183,7 +195,7 @@ class BaseFileTest : public testing::Test { return base_file_->start_tick_; } - void set_expected_error(net::Error err) { + void set_expected_error(content::DownloadInterruptReason err) { expected_error_ = err; } @@ -210,7 +222,7 @@ class BaseFileTest : public testing::Test { private: // Keep track of what data should be saved to the disk file. std::string expected_data_; - bool expected_error_; + content::DownloadInterruptReason expected_error_; // Mock file thread to satisfy debug checks in BaseFile. MessageLoop message_loop_; @@ -229,7 +241,7 @@ TEST_F(BaseFileTest, CreateDestroy) { // Cancel the download explicitly. TEST_F(BaseFileTest, Cancel) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); EXPECT_TRUE(file_util::PathExists(base_file_->full_path())); base_file_->Cancel(); EXPECT_FALSE(file_util::PathExists(base_file_->full_path())); @@ -239,8 +251,8 @@ TEST_F(BaseFileTest, Cancel) { // Write data to the file and detach it, so it doesn't get deleted // automatically when base_file_ is destructed. TEST_F(BaseFileTest, WriteAndDetach) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); base_file_->Finish(); base_file_->Detach(); expect_file_survives_ = true; @@ -256,8 +268,8 @@ TEST_F(BaseFileTest, WriteWithHashAndDetach) { base::HexEncode(expected_hash.data(), expected_hash.size()); MakeFileWithHash(); - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); base_file_->Finish(); std::string hash; @@ -272,16 +284,17 @@ TEST_F(BaseFileTest, WriteWithHashAndDetach) { // Rename the file after writing to it, then detach. TEST_F(BaseFileTest, WriteThenRenameAndDetach) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); FilePath initial_path(base_file_->full_path()); EXPECT_TRUE(file_util::PathExists(initial_path)); FilePath new_path(temp_dir_.path().AppendASCII("NewFile")); EXPECT_FALSE(file_util::PathExists(new_path)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); - EXPECT_EQ(net::OK, base_file_->Rename(new_path)); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + base_file_->Rename(new_path)); EXPECT_FALSE(file_util::PathExists(initial_path)); EXPECT_TRUE(file_util::PathExists(new_path)); @@ -292,17 +305,17 @@ TEST_F(BaseFileTest, WriteThenRenameAndDetach) { // Write data to the file once. TEST_F(BaseFileTest, SingleWrite) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); base_file_->Finish(); } // Write data to the file multiple times. TEST_F(BaseFileTest, MultipleWrites) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData3)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); + ASSERT_TRUE(AppendDataToFile(kTestData3)); std::string hash; EXPECT_FALSE(base_file_->GetHash(&hash)); base_file_->Finish(); @@ -318,10 +331,10 @@ TEST_F(BaseFileTest, SingleWriteWithHash) { base::HexEncode(expected_hash.data(), expected_hash.size()); MakeFileWithHash(); - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); // Can get partial hash states before Finish() is called. EXPECT_STRNE(std::string().c_str(), base_file_->GetHashState().c_str()); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); EXPECT_STRNE(std::string().c_str(), base_file_->GetHashState().c_str()); base_file_->Finish(); @@ -343,10 +356,10 @@ TEST_F(BaseFileTest, MultipleWritesWithHash) { std::string hash; MakeFileWithHash(); - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData3)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); + ASSERT_TRUE(AppendDataToFile(kTestData3)); // No hash before Finish() is called. EXPECT_FALSE(base_file_->GetHash(&hash)); base_file_->Finish(); @@ -370,10 +383,10 @@ TEST_F(BaseFileTest, MultipleWritesInterruptedWithHash) { base::HexEncode(expected_hash.data(), expected_hash.size()); MakeFileWithHash(); - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); // Write some data - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); // Get the hash state and file name. std::string hash_state; hash_state = base_file_->GetHashState(); @@ -389,9 +402,11 @@ TEST_F(BaseFileTest, MultipleWritesInterruptedWithHash) { hash_state, scoped_ptr<net::FileStream>(), net::BoundNetLog()); - ASSERT_EQ(net::OK, second_file.Initialize(temp_dir_.path())); + ASSERT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + second_file.Initialize(temp_dir_.path())); std::string data(kTestData3); - EXPECT_EQ(net::OK, second_file.AppendDataToFile(data.data(), data.size())); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + second_file.AppendDataToFile(data.data(), data.size())); second_file.Finish(); std::string hash; @@ -403,16 +418,17 @@ TEST_F(BaseFileTest, MultipleWritesInterruptedWithHash) { // Rename the file after all writes to it. TEST_F(BaseFileTest, WriteThenRename) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); FilePath initial_path(base_file_->full_path()); EXPECT_TRUE(file_util::PathExists(initial_path)); FilePath new_path(temp_dir_.path().AppendASCII("NewFile")); EXPECT_FALSE(file_util::PathExists(new_path)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); - EXPECT_EQ(net::OK, base_file_->Rename(new_path)); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + base_file_->Rename(new_path)); EXPECT_FALSE(file_util::PathExists(initial_path)); EXPECT_TRUE(file_util::PathExists(new_path)); @@ -421,28 +437,29 @@ TEST_F(BaseFileTest, WriteThenRename) { // Rename the file while the download is still in progress. TEST_F(BaseFileTest, RenameWhileInProgress) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); FilePath initial_path(base_file_->full_path()); EXPECT_TRUE(file_util::PathExists(initial_path)); FilePath new_path(temp_dir_.path().AppendASCII("NewFile")); EXPECT_FALSE(file_util::PathExists(new_path)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); EXPECT_TRUE(base_file_->in_progress()); - EXPECT_EQ(net::OK, base_file_->Rename(new_path)); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_NONE, + base_file_->Rename(new_path)); EXPECT_FALSE(file_util::PathExists(initial_path)); EXPECT_TRUE(file_util::PathExists(new_path)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); base_file_->Finish(); } // Test that a failed rename reports the correct error. TEST_F(BaseFileTest, RenameWithError) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); // TestDir is a subdirectory in |temp_dir_| that we will make read-only so // that the rename will fail. @@ -455,7 +472,8 @@ TEST_F(BaseFileTest, RenameWithError) { { file_util::PermissionRestorer restore_permissions_for(test_dir); ASSERT_TRUE(file_util::MakeFileUnwritable(test_dir)); - EXPECT_EQ(net::ERR_ACCESS_DENIED, base_file_->Rename(new_path)); + EXPECT_EQ(content::DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, + base_file_->Rename(new_path)); } base_file_->Finish(); @@ -488,12 +506,12 @@ TEST_F(BaseFileTest, MultipleWritesWithError) { "", mock_file_stream_scoped_ptr.Pass(), net::BoundNetLog())); - EXPECT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); mock_file_stream->set_forced_error(net::ERR_ACCESS_DENIED); - set_expected_error(net::ERR_ACCESS_DENIED); - ASSERT_NE(net::OK, AppendDataToFile(kTestData3)); + set_expected_error(content::DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED); + ASSERT_FALSE(AppendDataToFile(kTestData3)); std::string hash; EXPECT_FALSE(base_file_->GetHash(&hash)); base_file_->Finish(); @@ -502,19 +520,20 @@ TEST_F(BaseFileTest, MultipleWritesWithError) { // Try to write to uninitialized file. TEST_F(BaseFileTest, UninitializedFile) { expect_in_progress_ = false; - EXPECT_EQ(net::ERR_INVALID_HANDLE, AppendDataToFile(kTestData1)); + set_expected_error(content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); + EXPECT_FALSE(AppendDataToFile(kTestData1)); } // Create two |BaseFile|s with the same file, and attempt to write to both. // Overwrite base_file_ with another file with the same name and // non-zero contents, and make sure the last file to close 'wins'. TEST_F(BaseFileTest, DuplicateBaseFile) { - EXPECT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); // Create another |BaseFile| referring to the file that |base_file_| owns. CreateFileWithName(base_file_->full_path()); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData1)); base_file_->Finish(); } @@ -535,13 +554,13 @@ TEST_F(BaseFileTest, AppendToBaseFile) { scoped_ptr<net::FileStream>(), net::BoundNetLog())); - EXPECT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); const FilePath file_name = base_file_->full_path(); EXPECT_NE(FilePath::StringType(), file_name.value()); // Write into the file. - EXPECT_EQ(net::OK, AppendDataToFile(kTestData1)); + EXPECT_TRUE(AppendDataToFile(kTestData1)); base_file_->Finish(); base_file_->Detach(); @@ -570,16 +589,15 @@ TEST_F(BaseFileTest, ReadonlyBaseFile) { net::BoundNetLog())); expect_in_progress_ = false; - - int init_error = base_file_->Initialize(temp_dir_.path()); - DVLOG(1) << " init_error = " << init_error; - EXPECT_NE(net::OK, init_error); + set_expected_error(content::DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED); + EXPECT_FALSE(InitializeFile()); const FilePath file_name = base_file_->full_path(); EXPECT_NE(FilePath::StringType(), file_name.value()); // Write into the file. - EXPECT_NE(net::OK, AppendDataToFile(kTestData1)); + set_expected_error(content::DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); + EXPECT_FALSE(AppendDataToFile(kTestData1)); base_file_->Finish(); base_file_->Detach(); @@ -596,7 +614,7 @@ TEST_F(BaseFileTest, IsEmptyHash) { // Test that calculating speed after no writes. TEST_F(BaseFileTest, SpeedWithoutWrite) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); base::TimeTicks current = StartTick() + kElapsedTimeDelta; ASSERT_EQ(0, CurrentSpeedAtTime(current)); base_file_->Finish(); @@ -604,8 +622,8 @@ TEST_F(BaseFileTest, SpeedWithoutWrite) { // Test that calculating speed after a single write. TEST_F(BaseFileTest, SpeedAfterSingleWrite) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); base::TimeTicks current = StartTick() + kElapsedTimeDelta; int64 expected_speed = kTestDataLength1 / kElapsedTimeSeconds; ASSERT_EQ(expected_speed, CurrentSpeedAtTime(current)); @@ -614,11 +632,11 @@ TEST_F(BaseFileTest, SpeedAfterSingleWrite) { // Test that calculating speed after a multiple writes. TEST_F(BaseFileTest, SpeedAfterMultipleWrite) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData2)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData3)); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData4)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); + ASSERT_TRUE(AppendDataToFile(kTestData2)); + ASSERT_TRUE(AppendDataToFile(kTestData3)); + ASSERT_TRUE(AppendDataToFile(kTestData4)); base::TimeTicks current = StartTick() + kElapsedTimeDelta; int64 expected_speed = (kTestDataLength1 + kTestDataLength2 + kTestDataLength3 + kTestDataLength4) / kElapsedTimeSeconds; @@ -628,8 +646,8 @@ TEST_F(BaseFileTest, SpeedAfterMultipleWrite) { // Test that calculating speed after no delay - should not divide by 0. TEST_F(BaseFileTest, SpeedAfterNoElapsedTime) { - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); - ASSERT_EQ(net::OK, AppendDataToFile(kTestData1)); + ASSERT_TRUE(InitializeFile()); + ASSERT_TRUE(AppendDataToFile(kTestData1)); ASSERT_EQ(0, CurrentSpeedAtTime(StartTick())); base_file_->Finish(); } @@ -637,7 +655,7 @@ TEST_F(BaseFileTest, SpeedAfterNoElapsedTime) { // Test that a temporary file is created in the default download directory. TEST_F(BaseFileTest, CreatedInDefaultDirectory) { ASSERT_TRUE(base_file_->full_path().empty()); - ASSERT_EQ(net::OK, base_file_->Initialize(temp_dir_.path())); + ASSERT_TRUE(InitializeFile()); EXPECT_FALSE(base_file_->full_path().empty()); // On Windows, CreateTemporaryFileInDir() will cause a path with short names |