Index: chrome/browser/chromeos/drive/resource_metadata_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/resource_metadata_unittest.cc b/chrome/browser/chromeos/drive/resource_metadata_unittest.cc |
deleted file mode 100644 |
index 08586207b9b81f9363508abf7b9a3972033ea9d2..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/resource_metadata_unittest.cc |
+++ /dev/null |
@@ -1,709 +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 "chrome/browser/chromeos/drive/resource_metadata.h" |
- |
-#include <algorithm> |
-#include <string> |
-#include <vector> |
- |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "chrome/browser/chromeos/drive/fake_free_disk_space_getter.h" |
-#include "chrome/browser/chromeos/drive/file_cache.h" |
-#include "chrome/browser/chromeos/drive/file_system_core_util.h" |
-#include "components/drive/drive.pb.h" |
-#include "components/drive/drive_test_util.h" |
-#include "content/public/test/test_browser_thread_bundle.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace drive { |
-namespace internal { |
-namespace { |
- |
-// The changestamp of the resource metadata used in |
-// ResourceMetadataTest. |
-const int64 kTestChangestamp = 100; |
- |
-// Returns the sorted base names from |entries|. |
-std::vector<std::string> GetSortedBaseNames( |
- const ResourceEntryVector& entries) { |
- std::vector<std::string> base_names; |
- for (size_t i = 0; i < entries.size(); ++i) |
- base_names.push_back(entries[i].base_name()); |
- std::sort(base_names.begin(), base_names.end()); |
- |
- return base_names; |
-} |
- |
-// Creates a ResourceEntry for a directory with explicitly set resource_id. |
-ResourceEntry CreateDirectoryEntryWithResourceId( |
- const std::string& title, |
- const std::string& resource_id, |
- const std::string& parent_local_id) { |
- ResourceEntry entry; |
- entry.set_title(title); |
- entry.set_resource_id(resource_id); |
- entry.set_parent_local_id(parent_local_id); |
- entry.mutable_file_info()->set_is_directory(true); |
- entry.mutable_directory_specific_info()->set_changestamp(kTestChangestamp); |
- return entry; |
-} |
- |
-// Creates a ResourceEntry for a directory. |
-ResourceEntry CreateDirectoryEntry(const std::string& title, |
- const std::string& parent_local_id) { |
- return CreateDirectoryEntryWithResourceId( |
- title, "id:" + title, parent_local_id); |
-} |
- |
-// Creates a ResourceEntry for a file with explicitly set resource_id. |
-ResourceEntry CreateFileEntryWithResourceId( |
- const std::string& title, |
- const std::string& resource_id, |
- const std::string& parent_local_id) { |
- ResourceEntry entry; |
- entry.set_title(title); |
- entry.set_resource_id(resource_id); |
- entry.set_parent_local_id(parent_local_id); |
- entry.mutable_file_info()->set_is_directory(false); |
- entry.mutable_file_info()->set_size(1024); |
- entry.mutable_file_specific_info()->set_md5("md5:" + title); |
- return entry; |
-} |
- |
-// Creates a ResourceEntry for a file. |
-ResourceEntry CreateFileEntry(const std::string& title, |
- const std::string& parent_local_id) { |
- return CreateFileEntryWithResourceId(title, "id:" + title, parent_local_id); |
-} |
- |
-// Creates the following files/directories |
-// drive/root/dir1/ |
-// drive/root/dir2/ |
-// drive/root/dir1/dir3/ |
-// drive/root/dir1/file4 |
-// drive/root/dir1/file5 |
-// drive/root/dir2/file6 |
-// drive/root/dir2/file7 |
-// drive/root/dir2/file8 |
-// drive/root/dir1/dir3/file9 |
-// drive/root/dir1/dir3/file10 |
-void SetUpEntries(ResourceMetadata* resource_metadata) { |
- std::string local_id; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->GetIdByPath( |
- util::GetDriveMyDriveRootPath(), &local_id)); |
- const std::string root_local_id = local_id; |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateDirectoryEntry("dir1", root_local_id), &local_id)); |
- const std::string local_id_dir1 = local_id; |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateDirectoryEntry("dir2", root_local_id), &local_id)); |
- const std::string local_id_dir2 = local_id; |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateDirectoryEntry("dir3", local_id_dir1), &local_id)); |
- const std::string local_id_dir3 = local_id; |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file4", local_id_dir1), &local_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file5", local_id_dir1), &local_id)); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file6", local_id_dir2), &local_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file7", local_id_dir2), &local_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file8", local_id_dir2), &local_id)); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file9", local_id_dir3), &local_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry( |
- CreateFileEntry("file10", local_id_dir3), &local_id)); |
- |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata->SetLargestChangestamp(kTestChangestamp)); |
-} |
- |
-} // namespace |
- |
-// Tests for methods running on the blocking task runner. |
-class ResourceMetadataTest : public testing::Test { |
- protected: |
- void SetUp() override { |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- |
- metadata_storage_.reset(new ResourceMetadataStorage( |
- temp_dir_.path(), base::ThreadTaskRunnerHandle::Get().get())); |
- ASSERT_TRUE(metadata_storage_->Initialize()); |
- |
- fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter); |
- cache_.reset(new FileCache(metadata_storage_.get(), |
- temp_dir_.path(), |
- base::ThreadTaskRunnerHandle::Get().get(), |
- fake_free_disk_space_getter_.get())); |
- ASSERT_TRUE(cache_->Initialize()); |
- |
- resource_metadata_.reset(new ResourceMetadata( |
- metadata_storage_.get(), cache_.get(), |
- base::ThreadTaskRunnerHandle::Get())); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->Initialize()); |
- |
- SetUpEntries(resource_metadata_.get()); |
- } |
- |
- base::ScopedTempDir temp_dir_; |
- content::TestBrowserThreadBundle thread_bundle_; |
- scoped_ptr<ResourceMetadataStorage, test_util::DestroyHelperForTests> |
- metadata_storage_; |
- scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; |
- scoped_ptr<FileCache, test_util::DestroyHelperForTests> cache_; |
- scoped_ptr<ResourceMetadata, test_util::DestroyHelperForTests> |
- resource_metadata_; |
-}; |
- |
-TEST_F(ResourceMetadataTest, LargestChangestamp) { |
- const int64 kChangestamp = 123456; |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->SetLargestChangestamp(kChangestamp)); |
- int64 changestamp = 0; |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetLargestChangestamp(&changestamp)); |
- EXPECT_EQ(kChangestamp, changestamp); |
-} |
- |
-TEST_F(ResourceMetadataTest, GetResourceEntryByPath) { |
- // Confirm that an existing file is found. |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entry)); |
- EXPECT_EQ("file4", entry.base_name()); |
- |
- // Confirm that a non existing file is not found. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/non_existing"), &entry)); |
- |
- // Confirm that the root is found. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive"), &entry)); |
- |
- // Confirm that a non existing file is not found at the root level. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("non_existing"), &entry)); |
- |
- // Confirm that an entry is not found with a wrong root. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("non_existing/root"), &entry)); |
-} |
- |
-TEST_F(ResourceMetadataTest, ReadDirectoryByPath) { |
- // Confirm that an existing directory is found. |
- ResourceEntryVector entries; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1"), &entries)); |
- ASSERT_EQ(3U, entries.size()); |
- // The order is not guaranteed so we should sort the base names. |
- std::vector<std::string> base_names = GetSortedBaseNames(entries); |
- EXPECT_EQ("dir3", base_names[0]); |
- EXPECT_EQ("file4", base_names[1]); |
- EXPECT_EQ("file5", base_names[2]); |
- |
- // Confirm that a non existing directory is not found. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/non_existing"), &entries)); |
- |
- // Confirm that reading a file results in FILE_ERROR_NOT_A_DIRECTORY. |
- EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entries)); |
-} |
- |
-TEST_F(ResourceMetadataTest, RefreshEntry) { |
- base::FilePath drive_file_path; |
- ResourceEntry entry; |
- |
- // Get file9. |
- std::string file_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3/file9"), &file_id)); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryById(file_id, &entry)); |
- EXPECT_EQ("file9", entry.base_name()); |
- EXPECT_TRUE(!entry.file_info().is_directory()); |
- EXPECT_EQ("md5:file9", entry.file_specific_info().md5()); |
- |
- // Rename it. |
- ResourceEntry file_entry(entry); |
- file_entry.set_title("file100"); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->RefreshEntry(file_entry)); |
- |
- base::FilePath path; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetFilePath(file_id, &path)); |
- EXPECT_EQ("drive/root/dir1/dir3/file100", path.AsUTF8Unsafe()); |
- entry.Clear(); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryById(file_id, &entry)); |
- EXPECT_EQ("file100", entry.base_name()); |
- EXPECT_TRUE(!entry.file_info().is_directory()); |
- EXPECT_EQ("md5:file9", entry.file_specific_info().md5()); |
- |
- // Update the file md5. |
- const std::string updated_md5("md5:updated"); |
- file_entry = entry; |
- file_entry.mutable_file_specific_info()->set_md5(updated_md5); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->RefreshEntry(file_entry)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetFilePath(file_id, &path)); |
- EXPECT_EQ("drive/root/dir1/dir3/file100", path.AsUTF8Unsafe()); |
- entry.Clear(); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryById(file_id, &entry)); |
- EXPECT_EQ("file100", entry.base_name()); |
- EXPECT_TRUE(!entry.file_info().is_directory()); |
- EXPECT_EQ(updated_md5, entry.file_specific_info().md5()); |
- |
- // Make sure we get the same thing from GetResourceEntryByPath. |
- entry.Clear(); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3/file100"), &entry)); |
- EXPECT_EQ("file100", entry.base_name()); |
- ASSERT_TRUE(!entry.file_info().is_directory()); |
- EXPECT_EQ(updated_md5, entry.file_specific_info().md5()); |
- |
- // Get dir2. |
- entry.Clear(); |
- std::string dir_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir2"), &dir_id)); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryById(dir_id, &entry)); |
- EXPECT_EQ("dir2", entry.base_name()); |
- ASSERT_TRUE(entry.file_info().is_directory()); |
- |
- // Get dir3's ID. |
- std::string dir3_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3"), &dir3_id)); |
- |
- // Change the name to dir100 and change the parent to drive/dir1/dir3. |
- ResourceEntry dir_entry(entry); |
- dir_entry.set_title("dir100"); |
- dir_entry.set_parent_local_id(dir3_id); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->RefreshEntry(dir_entry)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetFilePath(dir_id, &path)); |
- EXPECT_EQ("drive/root/dir1/dir3/dir100", path.AsUTF8Unsafe()); |
- entry.Clear(); |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryById(dir_id, &entry)); |
- EXPECT_EQ("dir100", entry.base_name()); |
- EXPECT_TRUE(entry.file_info().is_directory()); |
- EXPECT_EQ("id:dir2", entry.resource_id()); |
- |
- // Make sure the children have moved over. Test file6. |
- entry.Clear(); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3/dir100/file6"), |
- &entry)); |
- EXPECT_EQ("file6", entry.base_name()); |
- |
- // Make sure dir2 no longer exists. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir2"), &entry)); |
- |
- // Make sure that directory cannot move under a file. |
- dir_entry.set_parent_local_id(file_id); |
- EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, |
- resource_metadata_->RefreshEntry(dir_entry)); |
- |
- // Cannot refresh root. |
- dir_entry.Clear(); |
- dir_entry.set_local_id(util::kDriveGrandRootLocalId); |
- dir_entry.set_title("new-root-name"); |
- dir_entry.set_parent_local_id(dir3_id); |
- EXPECT_EQ(FILE_ERROR_INVALID_OPERATION, |
- resource_metadata_->RefreshEntry(dir_entry)); |
-} |
- |
-TEST_F(ResourceMetadataTest, RefreshEntry_ResourceIDCheck) { |
- // Get an entry with a non-empty resource ID. |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1"), &entry)); |
- EXPECT_FALSE(entry.resource_id().empty()); |
- |
- // Add a new entry with an empty resource ID. |
- ResourceEntry new_entry; |
- new_entry.set_parent_local_id(entry.local_id()); |
- new_entry.set_title("new entry"); |
- std::string local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry(new_entry, &local_id)); |
- |
- // Try to refresh the new entry with a used resource ID. |
- new_entry.set_local_id(local_id); |
- new_entry.set_resource_id(entry.resource_id()); |
- EXPECT_EQ(FILE_ERROR_INVALID_OPERATION, |
- resource_metadata_->RefreshEntry(new_entry)); |
-} |
- |
-TEST_F(ResourceMetadataTest, RefreshEntry_DoNotOverwriteCacheState) { |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entry)); |
- |
- // Try to set MD5 with RefreshEntry. |
- entry.mutable_file_specific_info()->mutable_cache_state()->set_md5("md5"); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->RefreshEntry(entry)); |
- |
- // Cache state is unchanged. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().md5().empty()); |
- |
- // Pin the file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(entry.local_id())); |
- |
- // Try to clear the cache state with RefreshEntry. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entry)); |
- entry.mutable_file_specific_info()->clear_cache_state(); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->RefreshEntry(entry)); |
- |
- // Cache state is not cleared. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_pinned()); |
-} |
- |
-TEST_F(ResourceMetadataTest, GetSubDirectoriesRecursively) { |
- std::set<base::FilePath> sub_directories; |
- |
- // file9: not a directory, so no children. |
- std::string local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3/file9"), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetSubDirectoriesRecursively( |
- local_id, &sub_directories)); |
- EXPECT_TRUE(sub_directories.empty()); |
- |
- // dir2: no child directories. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir2"), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetSubDirectoriesRecursively( |
- local_id, &sub_directories)); |
- EXPECT_TRUE(sub_directories.empty()); |
- const std::string dir2_id = local_id; |
- |
- // dir1: dir3 is the only child |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1"), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetSubDirectoriesRecursively( |
- local_id, &sub_directories)); |
- EXPECT_EQ(1u, sub_directories.size()); |
- EXPECT_EQ(1u, sub_directories.count( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3"))); |
- sub_directories.clear(); |
- |
- // Add a few more directories to make sure deeper nesting works. |
- // dir2/dir100 |
- // dir2/dir101 |
- // dir2/dir101/dir102 |
- // dir2/dir101/dir103 |
- // dir2/dir101/dir104 |
- // dir2/dir101/dir104/dir105 |
- // dir2/dir101/dir104/dir105/dir106 |
- // dir2/dir101/dir104/dir105/dir106/dir107 |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir100", dir2_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir101", dir2_id), &local_id)); |
- const std::string dir101_id = local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir102", dir101_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir103", dir101_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir104", dir101_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir105", local_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir106", local_id), &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("dir107", local_id), &local_id)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetSubDirectoriesRecursively( |
- dir2_id, &sub_directories)); |
- EXPECT_EQ(8u, sub_directories.size()); |
- EXPECT_EQ(1u, sub_directories.count(base::FilePath::FromUTF8Unsafe( |
- "drive/root/dir2/dir101"))); |
- EXPECT_EQ(1u, sub_directories.count(base::FilePath::FromUTF8Unsafe( |
- "drive/root/dir2/dir101/dir104"))); |
- EXPECT_EQ(1u, sub_directories.count(base::FilePath::FromUTF8Unsafe( |
- "drive/root/dir2/dir101/dir104/dir105/dir106/dir107"))); |
-} |
- |
-TEST_F(ResourceMetadataTest, AddEntry) { |
- // Add a file to dir3. |
- std::string local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3"), &local_id)); |
- ResourceEntry file_entry = CreateFileEntry("file100", local_id); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry(file_entry, &local_id)); |
- base::FilePath path; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetFilePath(local_id, &path)); |
- EXPECT_EQ("drive/root/dir1/dir3/file100", path.AsUTF8Unsafe()); |
- |
- // Add a directory. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1"), &local_id)); |
- ResourceEntry dir_entry = CreateDirectoryEntry("dir101", local_id); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry(dir_entry, &local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetFilePath(local_id, &path)); |
- EXPECT_EQ("drive/root/dir1/dir101", path.AsUTF8Unsafe()); |
- |
- // Add to an invalid parent. |
- ResourceEntry file_entry3 = CreateFileEntry("file103", "id:invalid"); |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
- resource_metadata_->AddEntry(file_entry3, &local_id)); |
- |
- // Add an existing file. |
- EXPECT_EQ(FILE_ERROR_EXISTS, |
- resource_metadata_->AddEntry(file_entry, &local_id)); |
-} |
- |
-TEST_F(ResourceMetadataTest, RemoveEntry) { |
- // Make sure file9 is found. |
- std::string file9_local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3/file9"), |
- &file9_local_id)); |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- file9_local_id, &entry)); |
- EXPECT_EQ("file9", entry.base_name()); |
- |
- // Remove file9. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->RemoveEntry(file9_local_id)); |
- |
- // file9 should no longer exist. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryById( |
- file9_local_id, &entry)); |
- |
- // Look for dir3. |
- std::string dir3_local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/dir3"), &dir3_local_id)); |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- dir3_local_id, &entry)); |
- EXPECT_EQ("dir3", entry.base_name()); |
- |
- // Remove dir3. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->RemoveEntry(dir3_local_id)); |
- |
- // dir3 should no longer exist. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryById( |
- dir3_local_id, &entry)); |
- |
- // Remove unknown local_id using RemoveEntry. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->RemoveEntry("foo")); |
- |
- // Try removing root. This should fail. |
- EXPECT_EQ(FILE_ERROR_ACCESS_DENIED, resource_metadata_->RemoveEntry( |
- util::kDriveGrandRootLocalId)); |
-} |
- |
-TEST_F(ResourceMetadataTest, GetResourceEntryById_RootDirectory) { |
- // Look up the root directory by its ID. |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- util::kDriveGrandRootLocalId, &entry)); |
- EXPECT_EQ("drive", entry.base_name()); |
-} |
- |
-TEST_F(ResourceMetadataTest, GetResourceEntryById) { |
- // Get file4 by path. |
- std::string local_id; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/dir1/file4"), &local_id)); |
- |
- // Confirm that an existing file is found. |
- ResourceEntry entry; |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- local_id, &entry)); |
- EXPECT_EQ("file4", entry.base_name()); |
- |
- // Confirm that a non existing file is not found. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, resource_metadata_->GetResourceEntryById( |
- "non_existing", &entry)); |
-} |
- |
-TEST_F(ResourceMetadataTest, Iterate) { |
- scoped_ptr<ResourceMetadata::Iterator> it = resource_metadata_->GetIterator(); |
- ASSERT_TRUE(it); |
- |
- int file_count = 0, directory_count = 0; |
- for (; !it->IsAtEnd(); it->Advance()) { |
- if (!it->GetValue().file_info().is_directory()) |
- ++file_count; |
- else |
- ++directory_count; |
- } |
- |
- EXPECT_EQ(7, file_count); |
- EXPECT_EQ(7, directory_count); |
-} |
- |
-TEST_F(ResourceMetadataTest, DuplicatedNames) { |
- std::string root_local_id; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root"), &root_local_id)); |
- |
- ResourceEntry entry; |
- |
- // When multiple entries with the same title are added in a single directory, |
- // their base_names are de-duped. |
- // - drive/root/foo |
- // - drive/root/foo (1) |
- std::string dir_id_0; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntryWithResourceId( |
- "foo", "foo0", root_local_id), &dir_id_0)); |
- std::string dir_id_1; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntryWithResourceId( |
- "foo", "foo1", root_local_id), &dir_id_1)); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- dir_id_0, &entry)); |
- EXPECT_EQ("foo", entry.base_name()); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- dir_id_1, &entry)); |
- EXPECT_EQ("foo (1)", entry.base_name()); |
- |
- // - drive/root/foo/bar.txt |
- // - drive/root/foo/bar (1).txt |
- // - drive/root/foo/bar (2).txt |
- // ... |
- // - drive/root/foo/bar (99).txt |
- std::vector<std::string> file_ids(100); |
- for (size_t i = 0; i < file_ids.size(); ++i) { |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateFileEntryWithResourceId( |
- "bar.txt", base::StringPrintf("bar%d", static_cast<int>(i)), |
- dir_id_0), &file_ids[i])); |
- } |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- file_ids[0], &entry)); |
- EXPECT_EQ("bar.txt", entry.base_name()); |
- for (size_t i = 1; i < file_ids.size(); ++i) { |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- file_ids[i], &entry)) << i; |
- EXPECT_EQ(base::StringPrintf("bar (%d).txt", static_cast<int>(i)), |
- entry.base_name()); |
- } |
- |
- // Same name but different parent. No renaming. |
- // - drive/root/foo (1)/bar.txt |
- std::string file_id_3; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateFileEntryWithResourceId( |
- "bar.txt", "bar_different_parent", dir_id_1), &file_id_3)); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- file_id_3, &entry)); |
- EXPECT_EQ("bar.txt", entry.base_name()); |
- |
- // Checks that the entries can be looked up by the de-duped paths. |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/foo/bar (2).txt"), &entry)); |
- EXPECT_EQ("bar2", entry.resource_id()); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root/foo (1)/bar.txt"), &entry)); |
- EXPECT_EQ("bar_different_parent", entry.resource_id()); |
-} |
- |
-TEST_F(ResourceMetadataTest, EncodedNames) { |
- std::string root_local_id; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetIdByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root"), &root_local_id)); |
- |
- ResourceEntry entry; |
- |
- std::string dir_id; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateDirectoryEntry("\\(^o^)/", root_local_id), &dir_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- dir_id, &entry)); |
- EXPECT_EQ("\\(^o^)_", entry.base_name()); |
- |
- std::string file_id; |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->AddEntry( |
- CreateFileEntryWithResourceId("Slash /.txt", "myfile", dir_id), |
- &file_id)); |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryById( |
- file_id, &entry)); |
- EXPECT_EQ("Slash _.txt", entry.base_name()); |
- |
- ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe( |
- "drive/root/\\(^o^)_/Slash _.txt"), |
- &entry)); |
- EXPECT_EQ("myfile", entry.resource_id()); |
-} |
- |
-TEST_F(ResourceMetadataTest, Reset) { |
- // The grand root has "root" which is not empty. |
- std::vector<ResourceEntry> entries; |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/root"), &entries)); |
- ASSERT_FALSE(entries.empty()); |
- |
- // Reset. |
- EXPECT_EQ(FILE_ERROR_OK, resource_metadata_->Reset()); |
- |
- // change stamp should be reset. |
- int64 changestamp = 0; |
- EXPECT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetLargestChangestamp(&changestamp)); |
- EXPECT_EQ(0, changestamp); |
- |
- // root should continue to exist. |
- ResourceEntry entry; |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata_->GetResourceEntryByPath( |
- base::FilePath::FromUTF8Unsafe("drive"), &entry)); |
- EXPECT_EQ("drive", entry.base_name()); |
- ASSERT_TRUE(entry.file_info().is_directory()); |
- EXPECT_EQ(util::kDriveGrandRootLocalId, entry.local_id()); |
- |
- // There are "other", "trash" and "root" under "drive". |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive"), &entries)); |
- EXPECT_EQ(3U, entries.size()); |
- |
- // The "other" directory should be empty. |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/other"), &entries)); |
- EXPECT_TRUE(entries.empty()); |
- |
- // The "trash" directory should be empty. |
- ASSERT_EQ(FILE_ERROR_OK, |
- resource_metadata_->ReadDirectoryByPath( |
- base::FilePath::FromUTF8Unsafe("drive/trash"), &entries)); |
- EXPECT_TRUE(entries.empty()); |
-} |
- |
-} // namespace internal |
-} // namespace drive |