Index: chrome/browser/chromeos/drive/download_handler_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/download_handler_unittest.cc b/chrome/browser/chromeos/drive/download_handler_unittest.cc |
index 52bde9123f12669dcd1911528fab184285e241ac..ab8e3ebea2108d1d8eabb00d5ab40cfe2fa312c7 100644 |
--- a/chrome/browser/chromeos/drive/download_handler_unittest.cc |
+++ b/chrome/browser/chromeos/drive/download_handler_unittest.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/chromeos/drive/download_handler.h" |
#include "base/files/scoped_temp_dir.h" |
+#include "base/run_loop.h" |
#include "chrome/browser/chromeos/drive/file_system_util.h" |
#include "chrome/test/base/testing_profile.h" |
#include "components/drive/dummy_file_system.h" |
@@ -42,6 +43,15 @@ class DownloadHandlerTestFileSystem : public DummyFileSystem { |
callback.Run(error_); |
} |
+ void FreeDiskSpaceIfNeededFor( |
+ int64 num_bytes, |
+ const FreeDiskSpaceCallback& callback) override { |
+ free_disk_space_if_needed_for_num_bytes_.push_back(num_bytes); |
+ callback.Run(true); |
+ } |
+ |
+ std::vector<int64> free_disk_space_if_needed_for_num_bytes_; |
+ |
private: |
FileError error_; |
}; |
@@ -62,6 +72,8 @@ class DownloadHandlerTest : public testing::Test { |
download_handler_.reset(new DownloadHandler(&test_file_system_)); |
download_handler_->Initialize(download_manager_.get(), temp_dir_.path()); |
+ download_handler_->SetFreeDiskSpaceDelayForTesting( |
+ base::TimeDelta::FromMilliseconds(0)); |
} |
protected: |
@@ -196,4 +208,77 @@ TEST_F(DownloadHandlerTest, CheckForFileExistence) { |
EXPECT_FALSE(file_exists); |
} |
+TEST_F(DownloadHandlerTest, FreeDiskSpaceForUnknownSizeDownload) { |
+ const int kUnknownSizeDownloadRequestSize = 512 * (1 << 20); // 512MB |
+ ASSERT_EQ(0u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ EXPECT_CALL(download_item_, IsDone()).WillRepeatedly(testing::Return(false)); |
+ EXPECT_CALL(download_item_, GetTotalBytes()) |
+ .WillRepeatedly(testing::Return(0)); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ true /* immediate */); |
+ ASSERT_EQ(1u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ ASSERT_EQ(kUnknownSizeDownloadRequestSize, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_[0]); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ false /* not immediate */); |
+ |
+ // FreeDiskSpaceIfNeededFor should be rate limited. |
+ ASSERT_EQ(1u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ false /* not immediate */); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ ASSERT_EQ(2u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ ASSERT_EQ(kUnknownSizeDownloadRequestSize, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_[1]); |
+} |
+ |
+TEST_F(DownloadHandlerTest, FreeDiskSpaceForKnownSizeDownload) { |
+ const int kKnownDownloadSize = 5 * (1 << 20); // 5MB |
+ ASSERT_EQ(0u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ EXPECT_CALL(download_item_, IsDone()).WillRepeatedly(testing::Return(false)); |
+ EXPECT_CALL(download_item_, GetTotalBytes()) |
+ .WillRepeatedly(testing::Return(kKnownDownloadSize)); |
+ EXPECT_CALL(download_item_, GetReceivedBytes()) |
+ .WillOnce(testing::Return(0)) |
+ .WillOnce(testing::Return(100)); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ true /* immediate */); |
+ |
+ ASSERT_EQ(1u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ ASSERT_EQ(kKnownDownloadSize, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_[0]); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ false /* not immediate */); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ ASSERT_EQ(2u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ ASSERT_EQ(kKnownDownloadSize - 100, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_[1]); |
+} |
+ |
+TEST_F(DownloadHandlerTest, FreeDiskSpaceForAlreadyCompletedDownload) { |
+ ASSERT_EQ(0u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+ EXPECT_CALL(download_item_, IsDone()).WillOnce(testing::Return(true)); |
+ |
+ download_handler_->FreeDiskSpaceIfNeeded(&download_item_, |
+ true /* immediate */); |
+ |
+ ASSERT_EQ(0u, |
+ test_file_system_.free_disk_space_if_needed_for_num_bytes_.size()); |
+} |
+ |
} // namespace drive |