blob: 65f0a13d95fbd6fda455c514bf3c6c03bb6c318f [file] [log] [blame]
// Copyright 2013 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 "components/drive/chromeos/fake_file_system.h"
#include <memory>
#include "base/files/file_util.h"
#include "base/run_loop.h"
#include "components/drive/file_system_core_util.h"
#include "components/drive/service/fake_drive_service.h"
#include "components/drive/service/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 test_util {
class FakeFileSystemTest : public ::testing::Test {
protected:
void SetUp() override {
// Initialize FakeDriveService.
fake_drive_service_ = std::make_unique<FakeDriveService>();
ASSERT_TRUE(SetUpTestEntries(fake_drive_service_.get()));
// Create a testee instance.
fake_file_system_ =
std::make_unique<FakeFileSystem>(fake_drive_service_.get());
}
content::TestBrowserThreadBundle thread_bundle_;
std::unique_ptr<FakeDriveService> fake_drive_service_;
std::unique_ptr<FakeFileSystem> fake_file_system_;
};
TEST_F(FakeFileSystemTest, GetFileContent) {
FileError initialize_error = FILE_ERROR_FAILED;
std::unique_ptr<ResourceEntry> entry;
base::FilePath cache_file_path;
google_apis::test_util::TestGetContentCallback get_content_callback;
FileError completion_error = FILE_ERROR_FAILED;
const base::FilePath kDriveFile =
util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt");
// For the first time, the file should be downloaded from the service.
base::Closure cancel_download = fake_file_system_->GetFileContent(
kDriveFile,
google_apis::test_util::CreateCopyResultCallback(
&initialize_error, &cache_file_path, &entry),
get_content_callback.callback(),
google_apis::test_util::CreateCopyResultCallback(&completion_error));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, initialize_error);
EXPECT_TRUE(entry);
// No cache file is available yet.
EXPECT_TRUE(cache_file_path.empty());
// The download should be happened so the |get_content_callback|
// should have the actual data.
std::string content = get_content_callback.GetConcatenatedData();
EXPECT_EQ(26U, content.size());
EXPECT_EQ(FILE_ERROR_OK, completion_error);
initialize_error = FILE_ERROR_FAILED;
entry.reset();
get_content_callback.mutable_data()->clear();
completion_error = FILE_ERROR_FAILED;
// For the second time, the cache file should be found.
cancel_download = fake_file_system_->GetFileContent(
kDriveFile,
google_apis::test_util::CreateCopyResultCallback(
&initialize_error, &cache_file_path, &entry),
get_content_callback.callback(),
google_apis::test_util::CreateCopyResultCallback(&completion_error));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(FILE_ERROR_OK, initialize_error);
EXPECT_TRUE(entry);
// Cache file should be available.
ASSERT_FALSE(cache_file_path.empty());
// There should be a cache file so no data should be downloaded.
EXPECT_TRUE(get_content_callback.data().empty());
EXPECT_EQ(FILE_ERROR_OK, completion_error);
// Make sure the cached file's content.
std::string cache_file_content;
ASSERT_TRUE(
base::ReadFileToString(cache_file_path, &cache_file_content));
EXPECT_EQ(content, cache_file_content);
}
TEST_F(FakeFileSystemTest, GetFileContent_Directory) {
FileError initialize_error = FILE_ERROR_FAILED;
std::unique_ptr<ResourceEntry> entry;
base::FilePath cache_file_path;
google_apis::test_util::TestGetContentCallback get_content_callback;
FileError completion_error = FILE_ERROR_FAILED;
base::Closure cancel_download = fake_file_system_->GetFileContent(
util::GetDriveMyDriveRootPath(),
google_apis::test_util::CreateCopyResultCallback(
&initialize_error, &cache_file_path, &entry),
get_content_callback.callback(),
google_apis::test_util::CreateCopyResultCallback(&completion_error));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(FILE_ERROR_NOT_A_FILE, completion_error);
}
TEST_F(FakeFileSystemTest, GetResourceEntry) {
FileError error = FILE_ERROR_FAILED;
std::unique_ptr<ResourceEntry> entry;
fake_file_system_->GetResourceEntry(
util::GetDriveMyDriveRootPath().AppendASCII(
"Directory 1/Sub Directory Folder"),
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(entry);
EXPECT_EQ("sub_dir_folder_resource_id", entry->resource_id());
}
TEST_F(FakeFileSystemTest, GetResourceEntry_Root) {
FileError error = FILE_ERROR_FAILED;
std::unique_ptr<ResourceEntry> entry;
fake_file_system_->GetResourceEntry(
util::GetDriveMyDriveRootPath(),
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(FILE_ERROR_OK, error);
ASSERT_TRUE(entry);
EXPECT_TRUE(entry->file_info().is_directory());
EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id());
EXPECT_EQ(util::kDriveMyDriveRootDirName, entry->title());
}
TEST_F(FakeFileSystemTest, GetResourceEntry_Invalid) {
FileError error = FILE_ERROR_FAILED;
std::unique_ptr<ResourceEntry> entry;
fake_file_system_->GetResourceEntry(
util::GetDriveMyDriveRootPath().AppendASCII("Invalid File Name"),
google_apis::test_util::CreateCopyResultCallback(&error, &entry));
base::RunLoop().RunUntilIdle();
ASSERT_EQ(FILE_ERROR_NOT_FOUND, error);
ASSERT_FALSE(entry);
}
} // namespace test_util
} // namespace drive