Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/drive_backend_sync_unittest.cc

Issue 442383002: Move storage-related files from webkit/ to new top-level directory storage/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <stack> 6 #include <stack>
7 7
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 16 matching lines...) Expand all
27 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h" 27 #include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
28 #include "chrome/browser/sync_file_system/syncable_file_system_util.h" 28 #include "chrome/browser/sync_file_system/syncable_file_system_util.h"
29 #include "chrome/test/base/testing_profile.h" 29 #include "chrome/test/base/testing_profile.h"
30 #include "content/public/test/test_browser_thread.h" 30 #include "content/public/test/test_browser_thread.h"
31 #include "content/public/test/test_browser_thread_bundle.h" 31 #include "content/public/test/test_browser_thread_bundle.h"
32 #include "extensions/common/extension.h" 32 #include "extensions/common/extension.h"
33 #include "google_apis/drive/drive_api_parser.h" 33 #include "google_apis/drive/drive_api_parser.h"
34 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
35 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 35 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
36 #include "third_party/leveldatabase/src/include/leveldb/env.h" 36 #include "third_party/leveldatabase/src/include/leveldb/env.h"
37 #include "webkit/browser/fileapi/file_system_context.h" 37 #include "storage/browser/fileapi/file_system_context.h"
38 38
39 #define FPL(a) FILE_PATH_LITERAL(a) 39 #define FPL(a) FILE_PATH_LITERAL(a)
40 40
41 namespace sync_file_system { 41 namespace sync_file_system {
42 namespace drive_backend { 42 namespace drive_backend {
43 43
44 typedef fileapi::FileSystemOperation::FileEntryList FileEntryList; 44 typedef storage::FileSystemOperation::FileEntryList FileEntryList;
45 45
46 namespace { 46 namespace {
47 47
48 template <typename T> 48 template <typename T>
49 void SetValueAndCallClosure(const base::Closure& closure, 49 void SetValueAndCallClosure(const base::Closure& closure,
50 T* arg_out, 50 T* arg_out,
51 T arg) { 51 T arg) {
52 *arg_out = base::internal::CallbackForward(arg); 52 *arg_out = base::internal::CallbackForward(arg);
53 closure.Run(); 53 closure.Run();
54 } 54 }
55 55
56 void SetSyncStatusAndUrl(const base::Closure& closure, 56 void SetSyncStatusAndUrl(const base::Closure& closure,
57 SyncStatusCode* status_out, 57 SyncStatusCode* status_out,
58 fileapi::FileSystemURL* url_out, 58 storage::FileSystemURL* url_out,
59 SyncStatusCode status, 59 SyncStatusCode status,
60 const fileapi::FileSystemURL& url) { 60 const storage::FileSystemURL& url) {
61 *status_out = status; 61 *status_out = status;
62 *url_out = url; 62 *url_out = url;
63 closure.Run(); 63 closure.Run();
64 } 64 }
65 65
66 } // namespace 66 } // namespace
67 67
68 class DriveBackendSyncTest : public testing::Test, 68 class DriveBackendSyncTest : public testing::Test,
69 public LocalFileSyncService::Observer, 69 public LocalFileSyncService::Observer,
70 public RemoteFileSyncService::Observer { 70 public RemoteFileSyncService::Observer {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 virtual void OnRemoteChangeQueueUpdated(int64 pending_changes_hint) OVERRIDE { 159 virtual void OnRemoteChangeQueueUpdated(int64 pending_changes_hint) OVERRIDE {
160 pending_remote_changes_ = pending_changes_hint; 160 pending_remote_changes_ = pending_changes_hint;
161 } 161 }
162 162
163 virtual void OnLocalChangeAvailable(int64 pending_changes_hint) OVERRIDE { 163 virtual void OnLocalChangeAvailable(int64 pending_changes_hint) OVERRIDE {
164 pending_local_changes_ = pending_changes_hint; 164 pending_local_changes_ = pending_changes_hint;
165 } 165 }
166 166
167 protected: 167 protected:
168 fileapi::FileSystemURL CreateURL(const std::string& app_id, 168 storage::FileSystemURL CreateURL(const std::string& app_id,
169 const base::FilePath::StringType& path) { 169 const base::FilePath::StringType& path) {
170 return CreateURL(app_id, base::FilePath(path)); 170 return CreateURL(app_id, base::FilePath(path));
171 } 171 }
172 172
173 fileapi::FileSystemURL CreateURL(const std::string& app_id, 173 storage::FileSystemURL CreateURL(const std::string& app_id,
174 const base::FilePath& path) { 174 const base::FilePath& path) {
175 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id); 175 GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id);
176 return CreateSyncableFileSystemURL(origin, path); 176 return CreateSyncableFileSystemURL(origin, path);
177 } 177 }
178 178
179 bool GetAppRootFolderID(const std::string& app_id, 179 bool GetAppRootFolderID(const std::string& app_id,
180 std::string* folder_id) { 180 std::string* folder_id) {
181 base::RunLoop run_loop; 181 base::RunLoop run_loop;
182 bool success = false; 182 bool success = false;
183 FileTracker tracker; 183 FileTracker tracker;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 const base::FilePath::StringType& path) { 266 const base::FilePath::StringType& path) {
267 ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 267 ASSERT_TRUE(ContainsKey(file_systems_, app_id));
268 EXPECT_EQ(base::File::FILE_OK, 268 EXPECT_EQ(base::File::FILE_OK,
269 file_systems_[app_id]->CreateDirectory( 269 file_systems_[app_id]->CreateDirectory(
270 CreateURL(app_id, path))); 270 CreateURL(app_id, path)));
271 } 271 }
272 272
273 void AddOrUpdateLocalFile(const std::string& app_id, 273 void AddOrUpdateLocalFile(const std::string& app_id,
274 const base::FilePath::StringType& path, 274 const base::FilePath::StringType& path,
275 const std::string& content) { 275 const std::string& content) {
276 fileapi::FileSystemURL url(CreateURL(app_id, path)); 276 storage::FileSystemURL url(CreateURL(app_id, path));
277 ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 277 ASSERT_TRUE(ContainsKey(file_systems_, app_id));
278 EXPECT_EQ(base::File::FILE_OK, file_systems_[app_id]->CreateFile(url)); 278 EXPECT_EQ(base::File::FILE_OK, file_systems_[app_id]->CreateFile(url));
279 int64 bytes_written = file_systems_[app_id]->WriteString(url, content); 279 int64 bytes_written = file_systems_[app_id]->WriteString(url, content);
280 EXPECT_EQ(static_cast<int64>(content.size()), bytes_written); 280 EXPECT_EQ(static_cast<int64>(content.size()), bytes_written);
281 base::RunLoop().RunUntilIdle(); 281 base::RunLoop().RunUntilIdle();
282 } 282 }
283 283
284 void UpdateLocalFile(const std::string& app_id, 284 void UpdateLocalFile(const std::string& app_id,
285 const base::FilePath::StringType& path, 285 const base::FilePath::StringType& path,
286 const std::string& content) { 286 const std::string& content) {
287 ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 287 ASSERT_TRUE(ContainsKey(file_systems_, app_id));
288 int64 bytes_written = file_systems_[app_id]->WriteString( 288 int64 bytes_written = file_systems_[app_id]->WriteString(
289 CreateURL(app_id, path), content); 289 CreateURL(app_id, path), content);
290 EXPECT_EQ(static_cast<int64>(content.size()), bytes_written); 290 EXPECT_EQ(static_cast<int64>(content.size()), bytes_written);
291 base::RunLoop().RunUntilIdle(); 291 base::RunLoop().RunUntilIdle();
292 } 292 }
293 293
294 void RemoveLocal(const std::string& app_id, 294 void RemoveLocal(const std::string& app_id,
295 const base::FilePath::StringType& path) { 295 const base::FilePath::StringType& path) {
296 ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 296 ASSERT_TRUE(ContainsKey(file_systems_, app_id));
297 EXPECT_EQ(base::File::FILE_OK, 297 EXPECT_EQ(base::File::FILE_OK,
298 file_systems_[app_id]->Remove( 298 file_systems_[app_id]->Remove(
299 CreateURL(app_id, path), 299 CreateURL(app_id, path),
300 true /* recursive */)); 300 true /* recursive */));
301 base::RunLoop().RunUntilIdle(); 301 base::RunLoop().RunUntilIdle();
302 } 302 }
303 303
304 SyncStatusCode ProcessLocalChange() { 304 SyncStatusCode ProcessLocalChange() {
305 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 305 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
306 fileapi::FileSystemURL url; 306 storage::FileSystemURL url;
307 base::RunLoop run_loop; 307 base::RunLoop run_loop;
308 local_sync_service_->ProcessLocalChange(base::Bind( 308 local_sync_service_->ProcessLocalChange(base::Bind(
309 &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url)); 309 &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url));
310 run_loop.Run(); 310 run_loop.Run();
311 return status; 311 return status;
312 } 312 }
313 313
314 SyncStatusCode ProcessRemoteChange() { 314 SyncStatusCode ProcessRemoteChange() {
315 SyncStatusCode status = SYNC_STATUS_UNKNOWN; 315 SyncStatusCode status = SYNC_STATUS_UNKNOWN;
316 fileapi::FileSystemURL url; 316 storage::FileSystemURL url;
317 base::RunLoop run_loop; 317 base::RunLoop run_loop;
318 remote_sync_service_->ProcessRemoteChange(base::Bind( 318 remote_sync_service_->ProcessRemoteChange(base::Bind(
319 &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url)); 319 &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url));
320 run_loop.Run(); 320 run_loop.Run();
321 return status; 321 return status;
322 } 322 }
323 323
324 int64 GetLargestChangeID() { 324 int64 GetLargestChangeID() {
325 scoped_ptr<google_apis::AboutResource> about_resource; 325 scoped_ptr<google_apis::AboutResource> about_resource;
326 EXPECT_EQ(google_apis::HTTP_SUCCESS, 326 EXPECT_EQ(google_apis::HTTP_SUCCESS,
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 folder_id, &remote_entries)); 455 folder_id, &remote_entries));
456 std::map<std::string, const google_apis::ResourceEntry*> 456 std::map<std::string, const google_apis::ResourceEntry*>
457 remote_entry_by_title; 457 remote_entry_by_title;
458 for (size_t i = 0; i < remote_entries.size(); ++i) { 458 for (size_t i = 0; i < remote_entries.size(); ++i) {
459 google_apis::ResourceEntry* remote_entry = remote_entries[i]; 459 google_apis::ResourceEntry* remote_entry = remote_entries[i];
460 EXPECT_FALSE(ContainsKey(remote_entry_by_title, remote_entry->title())) 460 EXPECT_FALSE(ContainsKey(remote_entry_by_title, remote_entry->title()))
461 << "title: " << remote_entry->title(); 461 << "title: " << remote_entry->title();
462 remote_entry_by_title[remote_entry->title()] = remote_entry; 462 remote_entry_by_title[remote_entry->title()] = remote_entry;
463 } 463 }
464 464
465 fileapi::FileSystemURL url(CreateURL(app_id, path)); 465 storage::FileSystemURL url(CreateURL(app_id, path));
466 FileEntryList local_entries; 466 FileEntryList local_entries;
467 EXPECT_EQ(base::File::FILE_OK, 467 EXPECT_EQ(base::File::FILE_OK,
468 file_system->ReadDirectory(url, &local_entries)); 468 file_system->ReadDirectory(url, &local_entries));
469 for (FileEntryList::iterator itr = local_entries.begin(); 469 for (FileEntryList::iterator itr = local_entries.begin();
470 itr != local_entries.end(); 470 itr != local_entries.end();
471 ++itr) { 471 ++itr) {
472 const fileapi::DirectoryEntry& local_entry = *itr; 472 const storage::DirectoryEntry& local_entry = *itr;
473 fileapi::FileSystemURL entry_url( 473 storage::FileSystemURL entry_url(
474 CreateURL(app_id, path.Append(local_entry.name))); 474 CreateURL(app_id, path.Append(local_entry.name)));
475 std::string title = 475 std::string title =
476 fileapi::VirtualPath::BaseName(entry_url.path()).AsUTF8Unsafe(); 476 storage::VirtualPath::BaseName(entry_url.path()).AsUTF8Unsafe();
477 SCOPED_TRACE(testing::Message() << "Verifying entry: " << title); 477 SCOPED_TRACE(testing::Message() << "Verifying entry: " << title);
478 478
479 ASSERT_TRUE(ContainsKey(remote_entry_by_title, title)); 479 ASSERT_TRUE(ContainsKey(remote_entry_by_title, title));
480 const google_apis::ResourceEntry& remote_entry = 480 const google_apis::ResourceEntry& remote_entry =
481 *remote_entry_by_title[title]; 481 *remote_entry_by_title[title];
482 if (local_entry.is_directory) { 482 if (local_entry.is_directory) {
483 ASSERT_TRUE(remote_entry.is_folder()); 483 ASSERT_TRUE(remote_entry.is_folder());
484 VerifyConsistencyForFolder(app_id, entry_url.path(), 484 VerifyConsistencyForFolder(app_id, entry_url.path(),
485 remote_entry.resource_id(), 485 remote_entry.resource_id(),
486 file_system); 486 file_system);
487 } else { 487 } else {
488 ASSERT_TRUE(remote_entry.is_file()); 488 ASSERT_TRUE(remote_entry.is_file());
489 VerifyConsistencyForFile(app_id, entry_url.path(), 489 VerifyConsistencyForFile(app_id, entry_url.path(),
490 remote_entry.resource_id(), 490 remote_entry.resource_id(),
491 file_system); 491 file_system);
492 } 492 }
493 remote_entry_by_title.erase(title); 493 remote_entry_by_title.erase(title);
494 } 494 }
495 495
496 EXPECT_TRUE(remote_entry_by_title.empty()); 496 EXPECT_TRUE(remote_entry_by_title.empty());
497 } 497 }
498 498
499 void VerifyConsistencyForFile(const std::string& app_id, 499 void VerifyConsistencyForFile(const std::string& app_id,
500 const base::FilePath& path, 500 const base::FilePath& path,
501 const std::string& file_id, 501 const std::string& file_id,
502 CannedSyncableFileSystem* file_system) { 502 CannedSyncableFileSystem* file_system) {
503 fileapi::FileSystemURL url(CreateURL(app_id, path)); 503 storage::FileSystemURL url(CreateURL(app_id, path));
504 std::string file_content; 504 std::string file_content;
505 EXPECT_EQ(google_apis::HTTP_SUCCESS, 505 EXPECT_EQ(google_apis::HTTP_SUCCESS,
506 fake_drive_service_helper_->ReadFile(file_id, &file_content)); 506 fake_drive_service_helper_->ReadFile(file_id, &file_content));
507 EXPECT_EQ(base::File::FILE_OK, 507 EXPECT_EQ(base::File::FILE_OK,
508 file_system->VerifyFile(url, file_content)); 508 file_system->VerifyFile(url, file_content));
509 } 509 }
510 510
511 size_t CountApp() { 511 size_t CountApp() {
512 return file_systems_.size(); 512 return file_systems_.size();
513 } 513 }
514 514
515 size_t CountLocalFile(const std::string& app_id) { 515 size_t CountLocalFile(const std::string& app_id) {
516 if (!ContainsKey(file_systems_, app_id)) 516 if (!ContainsKey(file_systems_, app_id))
517 return 0; 517 return 0;
518 518
519 CannedSyncableFileSystem* file_system = file_systems_[app_id]; 519 CannedSyncableFileSystem* file_system = file_systems_[app_id];
520 std::stack<base::FilePath> folders; 520 std::stack<base::FilePath> folders;
521 folders.push(base::FilePath()); // root folder 521 folders.push(base::FilePath()); // root folder
522 522
523 size_t result = 1; 523 size_t result = 1;
524 while (!folders.empty()) { 524 while (!folders.empty()) {
525 fileapi::FileSystemURL url(CreateURL(app_id, folders.top())); 525 storage::FileSystemURL url(CreateURL(app_id, folders.top()));
526 folders.pop(); 526 folders.pop();
527 527
528 FileEntryList entries; 528 FileEntryList entries;
529 EXPECT_EQ(base::File::FILE_OK, 529 EXPECT_EQ(base::File::FILE_OK,
530 file_system->ReadDirectory(url, &entries)); 530 file_system->ReadDirectory(url, &entries));
531 for (FileEntryList::iterator itr = entries.begin(); 531 for (FileEntryList::iterator itr = entries.begin();
532 itr != entries.end(); ++itr) { 532 itr != entries.end(); ++itr) {
533 ++result; 533 ++result;
534 if (itr->is_directory) 534 if (itr->is_directory)
535 folders.push(url.path().Append(itr->name)); 535 folders.push(url.path().Append(itr->name));
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1724 1724
1725 EXPECT_EQ(1u, CountApp()); 1725 EXPECT_EQ(1u, CountApp());
1726 EXPECT_EQ(1u, CountLocalFile(app_id)); 1726 EXPECT_EQ(1u, CountLocalFile(app_id));
1727 1727
1728 EXPECT_EQ(2u, CountMetadata()); 1728 EXPECT_EQ(2u, CountMetadata());
1729 EXPECT_EQ(2u, CountTracker()); 1729 EXPECT_EQ(2u, CountTracker());
1730 } 1730 }
1731 1731
1732 } // namespace drive_backend 1732 } // namespace drive_backend
1733 } // namespace sync_file_system 1733 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698