| 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
|
| deleted file mode 100644
|
| index 33a3cdc0187f2cbe3efb08f149cb22e8c7e05d86..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/chromeos/drive/file_system_unittest.cc
|
| +++ /dev/null
|
| @@ -1,1064 +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_system.h"
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/files/scoped_temp_dir.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/prefs/testing_pref_service.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "chrome/browser/chromeos/drive/file_system_observer.h"
|
| -#include "chrome/browser/chromeos/drive/sync_client.h"
|
| -#include "components/drive/change_list_loader.h"
|
| -#include "components/drive/drive.pb.h"
|
| -#include "components/drive/drive_api_util.h"
|
| -#include "components/drive/drive_test_util.h"
|
| -#include "components/drive/event_logger.h"
|
| -#include "components/drive/fake_free_disk_space_getter.h"
|
| -#include "components/drive/file_change.h"
|
| -#include "components/drive/file_system_core_util.h"
|
| -#include "components/drive/job_scheduler.h"
|
| -#include "components/drive/service/fake_drive_service.h"
|
| -#include "components/drive/service/test_util.h"
|
| -#include "content/public/browser/browser_thread.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "google_apis/drive/drive_api_parser.h"
|
| -#include "google_apis/drive/test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace drive {
|
| -namespace {
|
| -
|
| -// Counts the number of invocation, and if it increased up to |expected_counter|
|
| -// quits the current message loop by calling |quit|.
|
| -void AsyncInitializationCallback(
|
| - int* counter, int expected_counter, const base::Closure& quit,
|
| - FileError error, scoped_ptr<ResourceEntry> entry) {
|
| - if (error != FILE_ERROR_OK || !entry) {
|
| - // If we hit an error case, quit the message loop immediately.
|
| - // Then the expectation in the test case can find it because the actual
|
| - // value of |counter| is different from the expected one.
|
| - quit.Run();
|
| - return;
|
| - }
|
| -
|
| - (*counter)++;
|
| - if (*counter >= expected_counter)
|
| - quit.Run();
|
| -}
|
| -
|
| -bool CompareHashAndFilePath(const HashAndFilePath& a,
|
| - const HashAndFilePath& b) {
|
| - const int result = a.hash.compare(b.hash);
|
| - if (result < 0)
|
| - return true;
|
| - if (result > 0)
|
| - return false;
|
| - return a.path.AsUTF8Unsafe().compare(b.path.AsUTF8Unsafe()) < 0;
|
| -}
|
| -
|
| -// This class is used to record directory changes and examine them later.
|
| -class MockDirectoryChangeObserver : public FileSystemObserver {
|
| - public:
|
| - MockDirectoryChangeObserver() {}
|
| - ~MockDirectoryChangeObserver() override {}
|
| -
|
| - // FileSystemObserver overrides.
|
| - void OnDirectoryChanged(const base::FilePath& directory_path) override {
|
| - changed_directories_.push_back(directory_path);
|
| - }
|
| -
|
| - void OnFileChanged(const FileChange& new_file_change) override {
|
| - changed_files_.Apply(new_file_change);
|
| - }
|
| -
|
| - const std::vector<base::FilePath>& changed_directories() const {
|
| - return changed_directories_;
|
| - }
|
| -
|
| - const FileChange& changed_files() const { return changed_files_; }
|
| -
|
| - private:
|
| - std::vector<base::FilePath> changed_directories_;
|
| - FileChange changed_files_;
|
| - DISALLOW_COPY_AND_ASSIGN(MockDirectoryChangeObserver);
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -class FileSystemTest : public testing::Test {
|
| - protected:
|
| - void SetUp() override {
|
| - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| - pref_service_.reset(new TestingPrefServiceSimple);
|
| - test_util::RegisterDrivePrefs(pref_service_->registry());
|
| -
|
| - logger_.reset(new EventLogger);
|
| - fake_drive_service_.reset(new FakeDriveService);
|
| - test_util::SetUpTestEntries(fake_drive_service_.get());
|
| -
|
| - fake_free_disk_space_getter_.reset(new FakeFreeDiskSpaceGetter);
|
| -
|
| - scheduler_.reset(new JobScheduler(
|
| - pref_service_.get(),
|
| - logger_.get(),
|
| - fake_drive_service_.get(),
|
| - base::ThreadTaskRunnerHandle::Get().get()));
|
| -
|
| - mock_directory_observer_.reset(new MockDirectoryChangeObserver);
|
| -
|
| - SetUpResourceMetadataAndFileSystem();
|
| - }
|
| -
|
| - void SetUpResourceMetadataAndFileSystem() {
|
| - const base::FilePath metadata_dir = temp_dir_.path().AppendASCII("meta");
|
| - ASSERT_TRUE(base::CreateDirectory(metadata_dir));
|
| - metadata_storage_.reset(new internal::ResourceMetadataStorage(
|
| - metadata_dir, base::ThreadTaskRunnerHandle::Get().get()));
|
| - ASSERT_TRUE(metadata_storage_->Initialize());
|
| -
|
| - const base::FilePath cache_dir = temp_dir_.path().AppendASCII("files");
|
| - ASSERT_TRUE(base::CreateDirectory(cache_dir));
|
| - cache_.reset(new internal::FileCache(
|
| - metadata_storage_.get(),
|
| - cache_dir,
|
| - base::ThreadTaskRunnerHandle::Get().get(),
|
| - fake_free_disk_space_getter_.get()));
|
| - ASSERT_TRUE(cache_->Initialize());
|
| -
|
| - resource_metadata_.reset(new internal::ResourceMetadata(
|
| - metadata_storage_.get(), cache_.get(),
|
| - base::ThreadTaskRunnerHandle::Get()));
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata_->Initialize());
|
| -
|
| - const base::FilePath temp_file_dir = temp_dir_.path().AppendASCII("tmp");
|
| - ASSERT_TRUE(base::CreateDirectory(temp_file_dir));
|
| - file_task_runner_ = content::BrowserThread::GetMessageLoopProxyForThread(
|
| - content::BrowserThread::FILE);
|
| - file_system_.reset(new FileSystem(
|
| - pref_service_.get(), logger_.get(), cache_.get(), scheduler_.get(),
|
| - resource_metadata_.get(), base::ThreadTaskRunnerHandle::Get().get(),
|
| - file_task_runner_.get(), temp_file_dir));
|
| - file_system_->AddObserver(mock_directory_observer_.get());
|
| -
|
| - // Disable delaying so that the sync starts immediately.
|
| - file_system_->sync_client_for_testing()->set_delay_for_testing(
|
| - base::TimeDelta::FromSeconds(0));
|
| - }
|
| -
|
| - // Loads the full resource list via FakeDriveService.
|
| - bool LoadFullResourceList() {
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->change_list_loader_for_testing()->LoadIfNeeded(
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - return error == FILE_ERROR_OK;
|
| - }
|
| -
|
| - // Gets resource entry by path synchronously.
|
| - scoped_ptr<ResourceEntry> GetResourceEntrySync(
|
| - const base::FilePath& file_path) {
|
| - FileError error = FILE_ERROR_FAILED;
|
| - scoped_ptr<ResourceEntry> entry;
|
| - file_system_->GetResourceEntry(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| -
|
| - return entry.Pass();
|
| - }
|
| -
|
| - // Gets directory info by path synchronously.
|
| - scoped_ptr<ResourceEntryVector> ReadDirectorySync(
|
| - const base::FilePath& file_path) {
|
| - FileError error = FILE_ERROR_FAILED;
|
| - scoped_ptr<ResourceEntryVector> entries(new ResourceEntryVector);
|
| - file_system_->ReadDirectory(
|
| - file_path,
|
| - base::Bind(&AccumulateReadDirectoryResult, entries.get()),
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - if (error != FILE_ERROR_OK)
|
| - entries.reset();
|
| - return entries.Pass();
|
| - }
|
| -
|
| - // Used to implement ReadDirectorySync().
|
| - static void AccumulateReadDirectoryResult(
|
| - ResourceEntryVector* out_entries,
|
| - scoped_ptr<ResourceEntryVector> entries) {
|
| - ASSERT_TRUE(entries);
|
| - out_entries->insert(out_entries->end(), entries->begin(), entries->end());
|
| - }
|
| -
|
| - // Returns true if an entry exists at |file_path|.
|
| - bool EntryExists(const base::FilePath& file_path) {
|
| - return GetResourceEntrySync(file_path);
|
| - }
|
| -
|
| - // Flag for specifying the timestamp of the test filesystem cache.
|
| - enum SetUpTestFileSystemParam {
|
| - USE_OLD_TIMESTAMP,
|
| - USE_SERVER_TIMESTAMP,
|
| - };
|
| -
|
| - // Sets up a filesystem with directories: drive/root, drive/root/Dir1,
|
| - // drive/root/Dir1/SubDir2 and files drive/root/File1, drive/root/Dir1/File2,
|
| - // drive/root/Dir1/SubDir2/File3. If |use_up_to_date_timestamp| is true, sets
|
| - // the changestamp to that of FakeDriveService, indicating the cache is
|
| - // holding the latest file system info.
|
| - void SetUpTestFileSystem(SetUpTestFileSystemParam param) {
|
| - // Destroy the existing resource metadata to close DB.
|
| - resource_metadata_.reset();
|
| -
|
| - const base::FilePath metadata_dir = temp_dir_.path().AppendASCII("meta");
|
| - ASSERT_TRUE(base::CreateDirectory(metadata_dir));
|
| - scoped_ptr<internal::ResourceMetadataStorage,
|
| - test_util::DestroyHelperForTests> metadata_storage(
|
| - new internal::ResourceMetadataStorage(
|
| - metadata_dir, base::ThreadTaskRunnerHandle::Get().get()));
|
| -
|
| - const base::FilePath cache_dir = temp_dir_.path().AppendASCII("files");
|
| - scoped_ptr<internal::FileCache, test_util::DestroyHelperForTests> cache(
|
| - new internal::FileCache(metadata_storage.get(),
|
| - cache_dir,
|
| - base::ThreadTaskRunnerHandle::Get().get(),
|
| - fake_free_disk_space_getter_.get()));
|
| -
|
| - scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests>
|
| - resource_metadata(new internal::ResourceMetadata(
|
| - metadata_storage_.get(), cache.get(),
|
| - base::ThreadTaskRunnerHandle::Get()));
|
| -
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->Initialize());
|
| -
|
| - const int64 changestamp = param == USE_SERVER_TIMESTAMP ?
|
| - fake_drive_service_->about_resource().largest_change_id() : 1;
|
| - ASSERT_EQ(FILE_ERROR_OK,
|
| - resource_metadata->SetLargestChangestamp(changestamp));
|
| -
|
| - // drive/root
|
| - ResourceEntry root;
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->GetResourceEntryByPath(
|
| - util::GetDriveMyDriveRootPath(), &root));
|
| - root.set_resource_id(fake_drive_service_->GetRootResourceId());
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->RefreshEntry(root));
|
| -
|
| - std::string local_id;
|
| -
|
| - // drive/root/File1
|
| - ResourceEntry file1;
|
| - file1.set_title("File1");
|
| - file1.set_resource_id("resource_id:File1");
|
| - file1.set_parent_local_id(root.local_id());
|
| - file1.mutable_file_specific_info()->set_md5("md5#1");
|
| - file1.mutable_file_info()->set_is_directory(false);
|
| - file1.mutable_file_info()->set_size(1048576);
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(file1, &local_id));
|
| -
|
| - // drive/root/Dir1
|
| - ResourceEntry dir1;
|
| - dir1.set_title("Dir1");
|
| - dir1.set_resource_id("resource_id:Dir1");
|
| - dir1.set_parent_local_id(root.local_id());
|
| - dir1.mutable_file_info()->set_is_directory(true);
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(dir1, &local_id));
|
| - const std::string dir1_local_id = local_id;
|
| -
|
| - // drive/root/Dir1/File2
|
| - ResourceEntry file2;
|
| - file2.set_title("File2");
|
| - file2.set_resource_id("resource_id:File2");
|
| - file2.set_parent_local_id(dir1_local_id);
|
| - file2.mutable_file_specific_info()->set_md5("md5#2");
|
| - file2.mutable_file_info()->set_is_directory(false);
|
| - file2.mutable_file_info()->set_size(555);
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(file2, &local_id));
|
| -
|
| - // drive/root/Dir1/SubDir2
|
| - ResourceEntry dir2;
|
| - dir2.set_title("SubDir2");
|
| - dir2.set_resource_id("resource_id:SubDir2");
|
| - dir2.set_parent_local_id(dir1_local_id);
|
| - dir2.mutable_file_info()->set_is_directory(true);
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(dir2, &local_id));
|
| - const std::string dir2_local_id = local_id;
|
| -
|
| - // drive/root/Dir1/SubDir2/File3
|
| - ResourceEntry file3;
|
| - file3.set_title("File3");
|
| - file3.set_resource_id("resource_id:File3");
|
| - file3.set_parent_local_id(dir2_local_id);
|
| - file3.mutable_file_specific_info()->set_md5("md5#2");
|
| - file3.mutable_file_info()->set_is_directory(false);
|
| - file3.mutable_file_info()->set_size(12345);
|
| - ASSERT_EQ(FILE_ERROR_OK, resource_metadata->AddEntry(file3, &local_id));
|
| -
|
| - // Recreate resource metadata.
|
| - SetUpResourceMetadataAndFileSystem();
|
| - }
|
| -
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| - base::ScopedTempDir temp_dir_;
|
| - // We don't use TestingProfile::GetPrefs() in favor of having less
|
| - // dependencies to Profile in general.
|
| - scoped_ptr<TestingPrefServiceSimple> pref_service_;
|
| -
|
| - scoped_ptr<EventLogger> logger_;
|
| - scoped_ptr<FakeDriveService> fake_drive_service_;
|
| - scoped_ptr<FakeFreeDiskSpaceGetter> fake_free_disk_space_getter_;
|
| - scoped_ptr<JobScheduler> scheduler_;
|
| - scoped_ptr<MockDirectoryChangeObserver> mock_directory_observer_;
|
| -
|
| - scoped_ptr<internal::ResourceMetadataStorage,
|
| - test_util::DestroyHelperForTests> metadata_storage_;
|
| - scoped_ptr<internal::FileCache, test_util::DestroyHelperForTests> cache_;
|
| - scoped_ptr<internal::ResourceMetadata, test_util::DestroyHelperForTests>
|
| - resource_metadata_;
|
| - scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
|
| - scoped_ptr<FileSystem> file_system_;
|
| -};
|
| -
|
| -TEST_F(FileSystemTest, SearchByHashes) {
|
| - ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP));
|
| -
|
| - std::set<std::string> hashes;
|
| - FileError error;
|
| - std::vector<HashAndFilePath> results;
|
| -
|
| - hashes.insert("md5#1");
|
| - file_system_->SearchByHashes(
|
| - hashes,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &results));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| - ASSERT_EQ(1u, results.size());
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/File1"), results[0].path.value());
|
| -
|
| - hashes.clear();
|
| - hashes.insert("md5#2");
|
| - file_system_->SearchByHashes(
|
| - hashes,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &results));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| - ASSERT_EQ(2u, results.size());
|
| - std::sort(results.begin(), results.end(), &CompareHashAndFilePath);
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/Dir1/File2"),
|
| - results[0].path.value());
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/Dir1/SubDir2/File3"),
|
| - results[1].path.value());
|
| -
|
| - hashes.clear();
|
| - hashes.insert("md5#1");
|
| - hashes.insert("md5#2");
|
| - file_system_->SearchByHashes(
|
| - hashes,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &results));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| - ASSERT_EQ(3u, results.size());
|
| - std::sort(results.begin(), results.end(), &CompareHashAndFilePath);
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/File1"), results[0].path.value());
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/Dir1/File2"),
|
| - results[1].path.value());
|
| - EXPECT_EQ(FILE_PATH_LITERAL("drive/root/Dir1/SubDir2/File3"),
|
| - results[2].path.value());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, Copy) {
|
| - base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - base::FilePath dest_file_path(FILE_PATH_LITERAL("drive/root/Copied.txt"));
|
| - EXPECT_TRUE(GetResourceEntrySync(src_file_path));
|
| - EXPECT_FALSE(GetResourceEntrySync(dest_file_path));
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->Copy(src_file_path,
|
| - dest_file_path,
|
| - false, // preserve_last_modified,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Entry is added on the server.
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(entry->title(), server_entry->title());
|
| - EXPECT_FALSE(server_entry->IsDirectory());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, Move) {
|
| - base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - base::FilePath dest_file_path(
|
| - FILE_PATH_LITERAL("drive/root/Directory 1/Moved.txt"));
|
| - EXPECT_TRUE(GetResourceEntrySync(src_file_path));
|
| - EXPECT_FALSE(GetResourceEntrySync(dest_file_path));
|
| - scoped_ptr<ResourceEntry> parent =
|
| - GetResourceEntrySync(dest_file_path.DirName());
|
| - ASSERT_TRUE(parent);
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->Move(src_file_path,
|
| - dest_file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Entry is moved on the server.
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(entry->title(), server_entry->title());
|
| -
|
| - ASSERT_FALSE(server_entry->parents().empty());
|
| - EXPECT_EQ(parent->resource_id(), server_entry->parents()[0].file_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, Remove) {
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->Remove(
|
| - file_path,
|
| - false, // is_resursive
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Entry is removed on the server.
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_TRUE(server_entry->labels().is_trashed());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, CreateDirectory) {
|
| - base::FilePath directory_path(FILE_PATH_LITERAL("drive/root/New Directory"));
|
| - EXPECT_FALSE(GetResourceEntrySync(directory_path));
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->CreateDirectory(
|
| - directory_path,
|
| - true, // is_exclusive
|
| - false, // is_recursive
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Directory is created on the server.
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(directory_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(entry->title(), server_entry->title());
|
| - EXPECT_TRUE(server_entry->IsDirectory());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, CreateFile) {
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/New File.txt"));
|
| - EXPECT_FALSE(GetResourceEntrySync(file_path));
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->CreateFile(
|
| - file_path,
|
| - true, // is_exclusive
|
| - "text/plain",
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // File is created on the server.
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(entry->title(), server_entry->title());
|
| - EXPECT_FALSE(server_entry->IsDirectory());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, TouchFile) {
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - base::Time last_accessed =
|
| - base::Time::FromInternalValue(entry->file_info().last_accessed()) +
|
| - base::TimeDelta::FromSeconds(1);
|
| - base::Time last_modified =
|
| - base::Time::FromInternalValue(entry->file_info().last_modified()) +
|
| - base::TimeDelta::FromSeconds(1);
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->TouchFile(
|
| - file_path,
|
| - last_accessed,
|
| - last_modified,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // File is touched on the server.
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(last_accessed, server_entry->last_viewed_by_me_date());
|
| - EXPECT_EQ(last_modified, server_entry->modified_date());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, TruncateFile) {
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| -
|
| - const int64 kLength = entry->file_info().size() + 100;
|
| -
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->TruncateFile(
|
| - file_path,
|
| - kLength,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // File is touched on the server.
|
| - google_apis::DriveApiErrorCode status = google_apis::DRIVE_OTHER_ERROR;
|
| - scoped_ptr<google_apis::FileResource> server_entry;
|
| - fake_drive_service_->GetFileResource(
|
| - entry->resource_id(),
|
| - google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(google_apis::HTTP_SUCCESS, status);
|
| - ASSERT_TRUE(server_entry);
|
| - EXPECT_EQ(kLength, server_entry->file_size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, DuplicatedAsyncInitialization) {
|
| - base::RunLoop loop;
|
| -
|
| - int counter = 0;
|
| - const GetResourceEntryCallback& callback = base::Bind(
|
| - &AsyncInitializationCallback, &counter, 2, loop.QuitClosure());
|
| -
|
| - file_system_->GetResourceEntry(
|
| - base::FilePath(FILE_PATH_LITERAL("drive/root")), callback);
|
| - file_system_->GetResourceEntry(
|
| - base::FilePath(FILE_PATH_LITERAL("drive/root")), callback);
|
| - loop.Run(); // Wait to get our result
|
| - EXPECT_EQ(2, counter);
|
| -
|
| - EXPECT_EQ(1, fake_drive_service_->file_list_load_count());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetGrandRootEntry) {
|
| - const base::FilePath kFilePath(FILE_PATH_LITERAL("drive"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ(util::kDriveGrandRootLocalId, entry->local_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetOtherDirEntry) {
|
| - const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/other"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ(util::kDriveOtherDirLocalId, entry->local_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetMyDriveRoot) {
|
| - const base::FilePath kFilePath(FILE_PATH_LITERAL("drive/root"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id());
|
| -
|
| - // After "fast fetch" is done, full resource list is fetched.
|
| - EXPECT_EQ(1, fake_drive_service_->file_list_load_count());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetExistingFile) {
|
| - // Simulate the situation that full feed fetching takes very long time,
|
| - // to test the recursive "fast fetch" feature is properly working.
|
| - fake_drive_service_->set_never_return_all_file_list(true);
|
| -
|
| - const base::FilePath kFilePath(
|
| - FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ("subdirectory_file_1_id", entry->resource_id());
|
| -
|
| - EXPECT_EQ(1, fake_drive_service_->about_resource_load_count());
|
| - EXPECT_EQ(2, fake_drive_service_->directory_load_count());
|
| - EXPECT_EQ(1, fake_drive_service_->blocked_file_list_load_count());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetExistingDocument) {
|
| - const base::FilePath kFilePath(
|
| - FILE_PATH_LITERAL("drive/root/Document 1 excludeDir-test.gdoc"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ("5_document_resource_id", entry->resource_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetNonExistingFile) {
|
| - const base::FilePath kFilePath(
|
| - FILE_PATH_LITERAL("drive/root/nonexisting.file"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - EXPECT_FALSE(entry);
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetInSubSubdir) {
|
| - const base::FilePath kFilePath(
|
| - FILE_PATH_LITERAL("drive/root/Directory 1/Sub Directory Folder/"
|
| - "Sub Sub Directory Folder"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - ASSERT_EQ("sub_sub_directory_folder_id", entry->resource_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetOrphanFile) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - // Entry without parents are placed under "drive/other".
|
| - const base::FilePath kFilePath(
|
| - FILE_PATH_LITERAL("drive/other/Orphan File 1.txt"));
|
| - scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(kFilePath);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_EQ("1_orphanfile_resource_id", entry->resource_id());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, ReadDirectory_Root) {
|
| - // ReadDirectory() should kick off the resource list loading.
|
| - scoped_ptr<ResourceEntryVector> entries(
|
| - ReadDirectorySync(base::FilePath::FromUTF8Unsafe("drive")));
|
| - // The root directory should be read correctly.
|
| - ASSERT_TRUE(entries);
|
| - ASSERT_EQ(3U, entries->size());
|
| -
|
| - // The found three directories should be /drive/root, /drive/other and
|
| - // /drive/trash.
|
| - std::set<base::FilePath> found;
|
| - for (size_t i = 0; i < entries->size(); ++i)
|
| - found.insert(base::FilePath::FromUTF8Unsafe((*entries)[i].title()));
|
| - EXPECT_EQ(3U, found.size());
|
| - EXPECT_EQ(1U, found.count(base::FilePath::FromUTF8Unsafe(
|
| - util::kDriveMyDriveRootDirName)));
|
| - EXPECT_EQ(1U, found.count(
|
| - base::FilePath::FromUTF8Unsafe(util::kDriveOtherDirName)));
|
| - EXPECT_EQ(1U, found.count(
|
| - base::FilePath::FromUTF8Unsafe(util::kDriveTrashDirName)));
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, ReadDirectory_NonRootDirectory) {
|
| - // ReadDirectory() should kick off the resource list loading.
|
| - scoped_ptr<ResourceEntryVector> entries(
|
| - ReadDirectorySync(
|
| - base::FilePath::FromUTF8Unsafe("drive/root/Directory 1")));
|
| - // The non root directory should also be read correctly.
|
| - // There was a bug (crbug.com/181487), which broke this behavior.
|
| - // Make sure this is fixed.
|
| - ASSERT_TRUE(entries);
|
| - EXPECT_EQ(3U, entries->size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, LoadFileSystemFromUpToDateCache) {
|
| - ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_SERVER_TIMESTAMP));
|
| -
|
| - // Kicks loading of cached file system and query for server update.
|
| - EXPECT_TRUE(ReadDirectorySync(util::GetDriveMyDriveRootPath()));
|
| -
|
| - // SetUpTestFileSystem and FakeDriveService have the same
|
| - // changestamp (i.e. the local metadata is up-to-date), so no request for
|
| - // new resource list (i.e., call to GetResourceList) should happen.
|
| - EXPECT_EQ(0, fake_drive_service_->file_list_load_count());
|
| -
|
| - // Since the file system has verified that it holds the latest snapshot,
|
| - // it should change its state to "loaded", which admits periodic refresh.
|
| - // To test it, call CheckForUpdates and verify it does try to check updates.
|
| - const int about_resource_load_count_before =
|
| - fake_drive_service_->about_resource_load_count();
|
| - file_system_->CheckForUpdates();
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_LT(about_resource_load_count_before,
|
| - fake_drive_service_->about_resource_load_count());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, LoadFileSystemFromCacheWhileOffline) {
|
| - ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP));
|
| -
|
| - // Make GetResourceList fail for simulating offline situation. This will
|
| - // leave the file system "loaded from cache, but not synced with server"
|
| - // state.
|
| - fake_drive_service_->set_offline(true);
|
| -
|
| - // Load the root.
|
| - EXPECT_TRUE(ReadDirectorySync(util::GetDriveGrandRootPath()));
|
| - // Loading of about resource should not happen as it's offline.
|
| - EXPECT_EQ(0, fake_drive_service_->about_resource_load_count());
|
| -
|
| - // Load "My Drive".
|
| - EXPECT_TRUE(ReadDirectorySync(util::GetDriveMyDriveRootPath()));
|
| - EXPECT_EQ(0, fake_drive_service_->about_resource_load_count());
|
| -
|
| - // Tests that cached data can be loaded even if the server is not reachable.
|
| - EXPECT_TRUE(EntryExists(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/File1"))));
|
| - EXPECT_TRUE(EntryExists(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1"))));
|
| - EXPECT_TRUE(EntryExists(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1/File2"))));
|
| - EXPECT_TRUE(EntryExists(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1/SubDir2"))));
|
| - EXPECT_TRUE(EntryExists(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1/SubDir2/File3"))));
|
| -
|
| - // Since the file system has at least succeeded to load cached snapshot,
|
| - // the file system should be able to start periodic refresh.
|
| - // To test it, call CheckForUpdates and verify it does try to check
|
| - // updates, which will cause directory changes.
|
| - fake_drive_service_->set_offline(false);
|
| -
|
| - file_system_->CheckForUpdates();
|
| -
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(1, fake_drive_service_->about_resource_load_count());
|
| - EXPECT_EQ(1, fake_drive_service_->change_list_load_count());
|
| -
|
| - ASSERT_LE(0u, mock_directory_observer_->changed_directories().size());
|
| - ASSERT_LE(1u, mock_directory_observer_->changed_files().size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, ReadDirectoryWhileRefreshing) {
|
| - // Use old timestamp so the fast fetch will be performed.
|
| - ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP));
|
| -
|
| - // The list of resources in "drive/root/Dir1" should be fetched.
|
| - EXPECT_TRUE(ReadDirectorySync(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1"))));
|
| - EXPECT_EQ(1, fake_drive_service_->directory_load_count());
|
| -
|
| - ASSERT_LE(1u, mock_directory_observer_->changed_directories().size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetResourceEntryNonExistentWhileRefreshing) {
|
| - // Use old timestamp so the fast fetch will be performed.
|
| - ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP));
|
| -
|
| - // If an entry is not found, parent directory's resource list is fetched.
|
| - EXPECT_FALSE(GetResourceEntrySync(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/Dir1/NonExistentFile"))));
|
| - EXPECT_EQ(1, fake_drive_service_->directory_load_count());
|
| -
|
| - ASSERT_LE(1u, mock_directory_observer_->changed_directories().size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, CreateDirectoryByImplicitLoad) {
|
| - // Intentionally *not* calling LoadFullResourceList(), for testing that
|
| - // CreateDirectory ensures the resource list is loaded before it runs.
|
| -
|
| - base::FilePath existing_directory(
|
| - FILE_PATH_LITERAL("drive/root/Directory 1"));
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->CreateDirectory(
|
| - existing_directory,
|
| - true, // is_exclusive
|
| - false, // is_recursive
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| -
|
| - // It should fail because is_exclusive is set to true.
|
| - EXPECT_EQ(FILE_ERROR_EXISTS, error);
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, CreateDirectoryRecursively) {
|
| - // Intentionally *not* calling LoadFullResourceList(), for testing that
|
| - // CreateDirectory ensures the resource list is loaded before it runs.
|
| -
|
| - base::FilePath new_directory(
|
| - FILE_PATH_LITERAL("drive/root/Directory 1/a/b/c/d"));
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->CreateDirectory(
|
| - new_directory,
|
| - true, // is_exclusive
|
| - true, // is_recursive
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| -
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(new_directory));
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_TRUE(entry->file_info().is_directory());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, ReadDirectoryAfterUpdateWhileLoading) {
|
| - // Simulate the situation that full feed fetching takes very long time,
|
| - // to test the recursive "fast fetch" feature is properly working.
|
| - fake_drive_service_->set_never_return_all_file_list(true);
|
| -
|
| - // On the fake server, create the test directory.
|
| - scoped_ptr<google_apis::FileResource> parent;
|
| - {
|
| - google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR;
|
| - fake_drive_service_->AddNewDirectory(
|
| - fake_drive_service_->GetRootResourceId(), "UpdateWhileLoadingTestDir",
|
| - AddNewDirectoryOptions(),
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &parent));
|
| - base::RunLoop().RunUntilIdle();
|
| - ASSERT_EQ(google_apis::HTTP_CREATED, error);
|
| - }
|
| -
|
| - // Fetch the directory. Currently it is empty.
|
| - scoped_ptr<ResourceEntryVector> before = ReadDirectorySync(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/UpdateWhileLoadingTestDir")));
|
| - ASSERT_TRUE(before);
|
| - EXPECT_EQ(0u, before->size());
|
| -
|
| - // Create a file in the test directory.
|
| - scoped_ptr<google_apis::FileResource> entry;
|
| - {
|
| - google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR;
|
| - fake_drive_service_->AddNewFile(
|
| - "text/plain",
|
| - "(dummy data)",
|
| - parent->file_id(),
|
| - "TestFile",
|
| - false, // shared_with_me
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &entry));
|
| - base::RunLoop().RunUntilIdle();
|
| - ASSERT_EQ(google_apis::HTTP_CREATED, error);
|
| - }
|
| -
|
| - // Notify the update to the file system.
|
| - file_system_->CheckForUpdates();
|
| -
|
| - // Read the directory once again. Although the full feed fetching is not yet
|
| - // finished, the "fast fetch" of the directory works and the refreshed content
|
| - // is returned.
|
| - scoped_ptr<ResourceEntryVector> after = ReadDirectorySync(base::FilePath(
|
| - FILE_PATH_LITERAL("drive/root/UpdateWhileLoadingTestDir")));
|
| - ASSERT_TRUE(after);
|
| - EXPECT_EQ(1u, after->size());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, PinAndUnpin) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| -
|
| - // Get the file info.
|
| - scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(file_path));
|
| - ASSERT_TRUE(entry);
|
| -
|
| - // Pin the file.
|
| - FileError error = FILE_ERROR_FAILED;
|
| - file_system_->Pin(file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_TRUE(entry->file_specific_info().cache_state().is_pinned());
|
| - EXPECT_TRUE(entry->file_specific_info().cache_state().is_present());
|
| -
|
| - // Unpin the file.
|
| - error = FILE_ERROR_FAILED;
|
| - file_system_->Unpin(file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_FALSE(entry->file_specific_info().cache_state().is_pinned());
|
| -
|
| - // Pinned file gets synced and it results in entry state changes.
|
| - ASSERT_EQ(0u, mock_directory_observer_->changed_directories().size());
|
| - ASSERT_EQ(1u, mock_directory_observer_->changed_files().size());
|
| - EXPECT_EQ(1u,
|
| - mock_directory_observer_->changed_files().CountDirectory(
|
| - base::FilePath(FILE_PATH_LITERAL("drive/root"))));
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, PinAndUnpin_NotSynced) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| -
|
| - // Get the file info.
|
| - scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(file_path));
|
| - ASSERT_TRUE(entry);
|
| -
|
| - // Unpin the file just after pinning. File fetch should be cancelled.
|
| - FileError error_pin = FILE_ERROR_FAILED;
|
| - file_system_->Pin(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error_pin));
|
| -
|
| - FileError error_unpin = FILE_ERROR_FAILED;
|
| - file_system_->Unpin(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error_unpin));
|
| -
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error_pin);
|
| - EXPECT_EQ(FILE_ERROR_OK, error_unpin);
|
| -
|
| - // No cache file available because the sync was cancelled by Unpin().
|
| - entry = GetResourceEntrySync(file_path);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_FALSE(entry->file_specific_info().cache_state().is_present());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetAvailableSpace) {
|
| - FileError error = FILE_ERROR_OK;
|
| - int64 bytes_total;
|
| - int64 bytes_used;
|
| - file_system_->GetAvailableSpace(
|
| - google_apis::test_util::CreateCopyResultCallback(
|
| - &error, &bytes_total, &bytes_used));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(6789012345LL, bytes_used);
|
| - EXPECT_EQ(9876543210LL, bytes_total);
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, MarkCacheFileAsMountedAndUnmounted) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| -
|
| - // Make the file cached.
|
| - FileError error = FILE_ERROR_FAILED;
|
| - base::FilePath file_path;
|
| - scoped_ptr<ResourceEntry> entry;
|
| - file_system_->GetFile(
|
| - file_in_root,
|
| - google_apis::test_util::CreateCopyResultCallback(
|
| - &error, &file_path, &entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Test for mounting.
|
| - error = FILE_ERROR_FAILED;
|
| - file_path.clear();
|
| - file_system_->MarkCacheFileAsMounted(
|
| - file_in_root,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &file_path));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Cannot remove a cache entry while it's being mounted.
|
| - EXPECT_EQ(FILE_ERROR_IN_USE, cache_->Remove(entry->local_id()));
|
| -
|
| - // Test for unmounting.
|
| - error = FILE_ERROR_FAILED;
|
| - file_system_->MarkCacheFileAsUnmounted(
|
| - file_path,
|
| - google_apis::test_util::CreateCopyResultCallback(&error));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| -
|
| - // Now able to remove the cache entry.
|
| - EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(entry->local_id()));
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, GetShareUrl) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - const base::FilePath kFileInRoot(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| - const GURL kEmbedOrigin("chrome-extension://test-id");
|
| -
|
| - // Try to fetch the URL for the sharing dialog.
|
| - FileError error = FILE_ERROR_FAILED;
|
| - GURL share_url;
|
| - file_system_->GetShareUrl(
|
| - kFileInRoot,
|
| - kEmbedOrigin,
|
| - google_apis::test_util::CreateCopyResultCallback(&error, &share_url));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| -
|
| - // Verify the share url to the sharing dialog.
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| - EXPECT_TRUE(share_url.is_valid());
|
| -}
|
| -
|
| -TEST_F(FileSystemTest, FreeDiskSpaceIfNeededFor) {
|
| - ASSERT_TRUE(LoadFullResourceList());
|
| -
|
| - base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt"));
|
| -
|
| - // Make the file cached.
|
| - FileError error = FILE_ERROR_FAILED;
|
| - base::FilePath file_path;
|
| - scoped_ptr<ResourceEntry> entry;
|
| - file_system_->GetFile(file_in_root,
|
| - google_apis::test_util::CreateCopyResultCallback(
|
| - &error, &file_path, &entry));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - EXPECT_EQ(FILE_ERROR_OK, error);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_TRUE(entry->file_specific_info().cache_state().is_present());
|
| -
|
| - bool available;
|
| - file_system_->FreeDiskSpaceIfNeededFor(
|
| - 512LL << 40,
|
| - google_apis::test_util::CreateCopyResultCallback(&available));
|
| - content::RunAllBlockingPoolTasksUntilIdle();
|
| - ASSERT_FALSE(available);
|
| -
|
| - entry = GetResourceEntrySync(file_in_root);
|
| - ASSERT_TRUE(entry);
|
| - EXPECT_FALSE(entry->file_specific_info().cache_state().is_present());
|
| -}
|
| -
|
| -} // namespace drive
|
|
|