Index: chrome/browser/chromeos/drive/file_cache_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/file_cache_unittest.cc b/chrome/browser/chromeos/drive/file_cache_unittest.cc |
deleted file mode 100644 |
index dbba97312e628dbf0c6f1dc5a243169fed80d6f8..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/file_cache_unittest.cc |
+++ /dev/null |
@@ -1,562 +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/file_cache.h" |
- |
-#include <string> |
-#include <vector> |
- |
-#include "base/callback_helpers.h" |
-#include "base/files/file_enumerator.h" |
-#include "base/files/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/md5.h" |
-#include "base/path_service.h" |
-#include "base/single_thread_task_runner.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_system_core_util.h" |
-#include "chrome/browser/chromeos/drive/resource_metadata_storage.h" |
-#include "components/drive/drive.pb.h" |
-#include "components/drive/drive_test_util.h" |
-#include "content/public/test/test_browser_thread_bundle.h" |
-#include "google_apis/drive/test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace drive { |
-namespace internal { |
-namespace { |
- |
-const char kCacheFileDirectory[] = "files"; |
- |
-} // namespace |
- |
-// Tests FileCache methods working with the blocking task runner. |
-class FileCacheTest : public testing::Test { |
- protected: |
- void SetUp() override { |
- ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- const base::FilePath metadata_dir = temp_dir_.path().AppendASCII("meta"); |
- cache_files_dir_ = temp_dir_.path().AppendASCII(kCacheFileDirectory); |
- |
- ASSERT_TRUE(base::CreateDirectory(metadata_dir)); |
- ASSERT_TRUE(base::CreateDirectory(cache_files_dir_)); |
- |
- fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter); |
- |
- metadata_storage_.reset(new ResourceMetadataStorage( |
- metadata_dir, |
- base::ThreadTaskRunnerHandle::Get().get())); |
- ASSERT_TRUE(metadata_storage_->Initialize()); |
- |
- cache_.reset(new FileCache( |
- metadata_storage_.get(), |
- cache_files_dir_, |
- base::ThreadTaskRunnerHandle::Get().get(), |
- fake_free_disk_space_getter_.get())); |
- ASSERT_TRUE(cache_->Initialize()); |
- } |
- |
- static bool RenameCacheFilesToNewFormat(FileCache* cache) { |
- return cache->RenameCacheFilesToNewFormat(); |
- } |
- |
- content::TestBrowserThreadBundle thread_bundle_; |
- base::ScopedTempDir temp_dir_; |
- base::FilePath cache_files_dir_; |
- |
- scoped_ptr<ResourceMetadataStorage, test_util::DestroyHelperForTests> |
- metadata_storage_; |
- scoped_ptr<FileCache, test_util::DestroyHelperForTests> cache_; |
- scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_; |
-}; |
- |
-TEST_F(FileCacheTest, RecoverFilesFromCacheDirectory) { |
- base::FilePath dir_source_root; |
- EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &dir_source_root)); |
- const base::FilePath src_path = |
- dir_source_root.AppendASCII("chrome/test/data/chromeos/drive/image.png"); |
- |
- // Store files. This file should not be moved. |
- ResourceEntry entry; |
- entry.set_local_id("id_foo"); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store("id_foo", "md5", src_path, |
- FileCache::FILE_OPERATION_COPY)); |
- |
- // Set up files in the cache directory. These files should be moved. |
- const base::FilePath file_directory = |
- temp_dir_.path().AppendASCII(kCacheFileDirectory); |
- ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_bar"))); |
- ASSERT_TRUE(base::CopyFile(src_path, file_directory.AppendASCII("id_baz"))); |
- |
- // Insert a dirty entry with "id_baz" to |recovered_cache_info|. |
- // This should not prevent the file from being recovered. |
- ResourceMetadataStorage::RecoveredCacheInfoMap recovered_cache_info; |
- recovered_cache_info["id_baz"].is_dirty = true; |
- recovered_cache_info["id_baz"].title = "baz.png"; |
- |
- // Recover files. |
- const base::FilePath dest_directory = temp_dir_.path().AppendASCII("dest"); |
- EXPECT_TRUE(cache_->RecoverFilesFromCacheDirectory(dest_directory, |
- recovered_cache_info)); |
- |
- // Only two files should be recovered. |
- EXPECT_TRUE(base::PathExists(dest_directory)); |
- // base::FileEnumerator does not guarantee the order. |
- if (base::PathExists(dest_directory.AppendASCII("baz00000001.png"))) { |
- EXPECT_TRUE(base::ContentsEqual( |
- src_path, |
- dest_directory.AppendASCII("baz00000001.png"))); |
- EXPECT_TRUE(base::ContentsEqual( |
- src_path, |
- dest_directory.AppendASCII("image00000002.png"))); |
- } else { |
- EXPECT_TRUE(base::ContentsEqual( |
- src_path, |
- dest_directory.AppendASCII("image00000001.png"))); |
- EXPECT_TRUE(base::ContentsEqual( |
- src_path, |
- dest_directory.AppendASCII("baz00000002.png"))); |
- } |
- EXPECT_FALSE(base::PathExists( |
- dest_directory.AppendASCII("image00000003.png"))); |
-} |
- |
-TEST_F(FileCacheTest, FreeDiskSpaceIfNeededFor) { |
- base::FilePath src_file; |
- ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); |
- |
- // Store a file as a 'temporary' file and remember the path. |
- const std::string id_tmp = "id_tmp", md5_tmp = "md5_tmp"; |
- |
- ResourceEntry entry; |
- entry.set_local_id(id_tmp); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- ASSERT_EQ(FILE_ERROR_OK, |
- cache_->Store(id_tmp, md5_tmp, src_file, |
- FileCache::FILE_OPERATION_COPY)); |
- base::FilePath tmp_path; |
- ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(id_tmp, &tmp_path)); |
- |
- // Store a file as a pinned file and remember the path. |
- const std::string id_pinned = "id_pinned", md5_pinned = "md5_pinned"; |
- entry.Clear(); |
- entry.set_local_id(id_pinned); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- ASSERT_EQ(FILE_ERROR_OK, |
- cache_->Store(id_pinned, md5_pinned, src_file, |
- FileCache::FILE_OPERATION_COPY)); |
- ASSERT_EQ(FILE_ERROR_OK, cache_->Pin(id_pinned)); |
- base::FilePath pinned_path; |
- ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(id_pinned, &pinned_path)); |
- |
- // Call FreeDiskSpaceIfNeededFor(). |
- fake_free_disk_space_getter_->set_default_value(test_util::kLotsOfSpace); |
- fake_free_disk_space_getter_->PushFakeValue(0); |
- const int64 kNeededBytes = 1; |
- EXPECT_TRUE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); |
- |
- // Only 'temporary' file gets removed. |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_tmp, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().cache_state().is_present()); |
- EXPECT_FALSE(base::PathExists(tmp_path)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_pinned, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_present()); |
- EXPECT_TRUE(base::PathExists(pinned_path)); |
- |
- // Returns false when disk space cannot be freed. |
- fake_free_disk_space_getter_->set_default_value(0); |
- EXPECT_FALSE(cache_->FreeDiskSpaceIfNeededFor(kNeededBytes)); |
-} |
- |
-TEST_F(FileCacheTest, GetFile) { |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string src_contents = "test"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- src_contents)); |
- std::string id("id1"); |
- std::string md5(base::MD5String(src_contents)); |
- |
- const base::FilePath cache_file_directory = |
- temp_dir_.path().AppendASCII(kCacheFileDirectory); |
- |
- // Try to get an existing file from cache. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, md5, src_file_path, |
- FileCache::FILE_OPERATION_COPY)); |
- base::FilePath cache_file_path; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
- EXPECT_EQ( |
- cache_file_directory.AppendASCII(util::EscapeCacheFileName(id)).value(), |
- cache_file_path.value()); |
- |
- std::string contents; |
- EXPECT_TRUE(base::ReadFileToString(cache_file_path, &contents)); |
- EXPECT_EQ(src_contents, contents); |
- |
- // Get file from cache with different id. |
- id = "id2"; |
- entry.Clear(); |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, cache_->GetFile(id, &cache_file_path)); |
- |
- // Pin a non-existent file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(id)); |
- |
- // Get the non-existent pinned file from cache. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, cache_->GetFile(id, &cache_file_path)); |
- |
- // Get a previously pinned and stored file from cache. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, md5, src_file_path, |
- FileCache::FILE_OPERATION_COPY)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
- EXPECT_EQ( |
- cache_file_directory.AppendASCII(util::EscapeCacheFileName(id)).value(), |
- cache_file_path.value()); |
- |
- contents.clear(); |
- EXPECT_TRUE(base::ReadFileToString(cache_file_path, &contents)); |
- EXPECT_EQ(src_contents, contents); |
-} |
- |
-TEST_F(FileCacheTest, Store) { |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string src_contents = "test"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- src_contents)); |
- std::string id("id"); |
- std::string md5(base::MD5String(src_contents)); |
- |
- // Store a file. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
- id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_present()); |
- EXPECT_EQ(md5, entry.file_specific_info().cache_state().md5()); |
- |
- base::FilePath cache_file_path; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
- EXPECT_TRUE(base::ContentsEqual(src_file_path, cache_file_path)); |
- |
- // Store a non-existent file. |
- EXPECT_EQ(FILE_ERROR_FAILED, cache_->Store( |
- id, md5, base::FilePath::FromUTF8Unsafe("non_existent_file"), |
- FileCache::FILE_OPERATION_COPY)); |
- |
- // Passing empty MD5 marks the entry as dirty. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
- id, std::string(), src_file_path, FileCache::FILE_OPERATION_COPY)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_present()); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().md5().empty()); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_dirty()); |
- |
- // No free space available. |
- fake_free_disk_space_getter_->set_default_value(0); |
- |
- EXPECT_EQ(FILE_ERROR_NO_LOCAL_SPACE, cache_->Store( |
- id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
-} |
- |
-TEST_F(FileCacheTest, PinAndUnpin) { |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string src_contents = "test"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- src_contents)); |
- std::string id("id_present"); |
- std::string md5(base::MD5String(src_contents)); |
- |
- // Store a file. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
- id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().cache_state().is_pinned()); |
- |
- // Pin the existing file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(id)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_pinned()); |
- |
- // Unpin the file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Unpin(id)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().cache_state().is_pinned()); |
- |
- // Pin a non-present file. |
- std::string id_non_present = "id_non_present"; |
- entry.Clear(); |
- entry.set_local_id(id_non_present); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(id_non_present)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_non_present, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_pinned()); |
- |
- // Unpin the previously pinned non-existent file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Unpin(id_non_present)); |
- |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id_non_present, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().has_cache_state()); |
- |
- // Unpin a file that doesn't exist in cache and is not pinned. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, cache_->Unpin("id_non_existent")); |
-} |
- |
-TEST_F(FileCacheTest, MountUnmount) { |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string src_contents = "test"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- src_contents)); |
- std::string id("id_present"); |
- std::string md5(base::MD5String(src_contents)); |
- |
- // Store a file. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
- id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
- |
- // Mark the file mounted. |
- base::FilePath cache_file_path; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->MarkAsMounted(id, &cache_file_path)); |
- |
- // Try to remove it. |
- EXPECT_EQ(FILE_ERROR_IN_USE, cache_->Remove(id)); |
- |
- // Clear mounted state of the file. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->MarkAsUnmounted(cache_file_path)); |
- |
- // Try to remove again. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); |
-} |
- |
-TEST_F(FileCacheTest, OpenForWrite) { |
- // Prepare a file. |
- base::FilePath src_file; |
- ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); |
- |
- const std::string id = "id"; |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, |
- FileCache::FILE_OPERATION_COPY)); |
- EXPECT_EQ(0, entry.file_info().last_modified()); |
- |
- // Entry is not dirty nor opened. |
- EXPECT_FALSE(cache_->IsOpenedForWrite(id)); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().cache_state().is_dirty()); |
- |
- // Open (1). |
- scoped_ptr<base::ScopedClosureRunner> file_closer1; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->OpenForWrite(id, &file_closer1)); |
- EXPECT_TRUE(cache_->IsOpenedForWrite(id)); |
- |
- // Entry is dirty. |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_dirty()); |
- |
- // Open (2). |
- scoped_ptr<base::ScopedClosureRunner> file_closer2; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->OpenForWrite(id, &file_closer2)); |
- EXPECT_TRUE(cache_->IsOpenedForWrite(id)); |
- |
- // Close (1). |
- file_closer1.reset(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(cache_->IsOpenedForWrite(id)); |
- |
- // last_modified is updated. |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_NE(0, entry.file_info().last_modified()); |
- |
- // Close (2). |
- file_closer2.reset(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_FALSE(cache_->IsOpenedForWrite(id)); |
- |
- // Try to open non-existent file. |
- EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
- cache_->OpenForWrite("nonexistent_id", &file_closer1)); |
-} |
- |
-TEST_F(FileCacheTest, UpdateMd5) { |
- // Store test data. |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string contents_before = "before"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- contents_before)); |
- std::string id("id1"); |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store(id, base::MD5String(contents_before), |
- src_file_path, |
- FileCache::FILE_OPERATION_COPY)); |
- |
- // Modify the cache file. |
- scoped_ptr<base::ScopedClosureRunner> file_closer; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->OpenForWrite(id, &file_closer)); |
- base::FilePath cache_file_path; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
- const std::string contents_after = "after"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(cache_file_path, |
- contents_after)); |
- |
- // Cannot update MD5 of an opend file. |
- EXPECT_EQ(FILE_ERROR_IN_USE, cache_->UpdateMd5(id)); |
- |
- // Close file. |
- file_closer.reset(); |
- base::RunLoop().RunUntilIdle(); |
- |
- // MD5 was cleared by OpenForWrite(). |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().md5().empty()); |
- |
- // Update MD5. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->UpdateMd5(id)); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_EQ(base::MD5String(contents_after), |
- entry.file_specific_info().cache_state().md5()); |
-} |
- |
-TEST_F(FileCacheTest, ClearDirty) { |
- // Prepare a file. |
- base::FilePath src_file; |
- ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); |
- |
- const std::string id = "id"; |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- ASSERT_EQ(FILE_ERROR_OK, cache_->Store(id, "md5", src_file, |
- FileCache::FILE_OPERATION_COPY)); |
- |
- // Open the file. |
- scoped_ptr<base::ScopedClosureRunner> file_closer; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->OpenForWrite(id, &file_closer)); |
- |
- // Entry is dirty. |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_TRUE(entry.file_specific_info().cache_state().is_dirty()); |
- |
- // Cannot clear the dirty bit of an opened entry. |
- EXPECT_EQ(FILE_ERROR_IN_USE, cache_->ClearDirty(id)); |
- |
- // Close the file and clear the dirty bit. |
- file_closer.reset(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->ClearDirty(id)); |
- |
- // Entry is not dirty. |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->GetEntry(id, &entry)); |
- EXPECT_FALSE(entry.file_specific_info().cache_state().is_dirty()); |
-} |
- |
-TEST_F(FileCacheTest, Remove) { |
- const base::FilePath src_file_path = temp_dir_.path().Append("test.dat"); |
- const std::string src_contents = "test"; |
- EXPECT_TRUE(google_apis::test_util::WriteStringToFile(src_file_path, |
- src_contents)); |
- std::string id("id"); |
- std::string md5(base::MD5String(src_contents)); |
- |
- // First store a file to cache. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- base::FilePath src_file; |
- ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Store( |
- id, md5, src_file_path, FileCache::FILE_OPERATION_COPY)); |
- |
- base::FilePath cache_file_path; |
- EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(id, &cache_file_path)); |
- |
- // Then try to remove existing file from cache. |
- EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(id)); |
- EXPECT_FALSE(base::PathExists(cache_file_path)); |
-} |
- |
-TEST_F(FileCacheTest, RenameCacheFilesToNewFormat) { |
- const base::FilePath file_directory = |
- temp_dir_.path().AppendASCII(kCacheFileDirectory); |
- |
- // File with an old style "<prefix>:<ID>.<MD5>" name. |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
- file_directory.AppendASCII("file:id_koo.md5"), "koo")); |
- |
- // File with multiple extensions should be removed. |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
- file_directory.AppendASCII("id_kyu.md5.mounted"), "kyu (mounted)")); |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile( |
- file_directory.AppendASCII("id_kyu.md5"), "kyu")); |
- |
- // Rename and verify the result. |
- EXPECT_TRUE(RenameCacheFilesToNewFormat(cache_.get())); |
- std::string contents; |
- EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_koo"), |
- &contents)); |
- EXPECT_EQ("koo", contents); |
- contents.clear(); |
- EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_kyu"), |
- &contents)); |
- EXPECT_EQ("kyu", contents); |
- |
- // Rename again. |
- EXPECT_TRUE(RenameCacheFilesToNewFormat(cache_.get())); |
- |
- // Files with new style names are not affected. |
- contents.clear(); |
- EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_koo"), |
- &contents)); |
- EXPECT_EQ("koo", contents); |
- contents.clear(); |
- EXPECT_TRUE(base::ReadFileToString(file_directory.AppendASCII("id_kyu"), |
- &contents)); |
- EXPECT_EQ("kyu", contents); |
-} |
- |
-TEST_F(FileCacheTest, ClearAll) { |
- const std::string id("1a2b"); |
- const std::string md5("abcdef0123456789"); |
- |
- // Store an existing file. |
- ResourceEntry entry; |
- entry.set_local_id(id); |
- EXPECT_EQ(FILE_ERROR_OK, metadata_storage_->PutEntry(entry)); |
- base::FilePath src_file; |
- ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &src_file)); |
- ASSERT_EQ(FILE_ERROR_OK, |
- cache_->Store(id, md5, src_file, FileCache::FILE_OPERATION_COPY)); |
- |
- // Clear cache. |
- EXPECT_TRUE(cache_->ClearAll()); |
- |
- // Verify that the cache is removed. |
- EXPECT_TRUE(base::IsDirectoryEmpty(cache_files_dir_)); |
-} |
- |
-} // namespace internal |
-} // namespace drive |