1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/fake_file_system.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/file_util.h" 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/run_loop.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_util.h" 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/fake_drive_service.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/drive/test_util.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace drive { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace test_util { 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FakeFileSystemTest : public ::testing::Test { 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initialize FakeDriveService. 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch fake_drive_service_.reset(new FakeDriveService); 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ASSERT_TRUE(SetUpTestEntries(fake_drive_service_.get())); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Create a testee instance. 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) fake_file_system_.reset(new FakeFileSystem(fake_drive_service_.get())); 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<FakeDriveService> fake_drive_service_; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<FakeFileSystem> fake_file_system_; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FakeFileSystemTest, GetFileContent) { 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError initialize_error = FILE_ERROR_FAILED; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath cache_file_path; 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::TestGetContentCallback get_content_callback; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError completion_error = FILE_ERROR_FAILED; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath kDriveFile = 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt"); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For the first time, the file should be downloaded from the service. 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Closure cancel_download = fake_file_system_->GetFileContent( 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDriveFile, 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback( 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &initialize_error, &cache_file_path, &entry), 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback.callback(), 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&completion_error)); 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, initialize_error); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(entry); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // No cache file is available yet. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(cache_file_path.empty()); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The download should be happened so the |get_content_callback| 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // should have the actual data. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string content = get_content_callback.GetConcatenatedData(); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(26U, content.size()); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, completion_error); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) initialize_error = FILE_ERROR_FAILED; 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) entry.reset(); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback.mutable_data()->clear(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) completion_error = FILE_ERROR_FAILED; 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // For the second time, the cache file should be found. 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch cancel_download = fake_file_system_->GetFileContent( 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kDriveFile, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback( 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &initialize_error, &cache_file_path, &entry), 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback.callback(), 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&completion_error)); 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, initialize_error); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(entry); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Cache file should be available. 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(cache_file_path.empty()); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There should be a cache file so no data should be downloaded. 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(get_content_callback.data().empty()); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, completion_error); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure the cached file's content. 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string cache_file_content; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE( 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) base::ReadFileToString(cache_file_path, &cache_file_content)); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(content, cache_file_content); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FakeFileSystemTest, GetFileContent_Directory) { 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError initialize_error = FILE_ERROR_FAILED; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath cache_file_path; 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::TestGetContentCallback get_content_callback; 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError completion_error = FILE_ERROR_FAILED; 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Closure cancel_download = fake_file_system_->GetFileContent( 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) util::GetDriveMyDriveRootPath(), 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback( 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch &initialize_error, &cache_file_path, &entry), 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) get_content_callback.callback(), 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&completion_error)); 1097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_A_FILE, completion_error); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FakeFileSystemTest, GetResourceEntry) { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry; 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fake_file_system_->GetResourceEntry( 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) util::GetDriveMyDriveRootPath().AppendASCII( 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Directory 1/Sub Directory Folder"), 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error, &entry)); 1217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, error); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(entry); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ("folder:sub_dir_folder_resource_id", entry->resource_id()); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FakeFileSystemTest, GetResourceEntry_Root) { 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry; 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fake_file_system_->GetResourceEntry( 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) util::GetDriveMyDriveRootPath(), 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error, &entry)); 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, error); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(entry); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(entry->file_info().is_directory()); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id()); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(util::kDriveMyDriveRootDirName, entry->title()); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(FakeFileSystemTest, GetResourceEntry_Invalid) { 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ResourceEntry> entry; 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) fake_file_system_->GetResourceEntry( 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) util::GetDriveMyDriveRootPath().AppendASCII("Invalid File Name"), 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error, &entry)); 1497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_NOT_FOUND, error); 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE(entry); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace test_util 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace drive 157