Chromium Code Reviews| Index: chrome/browser/chromeos/drive/file_system_unittest.cc |
| diff --git a/chrome/browser/chromeos/drive/file_system_unittest.cc b/chrome/browser/chromeos/drive/file_system_unittest.cc |
| index 27a029e2d5000feeb22b45791b40d78e15801472..d9595a7e4a3300f40dd5aa2f33ad923c352125bd 100644 |
| --- a/chrome/browser/chromeos/drive/file_system_unittest.cc |
| +++ b/chrome/browser/chromeos/drive/file_system_unittest.cc |
| @@ -461,6 +461,10 @@ class DriveFileSystemTest : public testing::Test { |
| }; |
| TEST_F(DriveFileSystemTest, DuplicatedAsyncInitialization) { |
| + // "Fast fetch" will fire an OnirectoryChanged event. |
| + EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
| + Eq(base::FilePath(FILE_PATH_LITERAL("drive"))))).Times(1); |
| + |
| int counter = 0; |
| const GetEntryInfoCallback& callback = base::Bind( |
| &AsyncInitializationCallback, &counter, 2, &message_loop_); |
| @@ -475,8 +479,9 @@ TEST_F(DriveFileSystemTest, DuplicatedAsyncInitialization) { |
| // Although GetEntryInfoByPath() was called twice, the account metadata |
| // should only be loaded once. In the past, there was a bug that caused |
| // it to be loaded twice. |
| - EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
| EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); |
| + // See the comment in GetMyDriveRoot test case why this is 2. |
| + EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); |
| } |
| TEST_F(DriveFileSystemTest, GetGrandRootEntry) { |
| @@ -503,18 +508,25 @@ TEST_F(DriveFileSystemTest, GetOtherDirEntry) { |
| } |
| TEST_F(DriveFileSystemTest, GetMyDriveRoot) { |
| + // "Fast fetch" will fire an OnirectoryChanged event. |
| + EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged( |
| + Eq(base::FilePath(FILE_PATH_LITERAL("drive"))))).Times(1); |
| + |
| const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root")); |
| scoped_ptr<ResourceEntry> entry = GetEntryInfoByPathSync(kFilePath); |
| ASSERT_TRUE(entry); |
| EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id()); |
| - // The changestamp should be propagated to the root directory. |
| - EXPECT_EQ(fake_drive_service_->largest_changestamp(), |
| - entry->directory_specific_info().changestamp()); |
| + // Absence of "drive/root" in the local metadata triggers the "fast fetch" |
| + // of "drive" directory. Fetch of "drive" grand root directory has a special |
| + // implementation. Instead of normal GetResourceListInDirectory(), it is |
| + // emulated by calling GetAboutResource() so that the resource_id of |
| + // "drive/root" is listed. |
| + // Together with the normal GetAboutResource() call to retrieve the largest |
| + // changestamp, the method is called twice. |
| + EXPECT_EQ(2, fake_drive_service_->about_resource_load_count()); |
| - // The resource load should happen because "My Drive"'s root is not the grand |
| - // root entry and hence does not present until the initial loading. |
| - EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
| + // After "fast fetch" is done, full resource list is fetched. |
| EXPECT_EQ(1, fake_drive_service_->resource_list_load_count()); |
| } |
| @@ -891,6 +903,45 @@ TEST_F(DriveFileSystemTest, OfflineCachedFeedLoading) { |
| EXPECT_EQ(1, fake_drive_service_->change_list_load_count()); |
| } |
| +TEST_F(DriveFileSystemTest, ReadDirectoryWhileRefreshing) { |
| + EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) |
| + .Times(AtLeast(1)); |
| + |
| + // Enter the "refreshing" state. |
|
satorux1
2013/05/07 06:29:45
Enter the "refreshing" state so the fast fetch wil
hashimoto
2013/05/07 06:49:01
Done for ReadDirectoryWhileRefreshing and GetEntry
|
| + ASSERT_TRUE(SaveTestFileSystem(USE_OLD_TIMESTAMP)); |
| + file_system_->CheckForUpdates(); |
| + |
| + // The list of resources in "drive/root/Dir1" should be fetched. |
| + EXPECT_TRUE(ReadDirectoryByPathSync(base::FilePath( |
| + FILE_PATH_LITERAL("drive/root/Dir1")))); |
| + EXPECT_EQ(1, fake_drive_service_->directory_load_count()); |
| +} |
| + |
| +TEST_F(DriveFileSystemTest, GetEntryInfoExistingWhileRefreshing) { |
| + // Enter the "refreshing" state. |
| + ASSERT_TRUE(SaveTestFileSystem(USE_OLD_TIMESTAMP)); |
| + file_system_->CheckForUpdates(); |
| + |
| + // If an entry is already found in local metadata, no directory fetch happens. |
| + EXPECT_TRUE(GetEntryInfoByPathSync(base::FilePath( |
| + FILE_PATH_LITERAL("drive/root/Dir1/File2")))); |
| + EXPECT_EQ(0, fake_drive_service_->directory_load_count()); |
| +} |
| + |
| +TEST_F(DriveFileSystemTest, GetEntryInfoNonExistentWhileRefreshing) { |
| + EXPECT_CALL(*mock_directory_observer_, OnDirectoryChanged(_)) |
| + .Times(AtLeast(1)); |
| + |
| + // Enter the "refreshing" state. |
| + ASSERT_TRUE(SaveTestFileSystem(USE_OLD_TIMESTAMP)); |
| + file_system_->CheckForUpdates(); |
| + |
| + // If an entry is not found, parent directory's resource list is fetched. |
| + EXPECT_FALSE(GetEntryInfoByPathSync(base::FilePath( |
| + FILE_PATH_LITERAL("drive/root/Dir1/NonExistentFile")))); |
| + EXPECT_EQ(1, fake_drive_service_->directory_load_count()); |
| +} |
| + |
| TEST_F(DriveFileSystemTest, TransferFileFromLocalToRemote_RegularFile) { |
| fake_free_disk_space_getter_->set_fake_free_disk_space(kLotsOfSpace); |