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/fake_drive_file_system.h" | |
6 | |
7 #include "base/file_util.h" | |
8 #include "base/message_loop.h" | |
9 #include "chrome/browser/chromeos/drive/file_system_util.h" | |
10 #include "chrome/browser/google_apis/fake_drive_service.h" | |
11 #include "chrome/browser/google_apis/test_util.h" | |
12 #include "content/public/browser/browser_thread.h" | |
13 #include "content/public/test/test_browser_thread.h" | |
14 #include "testing/gtest/include/gtest/gtest.h" | |
15 | |
16 namespace drive { | |
17 namespace test_util { | |
18 | |
19 class FakeDriveFileSystemTest : public ::testing::Test { | |
20 protected: | |
21 FakeDriveFileSystemTest() | |
22 : ui_thread_(content::BrowserThread::UI, &message_loop_) { | |
23 } | |
24 | |
25 virtual void SetUp() OVERRIDE { | |
26 // Initialize FakeDriveService. | |
27 fake_drive_service_.reset(new google_apis::FakeDriveService); | |
28 fake_drive_service_->LoadResourceListForWapi( | |
29 "chromeos/gdata/root_feed.json"); | |
30 fake_drive_service_->LoadAccountMetadataForWapi( | |
31 "chromeos/gdata/account_metadata.json"); | |
32 fake_drive_service_->LoadAppListForDriveApi("chromeos/drive/applist.json"); | |
33 | |
34 // Create a testee instance. | |
35 fake_drive_file_system_.reset( | |
36 new FakeDriveFileSystem(fake_drive_service_.get())); | |
37 ASSERT_TRUE(fake_drive_file_system_->InitializeForTesting()); | |
38 } | |
39 | |
40 MessageLoopForUI message_loop_; | |
41 content::TestBrowserThread ui_thread_; | |
42 | |
43 scoped_ptr<google_apis::FakeDriveService> fake_drive_service_; | |
44 scoped_ptr<FakeDriveFileSystem> fake_drive_file_system_; | |
45 }; | |
46 | |
47 TEST_F(FakeDriveFileSystemTest, GetEntryInfoByResourceId) { | |
48 FileError error = FILE_ERROR_FAILED; | |
49 scoped_ptr<DriveEntryProto> entry; | |
50 base::FilePath file_path; | |
51 | |
52 fake_drive_file_system_->GetEntryInfoByResourceId( | |
53 "folder:sub_dir_folder_resource_id", | |
54 google_apis::test_util::CreateCopyResultCallback( | |
55 &error, &file_path, &entry)); | |
56 google_apis::test_util::RunBlockingPoolTask(); | |
57 | |
58 ASSERT_EQ(FILE_ERROR_OK, error); | |
59 EXPECT_EQ( | |
60 util::GetDriveMyDriveRootPath().AppendASCII( | |
61 "Directory 1/Sub Directory Folder"), | |
62 file_path); | |
63 EXPECT_TRUE(entry); // Just make sure something is returned. | |
64 } | |
65 | |
66 TEST_F(FakeDriveFileSystemTest, | |
67 GetEntryInfoByResourceId_PathCompatibleWithGetEntryInfoByPath) { | |
68 const std::string document_resource_id = "document:5_document_resource_id"; | |
69 | |
70 FileError error = FILE_ERROR_FAILED; | |
71 scoped_ptr<DriveEntryProto> entry; | |
72 base::FilePath file_path; | |
73 | |
74 // Get entry info by resource id. | |
75 fake_drive_file_system_->GetEntryInfoByResourceId( | |
76 document_resource_id, | |
77 google_apis::test_util::CreateCopyResultCallback( | |
78 &error, &file_path, &entry)); | |
79 google_apis::test_util::RunBlockingPoolTask(); | |
80 | |
81 ASSERT_EQ(FILE_ERROR_OK, error); | |
82 ASSERT_TRUE(entry); | |
83 EXPECT_TRUE(entry->file_specific_info().is_hosted_document()); | |
84 | |
85 // Get entry info by path given by GetEntryInfoByResourceId. | |
86 error = FILE_ERROR_FAILED; | |
87 entry.reset(); | |
88 fake_drive_file_system_->GetEntryInfoByPath( | |
89 file_path, | |
90 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); | |
91 google_apis::test_util::RunBlockingPoolTask(); | |
92 | |
93 ASSERT_EQ(FILE_ERROR_OK, error); | |
94 ASSERT_TRUE(entry); | |
95 EXPECT_EQ(document_resource_id, entry->resource_id()); | |
96 } | |
97 | |
98 TEST_F(FakeDriveFileSystemTest, GetFileContentByPath) { | |
99 FileError initialize_error = FILE_ERROR_FAILED; | |
100 scoped_ptr<DriveEntryProto> entry_proto; | |
101 base::FilePath cache_file_path; | |
102 base::Closure cancel_download; | |
103 google_apis::test_util::TestGetContentCallback get_content_callback; | |
104 FileError completion_error = FILE_ERROR_FAILED; | |
105 | |
106 const base::FilePath kDriveFile = | |
107 util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt"); | |
108 | |
109 // For the first time, the file should be downloaded from the service. | |
110 fake_drive_file_system_->GetFileContentByPath( | |
111 kDriveFile, | |
112 google_apis::test_util::CreateCopyResultCallback( | |
113 &initialize_error, &entry_proto, &cache_file_path, &cancel_download), | |
114 get_content_callback.callback(), | |
115 google_apis::test_util::CreateCopyResultCallback(&completion_error)); | |
116 google_apis::test_util::RunBlockingPoolTask(); | |
117 | |
118 EXPECT_EQ(FILE_ERROR_OK, initialize_error); | |
119 EXPECT_TRUE(entry_proto); | |
120 | |
121 // No cache file is available yet. | |
122 EXPECT_TRUE(cache_file_path.empty()); | |
123 | |
124 // The download should be happened so the |get_content_callback| | |
125 // should have the actual data. | |
126 std::string content = get_content_callback.GetConcatenatedData(); | |
127 EXPECT_EQ(10U, content.size()); | |
128 EXPECT_EQ(FILE_ERROR_OK, completion_error); | |
129 | |
130 initialize_error = FILE_ERROR_FAILED; | |
131 entry_proto.reset(); | |
132 get_content_callback.mutable_data()->clear(); | |
133 completion_error = FILE_ERROR_FAILED; | |
134 | |
135 // For the second time, the cache file should be found. | |
136 fake_drive_file_system_->GetFileContentByPath( | |
137 kDriveFile, | |
138 google_apis::test_util::CreateCopyResultCallback( | |
139 &initialize_error, &entry_proto, &cache_file_path, &cancel_download), | |
140 get_content_callback.callback(), | |
141 google_apis::test_util::CreateCopyResultCallback(&completion_error)); | |
142 google_apis::test_util::RunBlockingPoolTask(); | |
143 | |
144 EXPECT_EQ(FILE_ERROR_OK, initialize_error); | |
145 EXPECT_TRUE(entry_proto); | |
146 | |
147 // Cache file should be available. | |
148 ASSERT_FALSE(cache_file_path.empty()); | |
149 | |
150 // There should be a cache file so no data should be downloaded. | |
151 EXPECT_TRUE(get_content_callback.data().empty()); | |
152 EXPECT_EQ(FILE_ERROR_OK, completion_error); | |
153 | |
154 // Make sure the cached file's content. | |
155 std::string cache_file_content; | |
156 ASSERT_TRUE( | |
157 file_util::ReadFileToString(cache_file_path, &cache_file_content)); | |
158 EXPECT_EQ(content, cache_file_content); | |
159 } | |
160 | |
161 TEST_F(FakeDriveFileSystemTest, GetFileContentByPath_Directory) { | |
162 FileError initialize_error = FILE_ERROR_FAILED; | |
163 scoped_ptr<DriveEntryProto> entry_proto; | |
164 base::FilePath cache_file_path; | |
165 google_apis::test_util::TestGetContentCallback get_content_callback; | |
166 FileError completion_error = FILE_ERROR_FAILED; | |
167 base::Closure cancel_download; | |
168 | |
169 fake_drive_file_system_->GetFileContentByPath( | |
170 util::GetDriveMyDriveRootPath(), | |
171 google_apis::test_util::CreateCopyResultCallback( | |
172 &initialize_error, &entry_proto, &cache_file_path, &cancel_download), | |
173 get_content_callback.callback(), | |
174 google_apis::test_util::CreateCopyResultCallback(&completion_error)); | |
175 google_apis::test_util::RunBlockingPoolTask(); | |
176 | |
177 EXPECT_EQ(FILE_ERROR_NOT_A_FILE, completion_error); | |
178 } | |
179 | |
180 TEST_F(FakeDriveFileSystemTest, GetEntryInfoByPath) { | |
181 FileError error = FILE_ERROR_FAILED; | |
182 scoped_ptr<DriveEntryProto> entry; | |
183 fake_drive_file_system_->GetEntryInfoByPath( | |
184 util::GetDriveMyDriveRootPath().AppendASCII( | |
185 "Directory 1/Sub Directory Folder"), | |
186 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); | |
187 google_apis::test_util::RunBlockingPoolTask(); | |
188 | |
189 ASSERT_EQ(FILE_ERROR_OK, error); | |
190 ASSERT_TRUE(entry); | |
191 EXPECT_EQ("folder:sub_dir_folder_resource_id", entry->resource_id()); | |
192 } | |
193 | |
194 TEST_F(FakeDriveFileSystemTest, GetEntryInfoByPath_Root) { | |
195 FileError error = FILE_ERROR_FAILED; | |
196 scoped_ptr<DriveEntryProto> entry; | |
197 fake_drive_file_system_->GetEntryInfoByPath( | |
198 util::GetDriveMyDriveRootPath(), | |
199 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); | |
200 google_apis::test_util::RunBlockingPoolTask(); | |
201 | |
202 ASSERT_EQ(FILE_ERROR_OK, error); | |
203 ASSERT_TRUE(entry); | |
204 EXPECT_TRUE(entry->file_info().is_directory()); | |
205 EXPECT_EQ(fake_drive_service_->GetRootResourceId(), entry->resource_id()); | |
206 EXPECT_EQ(util::kDriveMyDriveRootDirName, entry->title()); | |
207 } | |
208 | |
209 TEST_F(FakeDriveFileSystemTest, GetEntryInfoByPath_Invalid) { | |
210 FileError error = FILE_ERROR_FAILED; | |
211 scoped_ptr<DriveEntryProto> entry; | |
212 fake_drive_file_system_->GetEntryInfoByPath( | |
213 util::GetDriveMyDriveRootPath().AppendASCII("Invalid File Name"), | |
214 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); | |
215 google_apis::test_util::RunBlockingPoolTask(); | |
216 | |
217 ASSERT_EQ(FILE_ERROR_NOT_FOUND, error); | |
218 ASSERT_FALSE(entry); | |
219 } | |
220 | |
221 } // namespace test_util | |
222 } // namespace drive | |
OLD | NEW |