Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/chromeos/drive/file_system/get_file_for_saving_operatio n.h" | |
| 6 | |
| 7 #include "base/callback.h" | |
| 8 #include "base/file_util.h" | |
| 9 #include "base/files/file_path.h" | |
| 10 #include "base/run_loop.h" | |
| 11 #include "chrome/browser/chromeos/drive/drive.pb.h" | |
| 12 #include "chrome/browser/chromeos/drive/file_errors.h" | |
| 13 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" | |
| 14 #include "chrome/browser/chromeos/drive/file_write_watcher.h" | |
| 15 #include "chrome/browser/google_apis/test_util.h" | |
| 16 #include "testing/gtest/include/gtest/gtest.h" | |
| 17 | |
| 18 namespace drive { | |
| 19 namespace file_system { | |
| 20 | |
| 21 namespace { | |
| 22 | |
| 23 // If OnCacheFileUploadNeededByOperation is called, records the resource ID and | |
| 24 // calls |quit_closure|. | |
| 25 class TestObserver : public OperationObserver { | |
| 26 public: | |
| 27 void set_quit_closure(const base::Closure& quit_closure) { | |
| 28 quit_closure_ = quit_closure; | |
| 29 } | |
| 30 | |
| 31 const std::string& observerd_resource_id() const { | |
| 32 return observed_resource_id_; | |
| 33 } | |
| 34 | |
| 35 // OperationObserver overrides. | |
| 36 virtual void OnDirectoryChangedByOperation( | |
| 37 const base::FilePath& path) OVERRIDE {} | |
| 38 | |
| 39 virtual void OnCacheFileUploadNeededByOperation( | |
| 40 const std::string& resource_id) OVERRIDE { | |
| 41 observed_resource_id_ = resource_id; | |
| 42 quit_closure_.Run(); | |
| 43 } | |
| 44 | |
| 45 private: | |
| 46 std::string observed_resource_id_; | |
| 47 base::Closure quit_closure_; | |
| 48 }; | |
| 49 | |
| 50 } // namespace | |
| 51 | |
| 52 class GetFileForSavingOperationTest : public OperationTestBase { | |
| 53 protected: | |
| 54 // FileWriteWatcher requires TYPE_IO message loop to run. | |
| 55 GetFileForSavingOperationTest() | |
| 56 : OperationTestBase(content::TestBrowserThreadBundle::IO_MAINLOOP) { | |
| 57 } | |
| 58 | |
| 59 virtual void SetUp() OVERRIDE { | |
| 60 OperationTestBase::SetUp(); | |
| 61 | |
| 62 operation.reset(new GetFileForSavingOperation( | |
| 63 blocking_task_runner(), &observer, scheduler(), metadata(), cache(), | |
| 64 temp_dir())); | |
| 65 operation->file_write_watcher_for_testing()->DisableDelayForTesting(); | |
| 66 } | |
| 67 | |
| 68 TestObserver observer; | |
|
hashimoto
2013/08/07 10:31:54
nit: '_' missing at the end of member variables' n
kinaba
2013/08/07 11:28:38
Done.
| |
| 69 scoped_ptr<GetFileForSavingOperation> operation; | |
| 70 }; | |
| 71 | |
| 72 TEST_F(GetFileForSavingOperationTest, GetFileForSaving_Exist) { | |
| 73 base::FilePath drive_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | |
| 74 ResourceEntry src_entry; | |
| 75 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(drive_path, &src_entry)); | |
| 76 | |
| 77 // Run the operation. | |
| 78 FileError error = FILE_ERROR_FAILED; | |
| 79 scoped_ptr<ResourceEntry> entry; | |
| 80 base::FilePath local_path; | |
| 81 operation->GetFileForSaving( | |
| 82 drive_path, | |
| 83 google_apis::test_util::CreateCopyResultCallback( | |
| 84 &error, &local_path, &entry)); | |
| 85 test_util::RunBlockingPoolTask(); | |
| 86 | |
| 87 // Checks that the file is retrieved. | |
| 88 EXPECT_EQ(FILE_ERROR_OK, error); | |
|
hashimoto
2013/08/07 10:31:54
nit: ASSERT_TRUE(entry)?
kinaba
2013/08/07 11:28:38
Done.
| |
| 89 EXPECT_EQ(src_entry.resource_id(), entry->resource_id()); | |
| 90 | |
| 91 // Checks that it presents in cache and marked dirty. | |
| 92 bool success = false; | |
| 93 FileCacheEntry cache_entry; | |
| 94 cache()->GetCacheEntryOnUIThread( | |
| 95 src_entry.resource_id(), | |
| 96 google_apis::test_util::CreateCopyResultCallback(&success, &cache_entry)); | |
| 97 test_util::RunBlockingPoolTask(); | |
| 98 EXPECT_TRUE(success); | |
| 99 EXPECT_TRUE(cache_entry.is_present()); | |
| 100 EXPECT_TRUE(cache_entry.is_dirty()); | |
| 101 | |
| 102 // Write something to the cache and checks that the event is reported. | |
| 103 { | |
| 104 base::RunLoop run_loop; | |
| 105 observer.set_quit_closure(run_loop.QuitClosure()); | |
| 106 google_apis::test_util::WriteStringToFile(local_path, "hello"); | |
| 107 run_loop.Run(); | |
|
hashimoto
2013/08/07 10:31:54
Don't we need to check the state of the observer?
kinaba
2013/08/07 11:28:38
We have to. Done.
| |
| 108 } | |
| 109 } | |
| 110 | |
| 111 TEST_F(GetFileForSavingOperationTest, GetFileForSaving_NotExist) { | |
| 112 base::FilePath drive_path(FILE_PATH_LITERAL("drive/root/NotExist.txt")); | |
| 113 ResourceEntry src_entry; | |
| 114 ASSERT_EQ(FILE_ERROR_NOT_FOUND, | |
| 115 GetLocalResourceEntry(drive_path, &src_entry)); | |
| 116 | |
| 117 // Run the operation. | |
| 118 FileError error = FILE_ERROR_FAILED; | |
| 119 scoped_ptr<ResourceEntry> entry; | |
| 120 base::FilePath local_path; | |
| 121 operation->GetFileForSaving( | |
| 122 drive_path, | |
| 123 google_apis::test_util::CreateCopyResultCallback( | |
| 124 &error, &local_path, &entry)); | |
| 125 test_util::RunBlockingPoolTask(); | |
| 126 | |
| 127 // Checks that the file is created and retrieved. | |
| 128 EXPECT_EQ(FILE_ERROR_OK, error); | |
| 129 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(drive_path, &src_entry)); | |
| 130 int64 size = -1; | |
| 131 EXPECT_TRUE(file_util::GetFileSize(local_path, &size)); | |
| 132 EXPECT_EQ(0, size); | |
| 133 } | |
| 134 | |
| 135 TEST_F(GetFileForSavingOperationTest, GetFileForSaving_Directory) { | |
| 136 base::FilePath drive_path(FILE_PATH_LITERAL("drive/root/Directory 1")); | |
| 137 ResourceEntry src_entry; | |
| 138 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(drive_path, &src_entry)); | |
| 139 ASSERT_TRUE(src_entry.file_info().is_directory()); | |
| 140 | |
| 141 // Run the operation. | |
| 142 FileError error = FILE_ERROR_FAILED; | |
| 143 scoped_ptr<ResourceEntry> entry; | |
| 144 base::FilePath local_path; | |
| 145 operation->GetFileForSaving( | |
| 146 drive_path, | |
| 147 google_apis::test_util::CreateCopyResultCallback( | |
| 148 &error, &local_path, &entry)); | |
| 149 test_util::RunBlockingPoolTask(); | |
| 150 | |
| 151 // Checks that an error is returned. | |
| 152 EXPECT_EQ(FILE_ERROR_EXISTS, error); | |
| 153 } | |
| 154 | |
| 155 } // namespace file_system | |
| 156 } // namespace drive | |
| OLD | NEW |